8a51e7d9 |
<?php
/**
* @copyright 2021 Double Bastion LLC <www.doublebastion.com>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
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;
}
}
|