* * @author Double Bastion LLC * * @license GNU AGPL version 3 or any later version * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this program. If not, see . * */ declare(strict_types=1); namespace OCA\SMSRelentless\Service; use OCP\IDBConnection; use OCP\Security\ICrypto; use OCP\AppFramework\ApiController; use OCP\AppFramework\Controller; use OCP\IRequest; use OCP\IGroupManager; class SmsrelentlessService { private $connection; private $crypto; private $groupManager; public function __construct(IDBConnection $connection, ICrypto $crypto, IGroupManager $groupManager) { $this->connection = $connection; $this->crypto = $crypto; $this->groupManager = $groupManager; } /** * @NoAdminRequired * */ public function insertrecsms($userId, $recmessagearr) { $authorDisplayNm = ''; $internalSender = 0; // Search for the associated Display Name in the previous messages sent from the same phone number, in the 'sms_relent_sent' table $recmsgfromprc = '%' . $recmessagearr[2]; $getdspnmst = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `from` LIKE ?'); $getdspnmstres = $getdspnmst->execute([$recmsgfromprc]); $dispnamearr = []; while ($dspnmstfetched = $getdspnmstres->fetch()) { $dispnamearr[] = $dspnmstfetched['author_displayname']; } $getdspnmstres->closeCursor(); if ($dispnamearr) { $descdspnmarr = array_reverse($dispnamearr); $authorDisplayNm = $descdspnmarr[0]; $internalSender = 1; } else { $authorDisplayNm = ''; $internalSender = 0; } if (!$authorDisplayNm) { // Search for the associated Display Name in the previous messages coming from the same phone number, in the 'sms_relent_received' table $getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ?'); $getdspnmres = $getdspnm->execute([$recmessagearr[2]]); $dspnmearr = []; while ($dspnmfetched = $getdspnmres->fetch()) { if ($dspnmfetched['author_displayname']) { $dspnmearr[] = $dspnmfetched['author_displayname']; } } $getdspnmres->closeCursor(); if ($dspnmearr) { $descdisplaynmarr = array_reverse($dspnmearr); $authorDisplayNm = $descdisplaynmarr[0]; $internalSender = 0; } else { $authorDisplayNm = ''; $internalSender = 0; } } // Insert the received message in the 'sms_relent_received' table $escapedmessagepre = $recmessagearr[4]; $escapedmessage = nl2br($escapedmessagepre); $sql = $this->connection->prepare(' INSERT INTO `*PREFIX*sms_relent_received` (`user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender`) VALUES (?, ?, ?, ?, ?, ?, ?, ?) '); $sql->execute([$userId, $recmessagearr[0], $recmessagearr[1], $recmessagearr[2], $recmessagearr[3], $escapedmessage, $authorDisplayNm, $internalSender]); } /** * @NoAdminRequired * */ public function insertsentsms($userId, $sentmessagearr) { $authorDisplayName = ''; $msgsentfrompre = explode("+", $sentmessagearr[2]); $msgsentfrom = "+" . $msgsentfrompre[1]; // Search for the sender's Display Name $getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnstres = $getacdatadnst->execute([$userId, 'displayname']); $acusrdnstfetched = $getacdatadnstres->fetch(); $getacdatadnstres->closeCursor(); if ($acusrdnstfetched) { $authorDisplayName = $acusrdnstfetched['value']; } $textwithnl = nl2br($sentmessagearr[8]); $sql = $this->connection->prepare(' INSERT INTO `*PREFIX*sms_relent_sent` (`user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) '); $sql->execute([$userId, $sentmessagearr[0], $sentmessagearr[1], $sentmessagearr[2], $sentmessagearr[3], $sentmessagearr[4], $sentmessagearr[5], $sentmessagearr[6], $sentmessagearr[7], $textwithnl, $authorDisplayName]); } /** * @NoAdminRequired * */ public function updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus) { $sqlupdateds = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_sent` SET `price` = ?, `status` = ?, `deliveryreceipt` = ?, `network` = ? WHERE `message_id` = ? AND `user_id` = ? '); $updateRes = $sqlupdateds->execute([$messageprice, $messagestatus, $deliverystatus, $network, $messageid, $ncuserfortelnyxdel]); $updateRes->closeCursor(); } /** * @NoAdminRequired * */ public function updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) { $sqlupdatedspl = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_sent` SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ? WHERE `message_id` = ? AND `user_id` = ? '); $updateResdspl = $sqlupdatedspl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforplivodel]); $updateResdspl->closeCursor(); } /** * @NoAdminRequired * */ public function updatedeliverystatustwil($ncuserfortwildel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) { $sqlupdatedstw = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_sent` SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ? WHERE `message_id` = ? AND `user_id` = ? '); $updateResdstw = $sqlupdatedstw->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserfortwildel]); $updateResdstw->closeCursor(); } /** * @NoAdminRequired * */ public function updatedeliverystatusflow($ncuserforflowdel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) { $sqlupdatedsfl = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_sent` SET `price` = ?, `deliveryreceipt` = ?, `status` = ?, `network` = ? WHERE `message_id` = ? AND `user_id` = ? '); $updateResdsfl = $sqlupdatedsfl->execute([$messageprice, $deliverystatus, $mStatus, $networkcode, $messageid, $ncuserforflowdel]); $updateResdsfl->closeCursor(); } /** * @NoAdminRequired */ public function getreceivedtable($userId) { // Get the user's preferences from the settings $getgamcheckrc = $this->connection->prepare(' SELECT `user_id`, `show_all_messages`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getgamcheckrcres = $getgamcheckrc->execute([$userId]); $getcrgamsrcpref = $getgamcheckrcres->fetch(); $crgamsrcpref = $getcrgamsrcpref['show_all_messages']; $crdnmsrcpref = $getcrgamsrcpref['show_display_names']; $getgamcheckrcres->closeCursor(); // Collect the users with whom the current admin is sharing his API keys and whose messages he will be able to see if ($crgamsrcpref == 1 && $this->groupManager->isAdmin($userId)) { // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadminsd = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadminsd[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the groups and users that were allowed access to the API keys $getgrps = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getgrpsres = $getgrps->execute([$userId]); $getgrpsusr = $getgrpsres->fetch(); $getgrpsres->closeCursor(); if ($getgrpsusr) { if ($getgrpsusr['tnx_users_allowed']) { $tnxusers = explode("|", $getgrpsusr['tnx_users_allowed']); } else { $tnxusers = []; } if ($getgrpsusr['plv_users_allowed']) { $plvusers = explode("|", $getgrpsusr['plv_users_allowed']); } else { $plvusers = []; } if ($getgrpsusr['twl_users_allowed']) { $twlusers = explode("|", $getgrpsusr['twl_users_allowed']); } else { $twlusers = []; } if ($getgrpsusr['flr_users_allowed']) { $flrusers = explode("|", $getgrpsusr['flr_users_allowed']); } else { $flrusers = []; } $allwdusersarr = array_merge($tnxusers, $plvusers, $twlusers, $flrusers); $allwdusersunq = array_filter(array_unique($allwdusersarr)); if ($getgrpsusr['tnx_groups_allowed']) { $tnxgroups = explode("|", $getgrpsusr['tnx_groups_allowed']); } else { $tnxgroups = []; } if ($getgrpsusr['plv_groups_allowed']) { $plvgroups = explode("|", $getgrpsusr['plv_groups_allowed']); } else { $plvgroups = []; } if ($getgrpsusr['twl_groups_allowed']) { $twlgroups = explode("|", $getgrpsusr['twl_groups_allowed']); } else { $twlgroups = []; } if ($getgrpsusr['flr_groups_allowed']) { $flrgroups = explode("|", $getgrpsusr['flr_groups_allowed']); } else { $flrgroups = []; } $allwdgroupsarr = array_merge($tnxgroups, $plvgroups, $twlgroups, $flrgroups); $allwdgroupsunq = array_filter(array_unique($allwdgroupsarr)); } else { $allwdusersunq = []; $allwdgroupsunq = []; } // Get the username for each Display Name of the allowed users $allwdusersfnl = []; foreach ($allwdusersunq as $alwdusrkey => $alwdusrvalue) { $getacdatausrnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdatausrnmres = $getacdatausrnm->execute(['displayname', $alwdusrvalue]); $acdatausrname = $getacdatausrnmres->fetch(); if ($acdatausrname) { $allwdusersfnl[] = $acdatausrname['uid']; } $getacdatausrnmres->closeCursor(); } // Get the users from all the allowed groups $allwdusersgrpmlt = []; foreach ($allwdgroupsunq as $prgrpkey => $prgrpvalue) { // Get all the users that belong to the current group $getusringroup = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringroupres = $getusringroup->execute([$prgrpvalue]); while ($getusrname = $getusringroupres->fetch()) { // Ensure the current user is not an admin if (!in_array($getusrname['uid'], $usersadminsd)) { $allwdusersgrpmlt[] = $getusrname['uid']; } } $getusringroupres->closeCursor(); } $allwdusersgrpfnl = array_unique($allwdusersgrpmlt); $allusr = array_merge($allwdusersfnl, $allwdusersgrpfnl); $allusruniquest = array_unique($allusr); if ($allusruniquest) { array_unshift($allusruniquest, $userId); $allusruniquerc = $allusruniquest; } else { $allusruniquerc = [$userId]; } $procardatarc = implode(',', array_fill(0, count($allusruniquerc), '?')); } // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crgamsrcpref == 1 && $this->groupManager->isAdmin($userId)) { if ($crdnmsrcpref == 1) { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` IN (' . $procardatarc . ')'); $rcresult = $getrectable->execute($allusruniquerc); } else { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` IN (' . $procardatarc . ')'); $rcresult = $getrectable->execute($allusruniquerc); } // If the user is an admin and he wants to see only his messages } elseif ($crgamsrcpref == 0 && $this->groupManager->isAdmin($userId)) { if ($crdnmsrcpref == 1) { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $rcresult = $getrectable->execute([$userId]); } else { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $rcresult = $getrectable->execute([$userId]); } // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { // Get the Display Name of the current user $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get the groups to which the current user belongs $getusrgrp = $this->connection->prepare(' SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?'); $getusrgrpres = $getusrgrp->execute([$userId]); $usergrps = []; while ($fetchedgrps = $getusrgrpres->fetch()) { $usergrps[] = $fetchedgrps['gid']; } $getusrgrpres->closeCursor(); // Get the restrictions from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare(' SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestrres = $getrestr->execute(); $restrdata = []; while ($restrfetched = $getrestrres->fetch()) { $restrdata[] = $restrfetched; } $getrestrres->closeCursor(); // Get the phone numbers that the user is allowed/not allowed to use if ($restrdata) { $restrPhoneNmbrs = []; $allowedPhoneNmbrs = []; foreach ($restrdata as $rskey => $rsvalue) { $chck = 0; $restrgrparr = explode("|", $rsvalue['groups']); foreach ($restrgrparr as $rkey => $rvalue) { if ($rvalue) { if (strpos(implode("|", $usergrps), $rvalue) !== false) { $chck++; } } } if (strpos($rsvalue['users'], $cruserdname) !== false) { $chck++; } if ($chck == 0) { $restrPhoneNmbrs[] = $rsvalue['phone_number']; } else { $crphnmbr = explode(": ", $rsvalue['phone_number']); if ($crphnmbr[0] == 'Tx') { $allowedPhoneNmbrs[] = 'Telnyx: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Pl') { $allowedPhoneNmbrs[] = 'Plivo: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Tw') { $allowedPhoneNmbrs[] = 'Twilio: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Fl') { $allowedPhoneNmbrs[] = 'Flowroute: ' . $crphnmbr[1]; } } } $procalwdphnmbrs = implode(',', array_fill(0, count($allowedPhoneNmbrs), '?')); array_unshift($allowedPhoneNmbrs, $userId); $procalwduid = $allowedPhoneNmbrs; if ($crdnmsrcpref == 1) { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? OR `to` IN (' . $procalwdphnmbrs . ')'); $rcresult = $getrectable->execute($procalwduid); } else { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? OR `to` IN (' . $procalwdphnmbrs . ')'); $rcresult = $getrectable->execute($procalwduid); } } else { if ($crdnmsrcpref == 1) { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $rcresult = $getrectable->execute([$userId]); } else { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $rcresult = $getrectable->execute([$userId]); } } } $recdatatable = []; while ($rowfetched = $rcresult->fetch()) { $recdatatable[] = $rowfetched; } $rcresult->closeCursor(); $recdatafromdb = $recdatatable; if ($this->groupManager->isAdmin($userId)) { $recdatafdb = ['datarows' => $recdatafromdb, 'showdispnm' => $crdnmsrcpref]; return $recdatafdb; } else { if ($restrdata) { // Clean the 'not allowed' phone numbers from tags $restrPhfin = []; foreach ($restrPhoneNmbrs as $phkey => $phvalue) { $restrpharr = explode(": ", $phvalue); $restrPhfin[] = $restrpharr[1]; } // Assemble the array of message rows that excludes the rows for the 'not allowed' phone numbers foreach ($recdatafromdb as $mdkey => $mdvalue) { if (str_contains($mdvalue['to'], "+")) { $fromnmbrarr = explode("+", $mdvalue['to']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($recdatafromdb[$mdkey]); } } else { $tonmbrarr = explode(": ", $mdvalue['to']); if (count($tonmbrarr) == 2) { $tonmbrtbcmprd = $tonmbrarr[1]; } else { $tonmbrtbcmprd = $tonmbrarr[0]; } if (in_array($tonmbrtbcmprd, $restrPhfin)) { unset($recdatafromdb[$mdkey]); } } } $recdatafdbproc = array_values($recdatafromdb); $recdataproc = ['datarows' => $recdatafdbproc, 'showdispnm' => $crdnmsrcpref]; return $recdataproc; } else { $recdatafdb = ['datarows' => $recdatafromdb, 'showdispnm' => $crdnmsrcpref]; return $recdatafdb; } } } /** * @NoAdminRequired */ public function getreceivedtablefordel($userId) { if ($this->groupManager->isAdmin($userId)) { $getrecfordl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `author_displayname`, `internal_sender` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $resultdl = $getrecfordl->execute([$userId]); $recdatatable = []; while ($rowfetched = $resultdl->fetch()) { $recdatatable[] = $rowfetched; } $resultdl->closeCursor(); $recdatafromdb = $recdatatable; return $recdatafromdb; } else { return "not permitted"; } } /** * @NoAdminRequired */ public function removerecrows($userId, $recmessagedbIDs) { foreach ($recmessagedbIDs as $key => $rowtodel) { $query = $this->connection->prepare(' DELETE FROM `*PREFIX*sms_relent_received` WHERE `id` = ?'); $deleteResult = $query->execute([$rowtodel]); $deleteResult->closeCursor(); } $sqlupdate = $this->connection->prepare(' SET @resetrec = 0; UPDATE `*PREFIX*sms_relent_received` SET `id` = @resetrec := @resetrec + 1; ALTER TABLE `*PREFIX*sms_relent_received` auto_increment=1;'); $updateRes = $sqlupdate->execute(); $updateRes->closeCursor(); } /** * @NoAdminRequired */ public function getsenttable($userId) { // Get the user's preferences from the settings $getgamcheck = $this->connection->prepare(' SELECT `user_id`, `show_all_messages`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getgamcheckres = $getgamcheck->execute([$userId]); $getcrgamspref = $getgamcheckres->fetch(); $crgamspref = $getcrgamspref['show_all_messages']; $crdnamespref = $getcrgamspref['show_display_names']; $getgamcheckres->closeCursor(); // Collect the users with whom the current admin is sharing his API keys and whose messages he will be able to see if ($crgamspref == 1 && $this->groupManager->isAdmin($userId)) { // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadminsd = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadminsd[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the groups and users that were allowed access to the API keys $getgrps = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getgrpsres = $getgrps->execute([$userId]); $getgrpsusr = $getgrpsres->fetch(); $getgrpsres->closeCursor(); if ($getgrpsusr) { if ($getgrpsusr['tnx_users_allowed']) { $tnxusers = explode("|", $getgrpsusr['tnx_users_allowed']); } else { $tnxusers = []; } if ($getgrpsusr['plv_users_allowed']) { $plvusers = explode("|", $getgrpsusr['plv_users_allowed']); } else { $plvusers = []; } if ($getgrpsusr['twl_users_allowed']) { $twlusers = explode("|", $getgrpsusr['twl_users_allowed']); } else { $twlusers = []; } if ($getgrpsusr['flr_users_allowed']) { $flrusers = explode("|", $getgrpsusr['flr_users_allowed']); } else { $flrusers = []; } $allwdusersarr = array_merge($tnxusers, $plvusers, $twlusers, $flrusers); $allwdusersunq = array_filter(array_unique($allwdusersarr)); if ($getgrpsusr['tnx_groups_allowed']) { $tnxgroups = explode("|", $getgrpsusr['tnx_groups_allowed']); } else { $tnxgroups = []; } if ($getgrpsusr['plv_groups_allowed']) { $plvgroups = explode("|", $getgrpsusr['plv_groups_allowed']); } else { $plvgroups = []; } if ($getgrpsusr['twl_groups_allowed']) { $twlgroups = explode("|", $getgrpsusr['twl_groups_allowed']); } else { $twlgroups = []; } if ($getgrpsusr['flr_groups_allowed']) { $flrgroups = explode("|", $getgrpsusr['flr_groups_allowed']); } else { $flrgroups = []; } $allwdgroupsarr = array_merge($tnxgroups, $plvgroups, $twlgroups, $flrgroups); $allwdgroupsunq = array_filter(array_unique($allwdgroupsarr)); } else { $allwdusersunq = []; $allwdgroupsunq = []; } // Get the username for each Display Name of the allowed users $allwdusersfnl = []; foreach ($allwdusersunq as $alwdusrkey => $alwdusrvalue) { $getacdatausrnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdatausrnmres = $getacdatausrnm->execute(['displayname', $alwdusrvalue]); $acdatausrname = $getacdatausrnmres->fetch(); if ($acdatausrname) { $allwdusersfnl[] = $acdatausrname['uid']; } $getacdatausrnmres->closeCursor(); } // Get the users from all the allowed groups $allwdusersgrpmlt = []; foreach ($allwdgroupsunq as $prgrpkey => $prgrpvalue) { // Get all the users that belong to the current group $getusringroup = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringroupres = $getusringroup->execute([$prgrpvalue]); while ($getusrname = $getusringroupres->fetch()) { // Ensure the current user is not an admin if (!in_array($getusrname['uid'], $usersadminsd)) { $allwdusersgrpmlt[] = $getusrname['uid']; } } $getusringroupres->closeCursor(); } $allwdusersgrpfnl = array_unique($allwdusersgrpmlt); $allusr = array_merge($allwdusersfnl, $allwdusersgrpfnl); $allusruniquest = array_unique($allusr); if ($allusruniquest) { array_unshift($allusruniquest, $userId); $allusrunique = $allusruniquest; } else { $allusrunique = [$userId]; } $procardata = implode(',', array_fill(0, count($allusrunique), '?')); } // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crgamspref == 1 && $this->groupManager->isAdmin($userId)) { if ($crdnamespref == 1) { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` IN (' . $procardata . ')'); $resultsent = $getsenttbl->execute($allusrunique); } else { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` IN (' . $procardata . ')'); $resultsent = $getsenttbl->execute($allusrunique); } // If the user is an admin and he wants to see only his messages } elseif ($crgamspref == 0 && $this->groupManager->isAdmin($userId)) { if ($crdnamespref == 1) { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $resultsent = $getsenttbl->execute([$userId]); } else { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $resultsent = $getsenttbl->execute([$userId]); } // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { // Get the Display Name of the current user $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get the groups to which the current user belongs $getusrgrp = $this->connection->prepare(' SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?'); $getusrgrpres = $getusrgrp->execute([$userId]); $usergrps = []; while ($fetchedgrps = $getusrgrpres->fetch()) { $usergrps[] = $fetchedgrps['gid']; } $getusrgrpres->closeCursor(); // Get the restrictions from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare(' SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestrres = $getrestr->execute(); $restrdata = []; while ($restrfetched = $getrestrres->fetch()) { $restrdata[] = $restrfetched; } $getrestrres->closeCursor(); // Get the phone numbers that the user is allowed/not allowed to use if ($restrdata) { $restrPhoneNmbrs = []; $allowedPhoneNmbrs = []; foreach ($restrdata as $rskey => $rsvalue) { $chck = 0; $restrgrparr = explode("|", $rsvalue['groups']); foreach ($restrgrparr as $rkey => $rvalue) { if ($rvalue) { if (strpos(implode("|", $usergrps), $rvalue) !== false) { $chck++; } } } if (strpos($rsvalue['users'], $cruserdname) !== false) { $chck++; } if ($chck == 0) { $restrPhoneNmbrs[] = $rsvalue['phone_number']; } else { $crphnmbr = explode(": ", $rsvalue['phone_number']); if ($crphnmbr[0] == 'Tx') { $allowedPhoneNmbrs[] = 'Telnyx: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Pl') { $allowedPhoneNmbrs[] = 'Plivo: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Tw') { $allowedPhoneNmbrs[] = 'Twilio: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Fl') { $allowedPhoneNmbrs[] = 'Flowroute: ' . $crphnmbr[1]; } } } $procalwdphnmbrs = implode(',', array_fill(0, count($allowedPhoneNmbrs), '?')); array_unshift($allowedPhoneNmbrs, $userId); $procalwduid = $allowedPhoneNmbrs; if ($crdnamespref == 1) { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? OR `from` IN (' . $procalwdphnmbrs . ')'); $resultsent = $getsenttbl->execute($procalwduid); } else { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? OR `from` IN (' . $procalwdphnmbrs . ')'); $resultsent = $getsenttbl->execute($procalwduid); } } else { if ($crdnamespref == 1) { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $resultsent = $getsenttbl->execute([$userId]); } else { $getsenttbl = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $resultsent = $getsenttbl->execute([$userId]); } } } $sentdatatable = []; while ($rowfetched = $resultsent->fetch()){ $sentdatatable[] = $rowfetched; } $resultsent->closeCursor(); $sentdatafromdb = $sentdatatable; if ($this->groupManager->isAdmin($userId)) { $sentdatafdb = ['datarows' => $sentdatafromdb, 'showdispnm' => $crdnamespref]; return $sentdatafdb; } else { if ($restrdata) { // Clean the phone numbers from tags $restrPhfin = []; foreach ($restrPhoneNmbrs as $phkey => $phvalue) { $restrpharr = explode(": ", $phvalue); $restrPhfin[] = $restrpharr[1]; } // Assemble the array of message rows that excludes the rows for the restricted phone numbers foreach ($sentdatafromdb as $smdkey => $smdvalue) { if (str_contains($smdvalue['from'], "+")) { $fromnmbrarr = explode("+", $smdvalue['from']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($sentdatafromdb[$smdkey]); } } else { $frmnmbrarr = explode(": ", $smdvalue['from']); if (count($frmnmbrarr) == 2) { $nmbtbcmprd = $frmnmbrarr[1]; } else { $nmbtbcmprd = $frmnmbrarr[0]; } if (in_array($nmbtbcmprd, $restrPhfin)) { unset($sentdatafromdb[$smdkey]); } } } $sentdatadbproc = array_values($sentdatafromdb); $sentdatafdb = ['datarows' => $sentdatadbproc, 'showdispnm' => $crdnamespref]; return $sentdatafdb; } else { $sentdatafdb = ['datarows' => $sentdatafromdb, 'showdispnm' => $crdnamespref]; return $sentdatafdb; } } } /** * @NoAdminRequired */ public function getsenttablefordel($userId) { if ($this->groupManager->isAdmin($userId)) { $getsenttbldel = $this->connection->prepare(' SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $resultsentdl = $getsenttbldel->execute([$userId]); $sentdatatable = []; while ($rowfetched = $resultsentdl->fetch()){ $sentdatatable[] = $rowfetched; } $resultsentdl->closeCursor(); $sentdatafromdb = $sentdatatable; return $sentdatafromdb; } else { return "not permitted"; } } /** * @NoAdminRequired */ public function removesentrows($userId, $sentmessagedbIDs) { foreach ($sentmessagedbIDs as $key => $sentrowtodel) { $query = $this->connection->prepare(' DELETE FROM `*PREFIX*sms_relent_sent` WHERE `id` = ?'); $deleteResult = $query->execute([$sentrowtodel]); $deleteResult->closeCursor(); } $sqlupdate = $this->connection->prepare(' SET @resetsent = 0; UPDATE `*PREFIX*sms_relent_sent` SET `id` = @resetsent := @resetsent + 1; ALTER TABLE `*PREFIX*sms_relent_sent` auto_increment=1;'); $updateRes = $sqlupdate->execute(); $updateRes->closeCursor(); } /** * @NoAdminRequired */ public function getgroupedtable($userId) { // Get the user's preferences from the settings $getpref = $this->connection->prepare(' SELECT `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getprefres = $getpref->execute([$userId]); $getprefresdata = $getprefres->fetch(); $crsampref = $getprefresdata['show_all_messages']; $getprefres->closeCursor(); // Collect the users with whom the current admin is sharing his API keys and whose messages he will be able to see if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadminsd = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadminsd[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the groups and users that were allowed access to the API keys $getgrps = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getgrpsres = $getgrps->execute([$userId]); $getgrpsusr = $getgrpsres->fetch(); $getgrpsres->closeCursor(); if ($getgrpsusr) { if ($getgrpsusr['tnx_users_allowed']) { $tnxusers = explode("|", $getgrpsusr['tnx_users_allowed']); } else { $tnxusers = []; } if ($getgrpsusr['plv_users_allowed']) { $plvusers = explode("|", $getgrpsusr['plv_users_allowed']); } else { $plvusers = []; } if ($getgrpsusr['twl_users_allowed']) { $twlusers = explode("|", $getgrpsusr['twl_users_allowed']); } else { $twlusers = []; } if ($getgrpsusr['flr_users_allowed']) { $flrusers = explode("|", $getgrpsusr['flr_users_allowed']); } else { $flrusers = []; } $allwdusersarr = array_merge($tnxusers, $plvusers, $twlusers, $flrusers); $allwdusersunq = array_filter(array_unique($allwdusersarr)); if ($getgrpsusr['tnx_groups_allowed']) { $tnxgroups = explode("|", $getgrpsusr['tnx_groups_allowed']); } else { $tnxgroups = []; } if ($getgrpsusr['plv_groups_allowed']) { $plvgroups = explode("|", $getgrpsusr['plv_groups_allowed']); } else { $plvgroups = []; } if ($getgrpsusr['twl_groups_allowed']) { $twlgroups = explode("|", $getgrpsusr['twl_groups_allowed']); } else { $twlgroups = []; } if ($getgrpsusr['flr_groups_allowed']) { $flrgroups = explode("|", $getgrpsusr['flr_groups_allowed']); } else { $flrgroups = []; } $allwdgroupsarr = array_merge($tnxgroups, $plvgroups, $twlgroups, $flrgroups); $allwdgroupsunq = array_filter(array_unique($allwdgroupsarr)); } else { $allwdusersunq = []; $allwdgroupsunq = []; } // Get the username for each Display Name of the allowed users $allwdusersfnl = []; foreach ($allwdusersunq as $alwdusrkey => $alwdusrvalue) { $getacdatausrnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdatausrnmres = $getacdatausrnm->execute(['displayname', $alwdusrvalue]); $acdatausrname = $getacdatausrnmres->fetch(); if ($acdatausrname) { $allwdusersfnl[] = $acdatausrname['uid']; } $getacdatausrnmres->closeCursor(); } // Get the users from all the allowed groups $allwdusersgrpmlt = []; foreach ($allwdgroupsunq as $prgrpkey => $prgrpvalue) { // Get all the users that belong to the current group $getusringroup = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringroupres = $getusringroup->execute([$prgrpvalue]); while ($getusrname = $getusringroupres->fetch()) { // Ensure the current user is not an admin if (!in_array($getusrname['uid'], $usersadminsd)) { $allwdusersgrpmlt[] = $getusrname['uid']; } } $getusringroupres->closeCursor(); } $allwdusersgrpfnl = array_unique($allwdusersgrpmlt); $allusr = array_merge($allwdusersfnl, $allwdusersgrpfnl); $allusruniquest = array_unique($allusr); if ($allusruniquest) { array_unshift($allusruniquest, $userId); $allusruniquegr = $allusruniquest; } else { $allusruniquegr = [$userId]; } $procardatagr = implode(',', array_fill(0, count($allusruniquegr), '?')); } // Get received messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` IN (' . $procardatagr . ')'); $getrecmsgsres = $getrecmsgs->execute($allusruniquegr); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $getrecmsgsres = $getrecmsgs->execute([$userId]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { // Get the Display Name of the current user $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get the groups to which the current user belongs $getusrgrp = $this->connection->prepare(' SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?'); $getusrgrpres = $getusrgrp->execute([$userId]); $usergrps = []; while ($fetchedgrps = $getusrgrpres->fetch()) { $usergrps[] = $fetchedgrps['gid']; } $getusrgrpres->closeCursor(); // Get the restrictions from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare(' SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestrres = $getrestr->execute(); $restrdata = []; while ($restrfetched = $getrestrres->fetch()) { $restrdata[] = $restrfetched; } $getrestrres->closeCursor(); // Get the phone numbers that the user is allowed/not allowed to use if ($restrdata) { $restrPhoneNmbrs = []; $allowedPhoneNmbrs = []; foreach ($restrdata as $rskey => $rsvalue) { $chck = 0; $restrgrparr = explode("|", $rsvalue['groups']); foreach ($restrgrparr as $rkey => $rvalue) { if ($rvalue) { if (strpos(implode("|", $usergrps), $rvalue) !== false) { $chck++; } } } if (strpos($rsvalue['users'], $cruserdname) !== false) { $chck++; } if ($chck == 0) { $restrPhoneNmbrs[] = $rsvalue['phone_number']; } else { $crphnmbr = explode(": ", $rsvalue['phone_number']); if ($crphnmbr[0] == 'Tx') { $allowedPhoneNmbrs[] = 'Telnyx: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Pl') { $allowedPhoneNmbrs[] = 'Plivo: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Tw') { $allowedPhoneNmbrs[] = 'Twilio: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Fl') { $allowedPhoneNmbrs[] = 'Flowroute: ' . $crphnmbr[1]; } } } $procalwdphnmbrs = implode(',', array_fill(0, count($allowedPhoneNmbrs), '?')); array_unshift($allowedPhoneNmbrs, $userId); $procalwduid = $allowedPhoneNmbrs; $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? OR `to` IN (' . $procalwdphnmbrs . ')'); $getrecmsgsres = $getrectable->execute($procalwduid); } else { $getrectable = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ?'); $getrecmsgsres = $getrectable->execute([$userId]); } } $recmsgs = []; while ($rcrowsfetch = $getrecmsgsres->fetch()) { $rcrowsfetch['deliveryreceipt'] = ''; $rcrowsfetch['table'] = 'received'; $recmsgs[] = $rcrowsfetch; } $getrecmsgsres->closeCursor(); // Get sent messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` IN (' . $procardatagr . ')'); $getsentmsgsres = $getsentmsgs->execute($allusruniquegr); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $getsentmsgsres = $getsentmsgs->execute([$userId]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { if ($restrdata) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? OR `from` IN (' . $procalwdphnmbrs . ')'); $getsentmsgsres = $getsentmsgs->execute($procalwduid); } else { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ?'); $getsentmsgsres = $getsentmsgs->execute([$userId]); } } $sentmsgs = []; while ($rowfetchedsmsg = $getsentmsgsres->fetch()) { $rowfetchedsmsg['table'] = 'sent'; $sentmsgs[] = $rowfetchedsmsg; } $getsentmsgsres->closeCursor(); $groupedfromdb = array_merge($recmsgs, $sentmsgs); if ($this->groupManager->isAdmin($userId)) { return $groupedfromdb; } else { if ($restrdata) { // Clean the phone numbers from tags $restrPhfin = []; foreach ($restrPhoneNmbrs as $phkey => $phvalue) { $restrpharr = explode(": ", $phvalue); $restrPhfin[] = $restrpharr[1]; } // Assemble the array of message rows that excludes the rows for the restricted phone numbers foreach ($groupedfromdb as $gmdkey => $gmdvalue) { if ($gmdvalue['table'] == 'sent') { if (str_contains($gmdvalue['from'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['from']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedfromdb[$gmdkey]); } } else { $frmnmbrarr = explode(": ", $gmdvalue['from']); if (count($frmnmbrarr) == 2) { $nmbtbcmprd = $frmnmbrarr[1]; } else { $nmbtbcmprd = $frmnmbrarr[0]; } if (in_array($nmbtbcmprd, $restrPhfin)) { unset($groupedfromdb[$gmdkey]); } } } elseif ($gmdvalue['table'] == 'received') { if (str_contains($gmdvalue['to'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['to']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedfromdb[$gmdkey]); } } else { $tonmbrarr = explode(": ", $gmdvalue['to']); if (count($tonmbrarr) == 2) { $tonmbrtbcmprd = $tonmbrarr[1]; } else { $tonmbrtbcmprd = $tonmbrarr[0]; } if (in_array($tonmbrtbcmprd, $restrPhfin)) { unset($groupedfromdb[$gmdkey]); } } } } $groupedfdbproc = array_values($groupedfromdb); return $groupedfdbproc; } else { return $groupedfromdb; } } } /** * @NoAdminRequired */ public function getgroupedpernumber($userId, $phoneNumber) { $phoneNumberpr = "%" . $phoneNumber; // Get the user's preferences from the settings $getpref = $this->connection->prepare(' SELECT `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getprefres = $getpref->execute([$userId]); $getprefresdata = $getprefres->fetch(); $crsampref = $getprefresdata['show_all_messages']; $getprefres->closeCursor(); // Collect the users with whom the current admin is sharing his API keys and whose messages he will be able to see if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadminsd = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadminsd[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the groups and users that were allowed access to the API keys $getgrps = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getgrpsres = $getgrps->execute([$userId]); $getgrpsusr = $getgrpsres->fetch(); $getgrpsres->closeCursor(); if ($getgrpsusr) { if ($getgrpsusr['tnx_users_allowed']) { $tnxusers = explode("|", $getgrpsusr['tnx_users_allowed']); } else { $tnxusers = []; } if ($getgrpsusr['plv_users_allowed']) { $plvusers = explode("|", $getgrpsusr['plv_users_allowed']); } else { $plvusers = []; } if ($getgrpsusr['twl_users_allowed']) { $twlusers = explode("|", $getgrpsusr['twl_users_allowed']); } else { $twlusers = []; } if ($getgrpsusr['flr_users_allowed']) { $flrusers = explode("|", $getgrpsusr['flr_users_allowed']); } else { $flrusers = []; } $allwdusersarr = array_merge($tnxusers, $plvusers, $twlusers, $flrusers); $allwdusersunq = array_filter(array_unique($allwdusersarr)); if ($getgrpsusr['tnx_groups_allowed']) { $tnxgroups = explode("|", $getgrpsusr['tnx_groups_allowed']); } else { $tnxgroups = []; } if ($getgrpsusr['plv_groups_allowed']) { $plvgroups = explode("|", $getgrpsusr['plv_groups_allowed']); } else { $plvgroups = []; } if ($getgrpsusr['twl_groups_allowed']) { $twlgroups = explode("|", $getgrpsusr['twl_groups_allowed']); } else { $twlgroups = []; } if ($getgrpsusr['flr_groups_allowed']) { $flrgroups = explode("|", $getgrpsusr['flr_groups_allowed']); } else { $flrgroups = []; } $allwdgroupsarr = array_merge($tnxgroups, $plvgroups, $twlgroups, $flrgroups); $allwdgroupsunq = array_filter(array_unique($allwdgroupsarr)); } else { $allwdusersunq = []; $allwdgroupsunq = []; } // Get the username for each Display Name of the allowed users $allwdusersfnl = []; foreach ($allwdusersunq as $alwdusrkey => $alwdusrvalue) { $getacdatausrnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdatausrnmres = $getacdatausrnm->execute(['displayname', $alwdusrvalue]); $acdatausrname = $getacdatausrnmres->fetch(); if ($acdatausrname) { $allwdusersfnl[] = $acdatausrname['uid']; } $getacdatausrnmres->closeCursor(); } // Get the users from all the allowed groups $allwdusersgrpmlt = []; foreach ($allwdgroupsunq as $prgrpkey => $prgrpvalue) { // Get all the users that belong to the current group $getusringroup = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringroupres = $getusringroup->execute([$prgrpvalue]); while ($getusrname = $getusringroupres->fetch()) { // Ensure the current user is not an admin if (!in_array($getusrname['uid'], $usersadminsd)) { $allwdusersgrpmlt[] = $getusrname['uid']; } } $getusringroupres->closeCursor(); } $allwdusersgrpfnl = array_unique($allwdusersgrpmlt); $allusr = array_merge($allwdusersfnl, $allwdusersgrpfnl); $allusruniquest = array_unique($allusr); if ($allusruniquest) { array_unshift($allusruniquest, $userId); $allusruniquepn = $allusruniquest; } else { $allusruniquepn = [$userId]; } $allusruniquepnst = $allusruniquepn; $procardatapn = implode(',', array_fill(0, count($allusruniquepn), '?')); array_unshift($allusruniquepn, $phoneNumber, $phoneNumberpr); $allusruniquead = $allusruniquepn; array_unshift($allusruniquepnst, $phoneNumberpr, $phoneNumber); $allusruniqueadst = $allusruniquepnst; } // Get received messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE (`from` = ? OR `to` LIKE ?) AND `user_id` IN (' . $procardatapn . ')'); $getrecmsgsres = $getrecmsgs->execute($allusruniquead); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? AND (`from` = ? OR `to` LIKE ?)'); $getrecmsgsres = $getrecmsgs->execute([$userId, $phoneNumber, $phoneNumberpr]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { // Get the Display Name of the current user $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get the groups to which the current user belongs $getusrgrp = $this->connection->prepare(' SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?'); $getusrgrpres = $getusrgrp->execute([$userId]); $usergrps = []; while ($fetchedgrps = $getusrgrpres->fetch()) { $usergrps[] = $fetchedgrps['gid']; } $getusrgrpres->closeCursor(); // Get the restrictions from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare(' SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestrres = $getrestr->execute(); $restrdata = []; while ($restrfetched = $getrestrres->fetch()) { $restrdata[] = $restrfetched; } $getrestrres->closeCursor(); // Get the phone numbers that the user is allowed/not allowed to use if ($restrdata) { $restrPhoneNmbrs = []; $allowedPhoneNmbrs = []; foreach ($restrdata as $rskey => $rsvalue) { $chck = 0; $restrgrparr = explode("|", $rsvalue['groups']); foreach ($restrgrparr as $rkey => $rvalue) { if ($rvalue) { if (strpos(implode("|", $usergrps), $rvalue) !== false) { $chck++; } } } if (strpos($rsvalue['users'], $cruserdname) !== false) { $chck++; } if ($chck == 0) { $restrPhoneNmbrs[] = $rsvalue['phone_number']; } else { $crphnmbr = explode(": ", $rsvalue['phone_number']); if ($crphnmbr[0] == 'Tx') { $allowedPhoneNmbrs[] = 'Telnyx: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Pl') { $allowedPhoneNmbrs[] = 'Plivo: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Tw') { $allowedPhoneNmbrs[] = 'Twilio: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Fl') { $allowedPhoneNmbrs[] = 'Flowroute: ' . $crphnmbr[1]; } } } $allowedPhoneNmbrscp = $allowedPhoneNmbrs; $procalwdphnmbrs = implode(',', array_fill(0, count($allowedPhoneNmbrs), '?')); array_unshift($allowedPhoneNmbrs, $userId); array_push($allowedPhoneNmbrs, $phoneNumber, $phoneNumberpr); $procalwduid = $allowedPhoneNmbrs; array_unshift($allowedPhoneNmbrscp, $userId); array_push($allowedPhoneNmbrscp, $phoneNumberpr, $phoneNumber); $procalwduidcp = $allowedPhoneNmbrscp; $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE (`user_id` = ? OR `to` IN (' . $procalwdphnmbrs . ')) AND (`from` = ? OR `to` LIKE ?)'); $getrecmsgsres = $getrecmsgs->execute($procalwduid); } else { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? AND (`from` = ? OR `to` LIKE ?)'); $getrecmsgsres = $getrecmsgs->execute([$userId, $phoneNumber, $phoneNumberpr]); } } $recmsgs = []; while ($rcrowsfetch = $getrecmsgsres->fetch()) { $rcrowsfetch['deliveryreceipt'] = ''; $rcrowsfetch['table'] = 'received'; $recmsgs[] = $rcrowsfetch; } $getrecmsgsres->closeCursor(); // Get sent messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE (`from` LIKE ? OR `to` = ?) AND `user_id` IN (' . $procardatapn . ')'); $getsentmsgsres = $getsentmsgs->execute($allusruniqueadst); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? AND (`from` LIKE ? OR `to` = ?)'); $getsentmsgsres = $getsentmsgs->execute([$userId, $phoneNumberpr, $phoneNumber]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { if ($restrdata) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE (`user_id` = ? OR `from` IN (' . $procalwdphnmbrs . ')) AND (`from` LIKE ? OR `to` = ?)'); $getsentmsgsres = $getsentmsgs->execute($procalwduidcp); } else { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? AND (`from` LIKE ? OR `to` = ?)'); $getsentmsgsres = $getsentmsgs->execute([$userId, $phoneNumberpr, $phoneNumber]); } } $sentmsgs = []; while ($rowfetchedsmsg = $getsentmsgsres->fetch()) { $rowfetchedsmsg['table'] = 'sent'; $sentmsgs[] = $rowfetchedsmsg; } $getsentmsgsres->closeCursor(); $groupedpernb = array_merge($recmsgs, $sentmsgs); if ($this->groupManager->isAdmin($userId)) { return $groupedpernb; } else { if ($restrdata) { // Clean the phone numbers from tags $restrPhfin = []; foreach ($restrPhoneNmbrs as $phkey => $phvalue) { $restrpharr = explode(": ", $phvalue); $restrPhfin[] = $restrpharr[1]; } // Assemble the array of message rows that excludes the rows for the restricted phone numbers foreach ($groupedpernb as $gmdkey => $gmdvalue) { if ($gmdvalue['table'] == 'sent') { if (str_contains($gmdvalue['from'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['from']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } else { $frmnmbrarr = explode(": ", $gmdvalue['from']); if (count($frmnmbrarr) == 2) { $nmbtbcmprd = $frmnmbrarr[1]; } else { $nmbtbcmprd = $frmnmbrarr[0]; } if (in_array($nmbtbcmprd, $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } } elseif ($gmdvalue['table'] == 'received') { if (str_contains($gmdvalue['to'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['to']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } else { $tonmbrarr = explode(": ", $gmdvalue['to']); if (count($tonmbrarr) == 2) { $tonmbrtbcmprd = $tonmbrarr[1]; } else { $tonmbrtbcmprd = $tonmbrarr[0]; } if (in_array($tonmbrtbcmprd, $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } } } $groupedpernbprc = array_values($groupedpernb); return $groupedpernbprc; } else { return $groupedpernb; } } } /** * @NoAdminRequired */ public function getgroupedforreply($userId, $phoneNmbrFrom, $phoneNmbrTo) { $phoneNmbrFrompr = "%" . $phoneNmbrFrom; $phoneNmbrTopr = "%" . $phoneNmbrTo; // Get the user's preferences from the settings $getpref = $this->connection->prepare(' SELECT `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getprefres = $getpref->execute([$userId]); $getprefresdata = $getprefres->fetch(); $crsampref = $getprefresdata['show_all_messages']; $getprefres->closeCursor(); // Collect the users with whom the current admin is sharing his API keys and whose messages he will be able to see if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadminsd = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadminsd[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the groups and users that were allowed access to the API keys $getgrps = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getgrpsres = $getgrps->execute([$userId]); $getgrpsusr = $getgrpsres->fetch(); $getgrpsres->closeCursor(); if ($getgrpsusr) { if ($getgrpsusr['tnx_users_allowed']) { $tnxusers = explode("|", $getgrpsusr['tnx_users_allowed']); } else { $tnxusers = []; } if ($getgrpsusr['plv_users_allowed']) { $plvusers = explode("|", $getgrpsusr['plv_users_allowed']); } else { $plvusers = []; } if ($getgrpsusr['twl_users_allowed']) { $twlusers = explode("|", $getgrpsusr['twl_users_allowed']); } else { $twlusers = []; } if ($getgrpsusr['flr_users_allowed']) { $flrusers = explode("|", $getgrpsusr['flr_users_allowed']); } else { $flrusers = []; } $allwdusersarr = array_merge($tnxusers, $plvusers, $twlusers, $flrusers); $allwdusersunq = array_filter(array_unique($allwdusersarr)); if ($getgrpsusr['tnx_groups_allowed']) { $tnxgroups = explode("|", $getgrpsusr['tnx_groups_allowed']); } else { $tnxgroups = []; } if ($getgrpsusr['plv_groups_allowed']) { $plvgroups = explode("|", $getgrpsusr['plv_groups_allowed']); } else { $plvgroups = []; } if ($getgrpsusr['twl_groups_allowed']) { $twlgroups = explode("|", $getgrpsusr['twl_groups_allowed']); } else { $twlgroups = []; } if ($getgrpsusr['flr_groups_allowed']) { $flrgroups = explode("|", $getgrpsusr['flr_groups_allowed']); } else { $flrgroups = []; } $allwdgroupsarr = array_merge($tnxgroups, $plvgroups, $twlgroups, $flrgroups); $allwdgroupsunq = array_filter(array_unique($allwdgroupsarr)); } else { $allwdusersunq = []; $allwdgroupsunq = []; } // Get the username for each Display Name of the allowed users $allwdusersfnl = []; foreach ($allwdusersunq as $alwdusrkey => $alwdusrvalue) { $getacdatausrnm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdatausrnmres = $getacdatausrnm->execute(['displayname', $alwdusrvalue]); $acdatausrname = $getacdatausrnmres->fetch(); if ($acdatausrname) { $allwdusersfnl[] = $acdatausrname['uid']; } $getacdatausrnmres->closeCursor(); } // Get the users from all the allowed groups $allwdusersgrpmlt = []; foreach ($allwdgroupsunq as $prgrpkey => $prgrpvalue) { // Get all the users that belong to the current group $getusringroup = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringroupres = $getusringroup->execute([$prgrpvalue]); while ($getusrname = $getusringroupres->fetch()) { // Ensure the current user is not an admin if (!in_array($getusrname['uid'], $usersadminsd)) { $allwdusersgrpmlt[] = $getusrname['uid']; } } $getusringroupres->closeCursor(); } $allwdusersgrpfnl = array_unique($allwdusersgrpmlt); $allusr = array_merge($allwdusersfnl, $allwdusersgrpfnl); $allusruniquest = array_unique($allusr); if ($allusruniquest) { array_unshift($allusruniquest, $userId); $allusruniquerp = $allusruniquest; } else { $allusruniquerp = [$userId]; } $allusruniquerpst = $allusruniquerp; $procardatarp = implode(',', array_fill(0, count($allusruniquerp), '?')); array_unshift($allusruniquerp, $phoneNmbrFrom, $phoneNmbrTopr, $phoneNmbrTo, $phoneNmbrFrompr); $allusruniqueadrp = $allusruniquerp; array_unshift($allusruniquerpst, $phoneNmbrFrompr, $phoneNmbrTo, $phoneNmbrTopr, $phoneNmbrFrom); $allusruniqueadrpst = $allusruniquerpst; } // Get received messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE ((`from` = ? AND `to` LIKE ?) OR (`from` = ? AND `to` LIKE ?)) AND `user_id` IN (' . $procardatarp . ')'); $getrecmsgsres = $getrecmsgs->execute($allusruniqueadrp); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? AND ((`from` = ? AND `to` LIKE ?) OR (`from` = ? AND `to` LIKE ?))'); $getrecmsgsres = $getrecmsgs->execute([$userId, $phoneNmbrFrom, $phoneNmbrTopr, $phoneNmbrTo, $phoneNmbrFrompr]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { // Get the Display Name of the current user $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get the groups to which the current user belongs $getusrgrp = $this->connection->prepare(' SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `uid` = ?'); $getusrgrpres = $getusrgrp->execute([$userId]); $usergrps = []; while ($fetchedgrps = $getusrgrpres->fetch()) { $usergrps[] = $fetchedgrps['gid']; } $getusrgrpres->closeCursor(); // Get the restrictions from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare(' SELECT `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestrres = $getrestr->execute(); $restrdata = []; while ($restrfetched = $getrestrres->fetch()) { $restrdata[] = $restrfetched; } $getrestrres->closeCursor(); // Get the phone numbers that the user is allowed/not allowed to use if ($restrdata) { $restrPhoneNmbrs = []; $allowedPhoneNmbrs = []; foreach ($restrdata as $rskey => $rsvalue) { $chck = 0; $restrgrparr = explode("|", $rsvalue['groups']); foreach ($restrgrparr as $rkey => $rvalue) { if ($rvalue) { if (strpos(implode("|", $usergrps), $rvalue) !== false) { $chck++; } } } if (strpos($rsvalue['users'], $cruserdname) !== false) { $chck++; } if ($chck == 0) { $restrPhoneNmbrs[] = $rsvalue['phone_number']; } else { $crphnmbr = explode(": ", $rsvalue['phone_number']); if ($crphnmbr[0] == 'Tx') { $allowedPhoneNmbrs[] = 'Telnyx: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Pl') { $allowedPhoneNmbrs[] = 'Plivo: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Tw') { $allowedPhoneNmbrs[] = 'Twilio: ' . $crphnmbr[1]; } elseif ($crphnmbr[0] == 'Fl') { $allowedPhoneNmbrs[] = 'Flowroute: ' . $crphnmbr[1]; } } } $allowedPhoneNmbrscpr = $allowedPhoneNmbrs; $procalwdphnmbrs = implode(',', array_fill(0, count($allowedPhoneNmbrs), '?')); array_unshift($allowedPhoneNmbrs, $userId); array_push($allowedPhoneNmbrs, $phoneNmbrFrom, $phoneNmbrTopr, $phoneNmbrTo, $phoneNmbrFrompr); $procalwduid = $allowedPhoneNmbrs; array_unshift($allowedPhoneNmbrscpr, $userId); array_push($allowedPhoneNmbrscpr, $phoneNmbrFrompr, $phoneNmbrTo, $phoneNmbrTopr, $phoneNmbrFrom); $procalwduidcpr = $allowedPhoneNmbrscpr; $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE (`user_id` = ? OR `to` IN (' . $procalwdphnmbrs . ')) AND ((`from` = ? AND `to` LIKE ?) OR (`from` = ? AND `to` LIKE ?))'); $getrecmsgsres = $getrecmsgs->execute($procalwduid); } else { $getrecmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`, `message`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `user_id` = ? AND ((`from` = ? AND `to` LIKE ?) OR (`from` = ? AND `to` LIKE ?))'); $getrecmsgsres = $getrecmsgs->execute([$userId, $phoneNmbrFrom, $phoneNmbrTopr, $phoneNmbrTo, $phoneNmbrFrompr]); } } $recmsgs = []; while ($rcrowsfetch = $getrecmsgsres->fetch()) { $rcrowsfetch['deliveryreceipt'] = ''; $rcrowsfetch['table'] = 'received'; $recmsgs[] = $rcrowsfetch; } $getrecmsgsres->closeCursor(); // Get sent messages // If the user is an admin and he wants to see his messages and the messages of all the users with whom he shares his API keys if ($crsampref == 1 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE ((`from` LIKE ? AND `to` = ?) OR (`from` LIKE ? AND `to` = ?)) AND `user_id` IN (' . $procardatarp . ')'); $getsentmsgsres = $getsentmsgs->execute($allusruniqueadrpst); // If the user is an admin and he wants to see only his messages } elseif ($crsampref == 0 && $this->groupManager->isAdmin($userId)) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? AND ((`from` LIKE ? AND `to` = ?) OR (`from` LIKE ? AND `to` = ?))'); $getsentmsgsres = $getsentmsgs->execute([$userId, $phoneNmbrFrompr, $phoneNmbrTo, $phoneNmbrTopr, $phoneNmbrFrom]); // If the user is not an admin } elseif (!$this->groupManager->isAdmin($userId)) { if ($restrdata) { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE (`user_id` = ? OR `from` IN (' . $procalwdphnmbrs . ')) AND ((`from` LIKE ? AND `to` = ?) OR (`from` LIKE ? AND `to` = ?))'); $getsentmsgsres = $getsentmsgs->execute($procalwduidcpr); } else { $getsentmsgs = $this->connection->prepare(' SELECT `id`, `user_id`, `date`, `from`, `to`,`message`, `author_displayname`, `deliveryreceipt` FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = ? AND ((`from` LIKE ? AND `to` = ?) OR (`from` LIKE ? AND `to` = ?))'); $getsentmsgsres = $getsentmsgs->execute([$userId, $phoneNmbrFrompr, $phoneNmbrTo, $phoneNmbrTopr, $phoneNmbrFrom]); } } $sentmsgs = []; while ($rowfetchedsmsg = $getsentmsgsres->fetch()) { $rowfetchedsmsg['table'] = 'sent'; $sentmsgs[] = $rowfetchedsmsg; } $getsentmsgsres->closeCursor(); $groupedpernb = array_merge($recmsgs, $sentmsgs); if ($this->groupManager->isAdmin($userId)) { return $groupedpernb; } else { if ($restrdata) { // Clean the phone numbers from tags $restrPhfin = []; foreach ($restrPhoneNmbrs as $phkey => $phvalue) { $restrpharr = explode(": ", $phvalue); $restrPhfin[] = $restrpharr[1]; } // Assemble the array of message rows that excludes the rows for the restricted phone numbers foreach ($groupedpernb as $gmdkey => $gmdvalue) { if ($gmdvalue['table'] == 'sent') { if (str_contains($gmdvalue['from'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['from']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } else { $frmnmbrarr = explode(": ", $gmdvalue['from']); if (count($frmnmbrarr) == 2) { $nmbtbcmprd = $frmnmbrarr[1]; } else { $nmbtbcmprd = $frmnmbrarr[0]; } if (in_array($nmbtbcmprd, $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } } elseif ($gmdvalue['table'] == 'received') { if (str_contains($gmdvalue['to'], "+")) { $fromnmbrarr = explode("+", $gmdvalue['to']); if (in_array("+" . $fromnmbrarr[1], $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } else { $tonmbrarr = explode(": ", $gmdvalue['to']); if (count($tonmbrarr) == 2) { $tonmbrtbcmprd = $tonmbrarr[1]; } else { $tonmbrtbcmprd = $tonmbrarr[0]; } if (in_array($tonmbrtbcmprd, $restrPhfin)) { unset($groupedpernb[$gmdkey]); } } } } $groupedperconv = array_values($groupedpernb); return $groupedperconv; } else { return $groupedpernb; } } } /** * @NoAdminRequired */ public function savedisplayname($userId, $authorDisplayname, $from) { if ($this->groupManager->isAdmin($userId)) { $updatedispnm = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_received` SET `author_displayname` = ? WHERE `from` = ?'); $updatedispnmres = $updatedispnm->execute([$authorDisplayname, $from]); if ($updatedispnmres) { return $respupdname = "The new Display Name has been saved. If on the Settings page, the option 'Add the display name of the message author, before each message' is checked, when you refresh the page you will see the new Display Name before the messages."; } else { return $respupdname = "Error while trying to save the new Display Name to the database."; } $updatedispnmres->closeCursor(); } else { return $respupdname = "Only admins can save Display Names for phone numbers that are not associated with Nextcloud users."; } } /** * @NoAdminRequired */ public function getmessagesperpage($userId) { $sqlmpp = $this->connection->prepare(' SELECT `user_id`, `messagesperpage` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $result = $sqlmpp->execute([$userId]); $mesppdata = $result->fetch(); $result->closeCursor(); if ($mesppdata) { $mesperpagedb = $mesppdata['messagesperpage']; return $mesperpagedb; } } /** * @NoAdminRequired */ public function getsettings($userId) { $getsettings = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_url_rec`, `telapi_url`, `nexapi_url_rec`, `nexapi_url`, `twilapi_url_rec`, `twilapi_url`, `flowapi_url_rec`, `flowapi_url`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultsettings = $getsettings->execute([$userId]); $settingsfromdb = $resultsettings->fetch(); $resultsettings->closeCursor(); if ($settingsfromdb) { if ($this->groupManager->isAdmin($userId)) { $adminreguser = 'admin'; } else { $adminreguser = 'reguser'; } $settingsfromdb['adminornot'] = $adminreguser; return $settingsfromdb; } } public function updatenumberrestrictions($userId, $savedByDsplname, $phoneNumber, $groups, $users) { if ($this->groupManager->isAdmin($userId)) { $groupsproc = implode("|", $groups); $usersproc = implode("|", $users); // Get the restrictions for the current number from the 'sms_relent_restrict' table $getrestr = $this->connection->prepare('SELECT `user_id`, `saved_by_dsplname`, `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict` WHERE `phone_number` = ?'); $getrestrresult = $getrestr->execute([$phoneNumber]); $crntrestr = $getrestrresult->fetch(); $getrestrresult->closeCursor(); if ($getrestrresult && !$crntrestr) { $insertphrestr = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_restrict` (`user_id`, `saved_by_dsplname`, `phone_number`, `groups`, `users`) VALUES (?, ?, ?, ?, ?)'); if ($insertphrestr->execute([$userId, $savedByDsplname, $phoneNumber, $groupsproc, $usersproc])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; } } elseif ($getrestrresult && $crntrestr) { $updatephrestr = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_restrict` SET `user_id` = ?, `saved_by_dsplname` = ?, `groups` = ?, `users` = ? WHERE `phone_number` = ?'); if ($admupdatephonerestr = $updatephrestr->execute([$userId, $savedByDsplname, $groupsproc, $usersproc, $phoneNumber])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; } $admupdatephonerestr->closeCursor(); } return $messagetosend; } } private function updateusercredentials($userId, $usersarr, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret) { $msgtosend = 'success'; foreach ($usersarr as $usrkey => $usrvalue) { $getusrset = $this->connection->prepare('SELECT `user_id` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getusrsetres = $getusrset->execute([$usrvalue]); $getcrunmdata = $getusrsetres->fetch(); $getusrsetres->closeCursor(); if ($getcrunmdata) { if ($provider == "tnx") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `telapi_key` = ?, `tel_pub_key` = ?, `messaging_profile_id` = ?, `tel_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$telapiKey, $telpubKey, $telmsgprofid, $telsendername, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "plv") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `nexapi_key` = ?, `nexapi_secret` = ?, `nex_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$plivoapikey, $plivoapisecret, $plivosendernm, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "twl") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `twilapi_key` = ?, `twilapi_secret` = ?, `twil_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$twilapikey, $twilapisecret, $twilsendernm, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "flr") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `flowapi_key` = ?, `flowapi_secret` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$flowapikey, $flowapisecret, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } } else { $emptfld = ""; if ($provider == "tnx") { $upusrset = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `tel_sender_name`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); if ($upusrsetres = $upusrset->execute([$usrvalue, $telapiKey, $telpubKey, $emptfld, $emptfld, $telmsgprofid, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $telsendername])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "plv") { $upusrset = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `nex_sender_name`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); if ($upusrsetres = $upusrset->execute([$usrvalue, $telapiKey, $telpubKey, $emptfld, $emptfld, $telmsgprofid, $plivoapikey, $plivoapisecret, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $plivosendernm])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "twl") { $upusrset = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `twil_sender_name`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); if ($upusrsetres = $upusrset->execute([$usrvalue, $telapiKey, $telpubKey, $emptfld, $emptfld, $telmsgprofid, $plivoapikey, $plivoapisecret, $emptfld, $emptfld, $twilapikey, $twilapisecret, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $emptfld, $twilsendernm])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "flr") { $upusrset = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); if ($upusrsetres = $upusrset->execute([$usrvalue, $telapiKey, $telpubKey, $emptfld, $emptfld, $telmsgprofid, $plivoapikey, $plivoapisecret, $emptfld, $emptfld, $twilapikey, $twilapisecret, $emptfld, $emptfld, $flowapikey, $flowapisecret, $emptfld, $emptfld])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } } } return $msgtosend; } private function removeusercredentials($userId, $usersarr, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret) { $msgtosend = 'success'; foreach ($usersarr as $usrkey => $usrvalue) { $emptyfld = ""; if ($provider == "tnx") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `telapi_key` = ?, `tel_pub_key` = ?, `messaging_profile_id` = ?, `tel_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$emptyfld, $emptyfld, $emptyfld, $emptyfld, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "plv") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `nexapi_key` = ?, `nexapi_secret` = ?, `nex_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$emptyfld, $emptyfld, $emptyfld, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "twl") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `twilapi_key` = ?, `twilapi_secret` = ?, `twil_sender_name` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$emptyfld, $emptyfld, $emptyfld, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } elseif ($provider == "flr") { $upusrset = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `flowapi_key` = ?, `flowapi_secret` = ? WHERE `user_id` = ?'); if ($upusrsetres = $upusrset->execute([$emptyfld, $emptyfld, $usrvalue])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upusrsetres->closeCursor(); } } return $msgtosend; } public function updatekeysallowedusers($userId, $groups, $users, $provider) { if ($this->groupManager->isAdmin($userId)) { $msgtosend = 'success'; // Get the users that belong to the 'admin' group $getadmn = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnres = $getadmn->execute(['admin']); $usersadmin = []; while ($getadmnusrs = $getadmnres->fetch()) { $usersadmin[] = $getadmnusrs['uid']; } $getadmnres->closeCursor(); // Get the API keys and alphanumeric sender IDs for the current admin, from the 'sms_relent_settings' table $getadmset = $this->connection->prepare('SELECT `user_id`, `telapi_key`, `tel_pub_key`, `messaging_profile_id`, `tel_sender_name`, `nexapi_key`, `nexapi_secret`, `nex_sender_name`, `twilapi_key`, `twilapi_secret`, `twil_sender_name`, `flowapi_key`, `flowapi_secret` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $getadmsetres = $getadmset->execute([$userId]); $getcradmdata = $getadmsetres->fetch(); $telapiKey = $getcradmdata['telapi_key']; $telpubKey = $getcradmdata['tel_pub_key']; $telmsgprofid = $getcradmdata['messaging_profile_id']; $telsendername = $getcradmdata['tel_sender_name']; $plivoapikey = $getcradmdata['nexapi_key']; $plivoapisecret = $getcradmdata['nexapi_secret']; $plivosendernm = $getcradmdata['nex_sender_name']; $twilapikey = $getcradmdata['twilapi_key']; $twilapisecret = $getcradmdata['twilapi_secret']; $twilsendernm = $getcradmdata['twil_sender_name']; $flowapikey = $getcradmdata['flowapi_key']; $flowapisecret = $getcradmdata['flowapi_secret']; $getadmsetres->closeCursor(); if ($getcradmdata) { if ($provider == "tnx") { $getalwd = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed` FROM `*PREFIX*sms_relent_subac`'); $getalwdres = $getalwd->execute(); $upchck = 0; $seldataarr = []; $groupsPerProvider = ''; $usersPerProvider = ''; while ($crntrestr = $getalwdres->fetch()) { if ($crntrestr['user_id'] != $userId) { $seldataarr[] = ['userid' => $crntrestr['user_id'], 'groupsallowed' => $crntrestr['tnx_groups_allowed'], 'usersallowed' => $crntrestr['tnx_users_allowed']]; } else { $upchck++; $groupsPerProvider = $crntrestr['tnx_groups_allowed']; $usersPerProvider = $crntrestr['tnx_users_allowed']; } } $getalwdres->closeCursor(); } elseif ($provider == "plv") { $getalwd = $this->connection->prepare('SELECT `user_id`, `plv_groups_allowed`, `plv_users_allowed` FROM `*PREFIX*sms_relent_subac`'); $getalwdres = $getalwd->execute(); $upchck = 0; $seldataarr = []; $groupsPerProvider = ''; $usersPerProvider = ''; while ($crntrestr = $getalwdres->fetch()) { if ($crntrestr['user_id'] != $userId) { $seldataarr[] = ['userid' => $crntrestr['user_id'], 'groupsallowed' => $crntrestr['plv_groups_allowed'], 'usersallowed' => $crntrestr['plv_users_allowed']]; } else { $upchck++; $groupsPerProvider = $crntrestr['plv_groups_allowed']; $usersPerProvider = $crntrestr['plv_users_allowed']; } } $getalwdres->closeCursor(); } elseif ($provider == "twl") { $getalwd = $this->connection->prepare('SELECT `user_id`, `twl_groups_allowed`, `twl_users_allowed` FROM `*PREFIX*sms_relent_subac`'); $getalwdres = $getalwd->execute(); $upchck = 0; $seldataarr = []; $groupsPerProvider = ''; $usersPerProvider = ''; while ($crntrestr = $getalwdres->fetch()) { if ($crntrestr['user_id'] != $userId) { $seldataarr[] = ['userid' => $crntrestr['user_id'], 'groupsallowed' => $crntrestr['twl_groups_allowed'], 'usersallowed' => $crntrestr['twl_users_allowed']]; } else { $upchck++; $groupsPerProvider = $crntrestr['twl_groups_allowed']; $usersPerProvider = $crntrestr['twl_users_allowed']; } } $getalwdres->closeCursor(); } elseif ($provider == "flr") { $getalwd = $this->connection->prepare('SELECT `user_id`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac`'); $getalwdres = $getalwd->execute(); $upchck = 0; $seldataarr = []; $groupsPerProvider = ''; $usersPerProvider = ''; while ($crntrestr = $getalwdres->fetch()) { if ($crntrestr['user_id'] != $userId) { $seldataarr[] = ['userid' => $crntrestr['user_id'], 'groupsallowed' => $crntrestr['flr_groups_allowed'], 'usersallowed' => $crntrestr['flr_users_allowed']]; } else { $upchck++; $groupsPerProvider = $crntrestr['flr_groups_allowed']; $usersPerProvider = $crntrestr['flr_users_allowed']; } } $getalwdres->closeCursor(); } if ($seldataarr) { // Check if any of the current users are among the already saved ones (for the same provider) $usrchck = 0; $usrmsgarr = []; foreach ($users as $ukey => $uvalue) { if ($uvalue != '') { for ($j = 0; $j < count($seldataarr); $j++) { if (str_contains($seldataarr[$j]['usersallowed'], $uvalue)) { $usrchck++; $usrmsgarr[] = "The admin " . $seldataarr[$j]['userid'] . " has already allowed the user " . $uvalue . " to access his API keys for this provider."; } } } } // Check if any of the current groups are among the already saved ones (for the same provider) $grchck = 0; $grmsgarr = []; foreach ($groups as $gkey => $gvalue) { if ($gvalue != '') { for ($k = 0; $k < count($seldataarr); $k++) { if (str_contains($seldataarr[$k]['groupsallowed'], $gvalue)) { $grchck++; $grmsgarr[] = "The admin " . $seldataarr[$k]['userid'] . " has already allowed the group " . $gvalue . " to access his API keys for this provider."; } } } } if ($usrchck == 0 && $grchck == 0) { // Remove the previously saved API keys for each user in the specified groups, for the current provider if ($groupsPerProvider != '') { $groupsPerProvarr = explode("|", $groupsPerProvider); foreach ($groupsPerProvarr as $prgrkey => $prgrvalue) { if ($prgrvalue != "admin" && $prgrvalue != '') { // Get all the users that belong to the group $getusringrp = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringrpres = $getusringrp->execute([$prgrvalue]); $usersingroup = []; while ($getusrnm = $getusringrpres->fetch()) { if ($getusrnm['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($getusrnm['uid'], $usersadmin)) { $usersingroup[] = $getusrnm['uid']; } } } $getusringrpres->closeCursor(); if ($usersingroup) { $msgtosend = $this->removeusercredentials($userId, $usersingroup, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } } } // Remove the previously saved API keys for each user, for the current provider if ($usersPerProvider != '') { $usersPerProvarr = explode("|", $usersPerProvider); if ($usersPerProvarr) { $ctusernamearrpr = []; foreach ($usersPerProvarr as $usrKeypr => $usrValuepr) { // Get the username for this Display Name $getacdataunmpr = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdataunmprres = $getacdataunmpr->execute(['displayname', $usrValuepr]); $acdatausrnamepr = $getacdataunmprres->fetch(); if ($acdatausrnamepr['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($acdatausrnamepr['uid'], $usersadmin)) { $ctusernamearrpr[] = $acdatausrnamepr['uid']; } } $getacdataunmprres->closeCursor(); } $msgtosend = $this->removeusercredentials($userId, $ctusernamearrpr, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } // Insert the provider's API keys for the allowed users if ($users) { $ctusernamearruid = []; $ctusernamearr = []; foreach ($users as $usrKey => $usrValue) { if ($usrValue != '') { // Get the username for this Display Name $getacdataunm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdataunmres = $getacdataunm->execute(['displayname', $usrValue]); $acdatausrname = $getacdataunmres->fetch(); if ($acdatausrname['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($acdatausrname['uid'], $usersadmin)) { $ctusernamearruid[] = $acdatausrname['uid']; $ctusernamearr[] = $usrValue; } } $getacdataunmres->closeCursor(); } } // Insert/update the allowed users in the 'sms_relent_subac' table $usersalwdrs = implode("|", $ctusernamearr); if ($upchck == 0) { if ($provider == "tnx") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `tnx_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "plv") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `plv_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "twl") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `twl_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "flr") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `flr_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } } else { if ($provider == "tnx") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `tnx_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `plv_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `twl_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `flr_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } } $datalwdres->closeCursor(); // Insert/update the credentials in the 'sms_relent_settings' table, for each allowed user $msgtosend = $this->updateusercredentials($userId, $ctusernamearruid, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } // Insert the provider's API keys for the allowed groups if ($groups) { $allwdgrps = []; foreach ($groups as $groupkey => $groupvalue) { if ($groupvalue != "admin" && $groupvalue != '') { $allwdgrps[] = $groupvalue; // Get all the users that belong to the group $getacdusr = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getacdusrres = $getacdusr->execute([$groupvalue]); $usersingrp = []; while ($getacdusrnm = $getacdusrres->fetch()) { if ($getacdusrnm['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($getacdusrnm['uid'], $usersadmin)) { $usersingrp[] = $getacdusrnm['uid']; } } } $getacdusrres->closeCursor(); // Insert the provider's API keys for each user of the allowed groups if ($usersingrp) { $msgtosend = $this->updateusercredentials($userId, $usersingrp, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } // Insert/update the allowed groups in the 'sms_relent_subac' table $groupsalwdrs = implode("|", $allwdgrps); if ($upchck == 0) { if ($provider == "tnx") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `tnx_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "plv") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `plv_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "twl") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `twl_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "flr") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `flr_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } } else { if ($provider == "tnx") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `tnx_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `plv_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `twl_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `flr_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } } $datalwdres->closeCursor(); } } } else { if ($grmsgarr) { $grppart = implode(" ", $grmsgarr) . " A group cannot be allowed access to 2 different sets of API keys for the same SMS provider."; } else { $grppart = ''; } if ($usrmsgarr) { $usrpart = implode(" ", $usrmsgarr) . " A user cannot be allowed access to 2 different sets of API keys for the same SMS provider."; } else { $usrpart = ''; } $msgtosend = $grppart . $usrpart; } } else { if ($upchck == 0) { // Insert the provider's API keys for the allowed users if ($users) { $ctusernamearruid = []; $ctusernamearr = []; foreach ($users as $usrKey => $usrValue) { if ($usrValue != '') { // Get the username for this Display Name $getacdataunm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdataunmres = $getacdataunm->execute(['displayname', $usrValue]); $acdatausrname = $getacdataunmres->fetch(); if ($acdatausrname['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($acdatausrname['uid'], $usersadmin)) { $ctusernamearruid[] = $acdatausrname['uid']; $ctusernamearr[] = $usrValue; } } $getacdataunmres->closeCursor(); } } // Insert the allowed users into the 'sms_relent_subac' table $usersalwdrs = implode("|", $ctusernamearr); if ($provider == "tnx") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `tnx_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "plv") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `plv_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "twl") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `twl_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } elseif ($provider == "flr") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `flr_users_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $usersalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } $upchck++; } $datalwdres->closeCursor(); // Insert/update the credentials in the 'sms_relent_settings' table, for each allowed user $msgtosend = $this->updateusercredentials($userId, $ctusernamearruid, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } // Insert the provider's API keys for the allowed groups if ($groups) { $allwdgrps = []; foreach ($groups as $groupkey => $groupvalue) { if ($groupvalue != "admin" && $groupvalue != '') { $allwdgrps[] = $groupvalue; // Get all the users that belong to the group $getacdusr = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getacdusrres = $getacdusr->execute([$groupvalue]); $usersingrp = []; while ($getacdusrnm = $getacdusrres->fetch()) { if ($getacdusrnm['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($getacdusrnm['uid'], $usersadmin)) { $usersingrp[] = $getacdusrnm['uid']; } } } $getacdusrres->closeCursor(); // Insert the provider's API keys for each user of the allowed groups if ($usersingrp) { $msgtosend = $this->updateusercredentials($userId, $usersingrp, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } // Insert the allowed groups into the 'sms_relent_subac' table $groupsalwdrs = implode("|", $allwdgrps); if ($upchck == 0) { if ($provider == "tnx") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `tnx_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `plv_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `twl_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $insertalwd = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_subac` (`user_id`, `flr_groups_allowed`) VALUES (?, ?)'); if ($datalwdres = $insertalwd->execute([$userId, $groupsalwdrs])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } } else { if ($provider == "tnx") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `tnx_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `plv_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `twl_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `flr_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } } $datalwdres->closeCursor(); } } } else { // Remove the previously saved API keys for each user in the specified groups, for the current provider if ($groupsPerProvider != '') { $groupsPerProvarr = explode("|", $groupsPerProvider); foreach ($groupsPerProvarr as $prgrkey => $prgrvalue) { if ($prgrvalue != "admin" && $prgrvalue != '') { // Get all the users that belong to the group $getusringrp = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getusringrpres = $getusringrp->execute([$prgrvalue]); $usersingroup = []; while ($getusrnm = $getusringrpres->fetch()) { if ($getusrnm['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($getusrnm['uid'], $usersadmin)) { $usersingroup[] = $getusrnm['uid']; } } } $getusringrpres->closeCursor(); if ($usersingroup) { $msgtosend = $this->removeusercredentials($userId, $usersingroup, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } } } // Remove the previously saved API keys for each user, for the current provider if ($usersPerProvider != '') { $usersPerProvarr = explode("|", $usersPerProvider); if ($usersPerProvarr) { $ctusernamearrpr = []; foreach ($usersPerProvarr as $usrKeypr => $usrValuepr) { // Get the username for this Display Name $getacdataunmpr = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdataunmprres = $getacdataunmpr->execute(['displayname', $usrValuepr]); $acdatausrnamepr = $getacdataunmprres->fetch(); if ($acdatausrnamepr['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($acdatausrnamepr['uid'], $usersadmin)) { $ctusernamearrpr[] = $acdatausrnamepr['uid']; } } $getacdataunmprres->closeCursor(); } $msgtosend = $this->removeusercredentials($userId, $ctusernamearrpr, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } // Insert the provider's API keys for the allowed users if ($users) { $ctusernamearruid = []; $ctusernamearr = []; foreach ($users as $usrKey => $usrValue) { if ($usrValue != '') { // Get the username for this Display Name $getacdataunm = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?'); $getacdataunmres = $getacdataunm->execute(['displayname', $usrValue]); $acdatausrname = $getacdataunmres->fetch(); if ($acdatausrname['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($acdatausrname['uid'], $usersadmin)) { $ctusernamearruid[] = $acdatausrname['uid']; $ctusernamearr[] = $usrValue; } } $getacdataunmres->closeCursor(); } } // Update the allowed users in the 'sms_relent_subac' table $usersalwdrs = implode("|", $ctusernamearr); if ($provider == "tnx") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `tnx_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `plv_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `twl_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `flr_users_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$usersalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } $datalwdres->closeCursor(); // Insert/update the credentials in the 'sms_relent_settings' table, for each allowed user $msgtosend = $this->updateusercredentials($userId, $ctusernamearruid, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } // Insert the provider's API keys for the allowed groups if ($groups) { $allwdgrps = []; foreach ($groups as $groupkey => $groupvalue) { if ($groupvalue != "admin" && $groupvalue != '') { $allwdgrps[] = $groupvalue; // Get all the users that belong to the group $getacdusr = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getacdusrres = $getacdusr->execute([$groupvalue]); $usersingrp = []; while ($getacdusrnm = $getacdusrres->fetch()) { if ($getacdusrnm['uid'] != $userId) { // Ensure the current user is not an admin if (!in_array($getacdusrnm['uid'], $usersadmin)) { $usersingrp[] = $getacdusrnm['uid']; } } } $getacdusrres->closeCursor(); // Insert the provider's API keys for each user of the allowed groups if ($usersingrp) { $msgtosend = $this->updateusercredentials($userId, $usersingrp, $provider, $telapiKey, $telpubKey, $telmsgprofid, $telsendername, $plivoapikey, $plivoapisecret, $plivosendernm, $twilapikey, $twilapisecret, $twilsendernm, $flowapikey, $flowapisecret); } } // Update the allowed groups in the 'sms_relent_subac' table $groupsalwdrs = implode("|", $allwdgrps); if ($provider == "tnx") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `tnx_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "plv") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `plv_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "twl") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `twl_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } elseif ($provider == "flr") { $updatealwd = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_subac` SET `flr_groups_allowed` = ? WHERE `user_id` = ?'); if ($datalwdres = $updatealwd->execute([$groupsalwdrs, $userId])) { $msgtosend = 'success'; } else { $msgtosend = 'failure'; } } $datalwdres->closeCursor(); } } } } } else { $msgtosend = "You have to save your credentials first, by clicking the 'Save' button at the bottom of this page, and then share your API keys with other users."; } return $msgtosend; } } public function removenumberrestrictions($userId, $phoneNumber) { if ($this->groupManager->isAdmin($userId)) { // Remove the restrictions for the given phone number $delrstr = $this->connection->prepare(' DELETE FROM `*PREFIX*sms_relent_restrict` WHERE `phone_number` = ?'); if ($delrstrres = $delrstr->execute([$phoneNumber])) { $delresult = "success"; } else { $delresult = "failure"; } $delrstrres->closeCursor(); $updateind = $this->connection->prepare(' SET @resetrec = 0; UPDATE `*PREFIX*sms_relent_restrict` SET `id` = @resetrec := @resetrec + 1; ALTER TABLE `*PREFIX*sms_relent_restrict` auto_increment=1;'); $updateindres = $updateind->execute(); $updateindres->closeCursor(); return $delresult; } } /** * @NoAdminRequired */ public function updateautoreplies($userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText) { // Get the auto-reply for the current number from the 'sms_relent_autorply' table $getarpl = $this->connection->prepare('SELECT `user_id`, `saved_by_dsplname`, `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text` FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?'); $getarplresult = $getarpl->execute([$phoneNumber]); $crntarpl = $getarplresult->fetch(); $getarplresult->closeCursor(); if ($getarplresult && !$crntarpl) { $insertpharpl = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_autorply` (`user_id`, `saved_by_dsplname`, `phone_number`, `days_of_week`, `daily_start`, `daily_end`, `vacation_start`, `vacation_end`, `message_text`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'); if ($insertpharpl->execute([$userId, $savedByDsplname, $phoneNumber, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; } } elseif ($getarplresult && $crntarpl) { if ($this->groupManager->isAdmin($userId)) { $updatepharpl = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_autorply` SET `user_id` = ?, `saved_by_dsplname` = ?, `days_of_week` = ?, `daily_start` = ?, `daily_end` = ?, `vacation_start` = ?, `vacation_end` = ?, `message_text` = ? WHERE `phone_number` = ?'); if ($updatephnmbrarpl = $updatepharpl->execute([$userId, $savedByDsplname, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText, $phoneNumber])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; } $updatephnmbrarpl->closeCursor(); } else { // Check if the current user is the author of the existing version of the auto-reply if ($userId == $crntarpl['user_id']) { $updatepharpl = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_autorply` SET `user_id` = ?, `saved_by_dsplname` = ?, `days_of_week` = ?, `daily_start` = ?, `daily_end` = ?, `vacation_start` = ?, `vacation_end` = ?, `message_text` = ? WHERE `phone_number` = ?'); if ($updatephnmbrarpl = $updatepharpl->execute([$userId, $savedByDsplname, $daysOfWeek, $dailyStart, $dailyEnd, $vacationStart, $vacationEnd, $messageText, $phoneNumber])) { $messagetosend = 'success'; } else { $messagetosend = 'failure'; } $updatephnmbrarpl->closeCursor(); } else { $messagetosend = 'not allowed'; } } } return $messagetosend; } /** * @NoAdminRequired */ public function removeautoreplies($userId, $phoneNumber) { if ($this->groupManager->isAdmin($userId)) { // Remove the auto-reply for the given phone number $delarpl = $this->connection->prepare(' DELETE FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?'); if ($delarplres = $delarpl->execute([$phoneNumber])) { $delarplresult = "success"; } else { $delarplresult = "failure"; } $delarplres->closeCursor(); $updateindarpl = $this->connection->prepare(' SET @resetarpl = 0; UPDATE `*PREFIX*sms_relent_autorply` SET `id` = @resetarpl := @resetarpl + 1; ALTER TABLE `*PREFIX*sms_relent_autorply` auto_increment=1;'); $updateindarplres = $updateindarpl->execute(); $updateindarplres->closeCursor(); return $delarplresult; } else { // Get the author of the auto-reply for the given phone number $getarplusr = $this->connection->prepare('SELECT `user_id`, `phone_number` FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?'); $getarplusrres = $getarplusr->execute([$phoneNumber]); $crntarpldata = $getarplusrres->fetch(); $crntarpluser = $crntarpldata['user_id']; $getarplusrres->closeCursor(); // If the author of the auto-reply is the current user, allow the removal if ($crntarpluser == $userId) { // Remove the auto-reply for the given phone number $delarpl = $this->connection->prepare(' DELETE FROM `*PREFIX*sms_relent_autorply` WHERE `phone_number` = ?'); if ($delarplres = $delarpl->execute([$phoneNumber])) { $delarplresult = "success"; } else { $delarplresult = "failure"; } $delarplres->closeCursor(); $updateindarpl = $this->connection->prepare(' SET @resetarpl = 0; UPDATE `*PREFIX*sms_relent_autorply` SET `id` = @resetarpl := @resetarpl + 1; ALTER TABLE `*PREFIX*sms_relent_autorply` auto_increment=1;'); $updateindarplres = $updateindarpl->execute(); $updateindarplres->closeCursor(); return $delarplresult; } else { return $delarplresult = 'not allowed'; } } } public function getadminsettings($userId) { if ($this->groupManager->isAdmin($userId)) { $getsettings = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `tel_sender_name`, `nex_sender_name`, `twil_sender_name`, `flow_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultsettings = $getsettings->execute([$userId]); $settingsadm = $resultsettings->fetch(); $resultsettings->closeCursor(); if ($settingsadm) { if ($settingsadm['telapi_key'] != '') { // Send a placeholder to the browser, instead of the real API key $settingsadm['telapi_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['tel_pub_key'] != '') { $settingsadm['tel_pub_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['messaging_profile_id'] != '') { $settingsadm['messaging_profile_id'] = "%20%20%20%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['nexapi_key'] != '') { $settingsadm['nexapi_key'] = "%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['nexapi_secret'] != '') { $settingsadm['nexapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['twilapi_key'] != '') { $settingsadm['twilapi_key'] = "%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['twilapi_secret'] != '') { $settingsadm['twilapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['flowapi_key'] != '') { $settingsadm['flowapi_key'] = "%20%20%20%20%20%20%20%20%20"; } if ($settingsadm['flowapi_secret'] != '') { $settingsadm['flowapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"; } // Get the Display Name of the current admin $getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?'); $getacdatadnres = $getacdatadn->execute([$userId, 'displayname']); $acdatausrdnadm = $getacdatadnres->fetch(); $cruserdname = $acdatausrdnadm['value']; $getacdatadnres->closeCursor(); // Get all the restrictions on phone numbers $getrestr = $this->connection->prepare('SELECT `saved_by_dsplname`, `phone_number`, `groups`, `users` FROM `*PREFIX*sms_relent_restrict`'); $getrestres = $getrestr->execute(); $restrictedArr = []; while ($restrfetched = $getrestres->fetch()) { $restrictedArr[] = $restrfetched; } $getrestres->closeCursor(); if ($restrictedArr) { $restrictedUsers = $restrictedArr; } else { $restrictedUsers = ''; } // Get the name of all the groups $getgroups = $this->connection->prepare('SELECT `gid`, `displayname` FROM `*PREFIX*groups`'); $getgroupsres = $getgroups->execute(); $groupsArr = []; $allgroupswadmarr = []; while ($groupsfetched = $getgroupsres->fetch()) { $groupsArr[] = $groupsfetched['gid']; if ($groupsfetched['gid'] != 'admin') { $allgroupswadmarr[] = $groupsfetched['gid']; } } $getgroupsres->closeCursor(); if ($groupsArr) { $allgroups = $groupsArr; } else { $allgroups = ''; } if ($allgroupswadmarr) { $allgroupswadm = $allgroupswadmarr; } else { $allgroupswadm = ''; } // Get the users that belong to the 'admin' group $getadmnsc = $this->connection->prepare('SELECT `gid`, `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?'); $getadmnscres = $getadmnsc->execute(['admin']); $usersadminsc = []; while ($getadmnusrsc = $getadmnscres->fetch()) { $usersadminsc[] = $getadmnusrsc['uid']; } $getadmnscres->closeCursor(); // Get the display name of all the users $getusers = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ?'); $getusersres = $getusers->execute(['displayname']); $usersArr = []; $alluserswadmarr = []; while ($usersfetched = $getusersres->fetch()) { $usersArr[] = $usersfetched['value']; if (!in_array($usersfetched['uid'], $usersadminsc)) { $alluserswadmarr[] = $usersfetched['value']; } } $getusersres->closeCursor(); if ($usersArr) { $allusers = $usersArr; } else { $allusers = ''; } if ($alluserswadmarr) { $alluserswadm = $alluserswadmarr; } else { $alluserswadm = ''; } // Get the groups and users that are allowed to use the API Keys, for each provider $getalwdall = $this->connection->prepare('SELECT `user_id`, `tnx_groups_allowed`, `tnx_users_allowed`, `plv_groups_allowed`, `plv_users_allowed`, `twl_groups_allowed`, `twl_users_allowed`, `flr_groups_allowed`, `flr_users_allowed` FROM `*PREFIX*sms_relent_subac` WHERE `user_id` = ?'); $getalwdallres = $getalwdall->execute([$userId]); $crtdtrow = $getalwdallres->fetch(); if ($crtdtrow) { $allowedgrps = ['tnx_groups_allowed' => $crtdtrow['tnx_groups_allowed'], 'tnx_users_allowed' => $crtdtrow['tnx_users_allowed'], 'plv_groups_allowed' => $crtdtrow['plv_groups_allowed'], 'plv_users_allowed' => $crtdtrow['plv_users_allowed'], 'twl_groups_allowed' => $crtdtrow['twl_groups_allowed'], 'twl_users_allowed' => $crtdtrow['twl_users_allowed'], 'flr_groups_allowed' => $crtdtrow['flr_groups_allowed'], 'flr_users_allowed' => $crtdtrow['flr_users_allowed']]; $getalwdallres->closeCursor(); } else { $allowedgrps = []; } $settingsadm['admdisplayname'] = $cruserdname; $settingsadm['restrictions'] = $restrictedUsers; $settingsadm['allgroups'] = $allgroups; $settingsadm['allusers'] = $allusers; $settingsadm['allgroupswadm'] = $allgroupswadm; $settingsadm['alluserswadm'] = $alluserswadm; $settingsadm['allowedkeysuse'] = $allowedgrps; return $settingsadm; } } } /** * @NoAdminRequired * */ public function updatesettings($userId, $telapiUrlRec, $telapiUrl, $nexapiUrlRec, $nexapiUrl, $twilapiUrlRec, $twilapiUrl, $flowapiUrlRec, $flowapiUrl, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames) { $upsettings = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `tel_sender_name`, `nex_sender_name`, `twil_sender_name`, `flow_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_all_messages`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultstng = $upsettings->execute([$userId]); $rowup = $resultstng->fetch(); $resultstng->closeCursor(); if ($resultstng && !$rowup) { $sql = $this->connection->prepare(' INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_url_rec`, `telapi_url`, `nexapi_url_rec`, `nexapi_url`, `twilapi_url_rec`, `twilapi_url`, `flowapi_url_rec`, `flowapi_url`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_display_names`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) '); $sql->execute([$userId, $telapiUrlRec, $telapiUrl, $nexapiUrlRec, $nexapiUrl, $twilapiUrlRec, $twilapiUrl, $flowapiUrlRec, $flowapiUrl, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames]); } elseif ($resultstng && $rowup) { $sqlupdatedb = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_settings` SET `telapi_url_rec` = ?, `telapi_url` = ?, `nexapi_url_rec` = ?, `nexapi_url` = ?, `twilapi_url_rec` = ?, `twilapi_url` = ?, `flowapi_url_rec` = ?, `flowapi_url` = ?, `messagesperpage` = ?, `get_notify` = ?, `notification_email` = ?, `getsmsinemail` = ?, `show_display_names` = ? WHERE `user_id` = ?'); $updateRes = $sqlupdatedb->execute([$telapiUrlRec, $telapiUrl, $nexapiUrlRec, $nexapiUrl, $twilapiUrlRec, $twilapiUrl, $flowapiUrlRec, $flowapiUrl, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames, $userId]); $updateRes->closeCursor(); } } public function updateadminsettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $twilapiKey, $twilapiSecret, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl, $showAllMessages) { if ($this->groupManager->isAdmin($userId)) { $upsettings = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `tel_sender_name`, `nex_sender_name`, `twil_sender_name`, `flow_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_all_messages`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultstng = $upsettings->execute([$userId]); $rowup = $resultstng->fetch(); $resultstng->closeCursor(); if ($resultstng && !$rowup) { if ($telapiKey != '') { $telapikeystrenc = $this->crypto->encrypt($telapiKey); } else { $telapikeystrenc = ''; } if ($telPubKey != '') { $telpubkeystrenc = $this->crypto->encrypt($telPubKey); } else { $telpubkeystrenc = ''; } if ($messagingProfileId != '') { $messagingprofenc = $this->crypto->encrypt($messagingProfileId); } else { $messagingprofenc = ''; } if ($nexapiKey != '') { $nexapikeystrenc = $this->crypto->encrypt($nexapiKey); } else { $nexapikeystrenc = ''; } if ($nexapiSecret != '') { $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret); } else { $nexapisecretstrenc = ''; } if ($twilapiKey != '') { $twilapikeystrenc = $this->crypto->encrypt($twilapiKey); } else { $twilapikeystrenc = ''; } if ($twilapiSecret != '') { $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret); } else { $twilapisecretstrenc = ''; } if ($flowapiKey != '') { $flowapikeystrenc = $this->crypto->encrypt($flowapiKey); } else { $flowapikeystrenc = ''; } if ($flowapiSecret != '') { $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret); } else { $flowapisecretstrenc = ''; } $sql = $this->connection->prepare(' INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `show_all_messages`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) '); $sql->execute([$userId, $telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $twilapikeystrenc, $twilapisecretstrenc, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, $flowapiUrl, $showAllMessages]); } elseif ($resultstng && $rowup) { // Check if the value of the field is the placeholder or an empty string if ($telapiKey != '' && $telapiKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $telapikeystrenc = $this->crypto->encrypt($telapiKey); } elseif ($telapiKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $telapikeystrenc = $rowup['telapi_key']; } elseif ($telapiKey == '') { $telapikeystrenc = ''; } if ($telPubKey != '' && $telPubKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $telpubkeystrenc = $this->crypto->encrypt($telPubKey); } elseif ($telPubKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $telpubkeystrenc = $rowup['tel_pub_key']; } elseif ($telPubKey == '') { $telpubkeystrenc = ''; } if ($messagingProfileId != '' && $messagingProfileId != "%20%20%20%20%20%20%20%20%20%20%20%20") { $messagingprofenc = $this->crypto->encrypt($messagingProfileId); } elseif ($messagingProfileId == "%20%20%20%20%20%20%20%20%20%20%20%20") { $messagingprofenc = $rowup['messaging_profile_id']; } elseif ($messagingProfileId == '') { $messagingprofenc = ''; } if ($nexapiKey != '' && $nexapiKey != "%20%20%20%20%20%20%20%20%20") { $nexapikeystrenc = $this->crypto->encrypt($nexapiKey); } elseif ($nexapiKey == "%20%20%20%20%20%20%20%20%20") { $nexapikeystrenc = $rowup['nexapi_key']; } elseif ($nexapiKey == '') { $nexapikeystrenc = ''; } if ($twilapiKey != '' && $twilapiKey != "%20%20%20%20%20%20%20%20%20") { $twilapikeystrenc = $this->crypto->encrypt($twilapiKey); } elseif ($twilapiKey == "%20%20%20%20%20%20%20%20%20") { $twilapikeystrenc = $rowup['twilapi_key']; } elseif ($twilapiKey == '') { $twilapikeystrenc = ''; } if ($flowapiKey != '' && $flowapiKey != "%20%20%20%20%20%20%20%20%20") { $flowapikeystrenc = $this->crypto->encrypt($flowapiKey); } elseif ($flowapiKey == "%20%20%20%20%20%20%20%20%20") { $flowapikeystrenc = $rowup['flowapi_key']; } elseif ($flowapiKey == '') { $flowapikeystrenc = ''; } if ($nexapiSecret != '' && $nexapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret); } elseif ($nexapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $nexapisecretstrenc = $rowup['nexapi_secret']; } elseif ($nexapiSecret == '') { $nexapisecretstrenc = ''; } if ($twilapiSecret != '' && $twilapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $twilapisecretstrenc = $this->crypto->encrypt($twilapiSecret); } elseif ($twilapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $twilapisecretstrenc = $rowup['twilapi_secret']; } elseif ($twilapiSecret == '') { $twilapisecretstrenc = ''; } if ($flowapiSecret != '' && $flowapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $flowapisecretstrenc = $this->crypto->encrypt($flowapiSecret); } elseif ($flowapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") { $flowapisecretstrenc = $rowup['flowapi_secret']; } elseif ($flowapiSecret == '') { $flowapisecretstrenc = ''; } $sqlupdatedb = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_settings` SET `telapi_key` = ?, `tel_pub_key` = ?, `telapi_url_rec` = ?, `telapi_url` = ?, `messaging_profile_id` = ?, `nexapi_key` = ?, `nexapi_secret` = ?, `nexapi_url_rec` = ?, `nexapi_url` = ?, `tel_sender_name` = ?, `nex_sender_name` = ?, `twilapi_key` = ?, `twilapi_secret` = ?, `twilapi_url_rec` = ?, `twilapi_url` = ?, `twil_sender_name` = ?, `flowapi_key` = ?, `flowapi_secret` = ?, `flowapi_url_rec` = ?, `flowapi_url` = ?, `show_all_messages` = ? WHERE `user_id` = ?'); $updateRes = $sqlupdatedb->execute([$telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $twilapikeystrenc, $twilapisecretstrenc, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, $flowapiUrl, $showAllMessages, $userId]); $updateRes->closeCursor(); } } } public function updatepersadmnsettings($userId, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames) { if ($this->groupManager->isAdmin($userId)) { $upsettings = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url`, `tel_sender_name`, `nex_sender_name`, `twil_sender_name`, `flow_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_all_messages`, `show_display_names` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultstng = $upsettings->execute([$userId]); $rowup = $resultstng->fetch(); $resultstng->closeCursor(); if ($resultstng && !$rowup) { $sql = $this->connection->prepare(' INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `show_display_names`) VALUES (?, ?, ?, ?, ?, ?)'); $sql->execute([$userId, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames]); } elseif ($resultstng && $rowup) { $sqlupdatedb = $this->connection->prepare(' UPDATE `*PREFIX*sms_relent_settings` SET `messagesperpage` = ?, `get_notify` = ?, `notification_email` = ?, `getsmsinemail` = ?, `show_display_names` = ? WHERE `user_id` = ?'); $updateRes = $sqlupdatedb->execute([$messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $showDisplayNames, $userId]); $updateRes->closeCursor(); } } } /** * @NoAdminRequired */ public function getapicredentials($userId) { $sqlcr = $this->connection->prepare(' SELECT `id`, `user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`, `twilapi_key`, `twilapi_secret`, `twilapi_url_rec`, `twilapi_url`, `twil_sender_name`, `flowapi_key`, `flowapi_secret`, `flowapi_url_rec`, `flowapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?'); $resultcr = $sqlcr->execute([$userId]); $settingsfrdb = $resultcr->fetch(); $resultcr->closeCursor(); if (($settingsfrdb['telapi_key'] != '') && ($settingsfrdb['telapi_key'] != 'undefined') && ($settingsfrdb['telapi_key'] != null)) { $telapikeystrdec = $this->crypto->decrypt($settingsfrdb['telapi_key']); } else { $telapikeystrdec = ''; } if (($settingsfrdb['tel_pub_key'] != '') && ($settingsfrdb['tel_pub_key'] != 'undefined') && ($settingsfrdb['tel_pub_key'] != null)) { $telpubkeystrdec = $this->crypto->decrypt($settingsfrdb['tel_pub_key']); } else { $telpubkeystrdec = ''; } $telapiurlrec = $settingsfrdb['telapi_url_rec']; $telapiurlstr = $settingsfrdb['telapi_url']; if (($settingsfrdb['messaging_profile_id'] != '') && ($settingsfrdb['messaging_profile_id'] != 'undefined') && ($settingsfrdb['messaging_profile_id'] != null)) { $messagingprofid = $this->crypto->decrypt($settingsfrdb['messaging_profile_id']); } else { $messagingprofid = ''; } if (($settingsfrdb['nexapi_key'] != '') && ($settingsfrdb['nexapi_key'] != 'undefined') && ($settingsfrdb['nexapi_key'] != null)) { $nexapikeystr = $this->crypto->decrypt($settingsfrdb['nexapi_key']); } else { $nexapikeystr = ''; } if (($settingsfrdb['nexapi_secret'] != '') && ($settingsfrdb['nexapi_secret'] != 'undefined') && ($settingsfrdb['nexapi_secret'] != null)) { $nexapisecretstr = $this->crypto->decrypt($settingsfrdb['nexapi_secret']); } else { $nexapisecretstr = ''; } if (($settingsfrdb['twilapi_key'] != '') && ($settingsfrdb['twilapi_key'] != 'undefined') && ($settingsfrdb['twilapi_key'] != null)) { $twilapikeystr = $this->crypto->decrypt($settingsfrdb['twilapi_key']); } else { $twilapikeystr = ''; } if (($settingsfrdb['twilapi_secret'] != '') && ($settingsfrdb['twilapi_secret'] != 'undefined') && ($settingsfrdb['twilapi_secret'] != null)) { $twilapisecretstr = $this->crypto->decrypt($settingsfrdb['twilapi_secret']); } else { $twilapisecretstr = ''; } if (($settingsfrdb['flowapi_key'] != '') && ($settingsfrdb['flowapi_key'] != 'undefined') && ($settingsfrdb['flowapi_key'] != null)) { $flowapikeystr = $this->crypto->decrypt($settingsfrdb['flowapi_key']); } else { $flowapikeystr = ''; } if (($settingsfrdb['flowapi_secret'] != '') && ($settingsfrdb['flowapi_secret'] != 'undefined') && ($settingsfrdb['flowapi_secret'] != null)) { $flowapisecretstr = $this->crypto->decrypt($settingsfrdb['flowapi_secret']); } else { $flowapisecretstr = ''; } $nexapiurlrecsms = $settingsfrdb['nexapi_url_rec']; $nexapiurldelrcpt = $settingsfrdb['nexapi_url']; $twilapiurlrecsms = $settingsfrdb['twilapi_url_rec']; $twilapiurldelrcpt = $settingsfrdb['twilapi_url']; $flowapiurlrecsms = $settingsfrdb['flowapi_url_rec']; $flowapiurldelrcpt = $settingsfrdb['flowapi_url']; $gettelsendername = $settingsfrdb['tel_sender_name']; $getnexsendername = $settingsfrdb['nex_sender_name']; $gettwilsendername = $settingsfrdb['twil_sender_name']; $getmessagesperpage = $settingsfrdb['messagesperpage']; $getnotification = $settingsfrdb['get_notify']; $notifyemail = $settingsfrdb['notification_email']; $includesmsinemail = $settingsfrdb['getsmsinemail']; return [$telapikeystrdec, $telpubkeystrdec, $telapiurlrec, $telapiurlstr, $messagingprofid, $nexapikeystr, $nexapisecretstr, $nexapiurlrecsms, $nexapiurldelrcpt, $gettelsendername, $getnexsendername, $getmessagesperpage, $getnotification, $notifyemail, $includesmsinemail, $twilapikeystr, $twilapisecretstr, $twilapiurlrecsms, $twilapiurldelrcpt, $gettwilsendername, $flowapikeystr, $flowapisecretstr, $flowapiurlrecsms, $flowapiurldelrcpt]; } /** * @NoAdminRequired */ public function getuserbytelrecwhurl($recsmswebhookurl) { $sqlrec = $this->connection->prepare('SELECT `user_id`, `telapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url_rec` = ?'); $result = $sqlrec->execute([$recsmswebhookurl]); $datafromdb = $result->fetch(); $result->closeCursor(); $ncusertelrec = $datafromdb['user_id']; return $ncusertelrec; } /** * @NoAdminRequired */ public function getuserbyteldelrwhurl($delsmswebhookurl) { $sqldel = $this->connection->prepare('SELECT `user_id`, `telapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url` = ?'); $ressqldel = $sqldel->execute([$delsmswebhookurl]); $datafromdbdel = $ressqldel->fetch(); $ressqldel->closeCursor(); $ncuserteldel = $datafromdbdel['user_id']; return $ncuserteldel; } /** * @NoAdminRequired */ public function getuserbyplivorecwhurl($plivorecurl) { $sqlrecpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url_rec` = ?'); $plresrecsql = $sqlrecpl->execute([$plivorecurl]); $pldatafromdb = $plresrecsql->fetch(); $plresrecsql->closeCursor(); $ncuserplrec = $pldatafromdb['user_id']; return $ncuserplrec; } /** * @NoAdminRequired */ public function getuserbyplivodelrwhurl($plivodrurl) { $sqldrpl = $this->connection->prepare('SELECT `user_id`, `nexapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url` = ?'); $ressqldelrec = $sqldrpl->execute([$plivodrurl]); $datafromdbdr = $ressqldelrec->fetch(); $ressqldelrec->closeCursor(); $ncuserplivodel = $datafromdbdr['user_id']; return $ncuserplivodel; } /** * @NoAdminRequired */ public function getuserbytwilrecwhurl($twilrecurl) { $sqlrectw = $this->connection->prepare('SELECT `user_id`, `twilapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url_rec` = ?'); $twresrecsql = $sqlrectw->execute([$twilrecurl]); $twdatafromdb = $twresrecsql->fetch(); $twresrecsql->closeCursor(); $ncusertwrec = $twdatafromdb['user_id']; return $ncusertwrec; } /** * @NoAdminRequired */ public function getuserbytwildelrwhurl($twildrurl) { $sqldrtw = $this->connection->prepare('SELECT `user_id`, `twilapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `twilapi_url` = ?'); $ressqldelrectw = $sqldrtw->execute([$twildrurl]); $datafromdbdrtw = $ressqldelrectw->fetch(); $ressqldelrectw->closeCursor(); $ncusertwildel = $datafromdbdrtw['user_id']; return $ncusertwildel; } /** * @NoAdminRequired */ public function getuserbyflowrecwhurl($flowrecurl) { $sqlrecfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url_rec` = ?'); $flresrecsql = $sqlrecfl->execute([$flowrecurl]); $fldatafromdb = $flresrecsql->fetch(); $flresrecsql->closeCursor(); $ncuserflrec = $fldatafromdb['user_id']; return $ncuserflrec; } /** * @NoAdminRequired */ public function getuserbyflowdelrwhurl($flowdrurl) { $sqldrfl = $this->connection->prepare('SELECT `user_id`, `flowapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `flowapi_url` = ?'); $ressqldelrecfl = $sqldrfl->execute([$flowdrurl]); $datafromdbdrfl = $ressqldelrecfl->fetch(); $ressqldelrecfl->closeCursor(); $ncuserflowdel = $datafromdbdrfl['user_id']; return $ncuserflowdel; } }