<?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 sender's Display Name
$getacdata = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?');
$getacdatares = $getacdata->execute(['phone', $recmessagearr[2]]);
$acdatausers = [];
while ($acusrfetched = $getacdatares->fetch()) {
$acdatausers[] = $acusrfetched['uid'];
}
$getacdatares->closeCursor();
if ($acdatausers) {
$acdatausrdn = [];
foreach ($acdatausers as $dnkey => $dnvalue) {
$getacdatadn = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
$getacdatadnres = $getacdatadn->execute([$dnvalue, 'displayname']);
while ($acusrdnfetched = $getacdatadnres->fetch()) {
$acdatausrdn[] = $acusrdnfetched['value'];
}
$getacdatadnres->closeCursor();
}
if ($acdatausrdn) {
if (count($acdatausrdn) == 1) {
$authorDisplayNm = $acdatausrdn[0];
$internalSender = 1;
} elseif (count($acdatausrdn) > 1) {
$authorDisplayNm = implode("/", $acdatausrdn);
$internalSender = 1;
}
} else { $authorDisplayNm = ''; $internalSender = 0; }
} else {
// Search for the associated Display Name in the previous messages coming from the same number
$getdspnm = $this->connection->prepare('SELECT `from`, `author_displayname` FROM `*PREFIX*sms_relent_received` WHERE `from` = ? LIMIT 1');
$getdspnmres = $getdspnm->execute([$recmessagearr[2]]);
$dspnmfetched = $getdspnmres->fetch();
$authorDisplayNm = $dspnmfetched['author_displayname'];
$getdspnmres->closeCursor();
$internalSender = 0;
}
$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
$getacdatast = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ? AND `value` = ?');
$getacdatastres = $getacdatast->execute(['phone', $msgsentfrom]);
$acdatausersst = [];
while ($acusrstfetched = $getacdatastres->fetch()) {
$acdatausersst[] = $acusrstfetched['uid'];
}
$getacdatastres->closeCursor();
if ($acdatausersst) {
$acdatausrdnst = [];
foreach ($acdatausersst as $dnstkey => $dnstvalue) {
$getacdatadnst = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `uid` = ? AND `name` = ?');
$getacdatadnstres = $getacdatadnst->execute([$dnstvalue, 'displayname']);
while ($acusrdnstfetched = $getacdatadnstres->fetch()) {
$acdatausrdnst[] = $acusrdnstfetched['value'];
}
$getacdatadnstres->closeCursor();
}
if ($acdatausrdnst) {
if (count($acdatausrdnst) == 1) {
$authorDisplayName = $acdatausrdnst[0];
} elseif (count($acdatausrdnst) > 1) {
$authorDisplayName = implode("/", $acdatausrdnst);
}
} else { $authorDisplayName = ''; }
} else { $authorDisplayName = ''; }
$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();
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`');
$rcresult = $getrectable->execute();
} else {
$getrectable = $this->connection->prepare('
SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`, `internal_sender`
FROM `*PREFIX*sms_relent_received`');
$rcresult = $getrectable->execute();
}
} 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)) {
return $recdatafromdb;
} else {
// 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();
if ($restrdata) {
// 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 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 phone numbers that are not allowed for the current user
$restrPhoneNb = [];
foreach ($restrdata as $rskey => $rsvalue) {
$restrgrparr = explode("|", $rsvalue['groups']);
$chck = 0;
foreach ($restrgrparr as $rkey => $rvalue) {
if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
}
if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
}
$restrPhoneNmbrs = array_unique($restrPhoneNb);
// 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 ($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);
return $recdatafdbproc;
}
}
}
/**
* @NoAdminRequired
*/
public function getreceivedtablefordel($userId) {
if ($this->groupManager->isAdmin($userId)) {
$getrecfordl = $this->connection->prepare('
SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `message`
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();
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`');
$resultsent = $getsenttbl->execute();
} else {
$getsenttbl = $this->connection->prepare('
SELECT `id`, `user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`
FROM `*PREFIX*sms_relent_sent`');
$resultsent = $getsenttbl->execute();
}
} 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)) {
return $sentdatafromdb;
} else {
// 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();
if ($restrdata) {
// 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 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 phone numbers that are not allowed for the current user
$restrPhoneNb = [];
foreach ($restrdata as $rskey => $rsvalue) {
$restrgrparr = explode("|", $rsvalue['groups']);
$chck = 0;
foreach ($restrgrparr as $rkey => $rvalue) {
if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
}
if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
}
$restrPhoneNmbrs = array_unique($restrPhoneNb);
// 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);
return $sentdatadbproc;
}
}
}
/**
* @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`
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();
// Get all the received messages
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`');
$getrecmsgsres = $getrecmsgs->execute();
} else {
$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]);
}
$recmsgs = [];
while ($rcrowsfetch = $getrecmsgsres->fetch()) {
$rcrowsfetch['deliveryreceipt'] = '';
$rcrowsfetch['table'] = 'received';
$recmsgs[] = $rcrowsfetch;
}
$getrecmsgsres->closeCursor();
// Get all the sent messages
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`');
$getsentmsgsres = $getsentmsgs->execute();
} 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 {
// 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();
if ($restrdata) {
// 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 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 phone numbers that are not allowed for the current user
$restrPhoneNb = [];
foreach ($restrdata as $rskey => $rsvalue) {
$restrgrparr = explode("|", $rsvalue['groups']);
$chck = 0;
foreach ($restrgrparr as $rkey => $rvalue) {
if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
}
if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
}
$restrPhoneNmbrs = array_unique($restrPhoneNb);
// 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['user_id'] == $userId) {
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]);
}
}
}
} else { unset($groupedfromdb[$gmdkey]); }
}
$groupedfdbproc = array_values($groupedfromdb);
return $groupedfdbproc;
}
}
}
/**
* @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();
// Get all the received messages for the current number
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 ?');
$getrecmsgsres = $getrecmsgs->execute([$phoneNumber, $phoneNumberpr]);
} 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 all the sent messages
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` = ?');
$getsentmsgsres = $getsentmsgs->execute([$phoneNumberpr, $phoneNumber]);
} 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 {
// 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();
if ($restrdata) {
// 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 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 phone numbers that are not allowed for the current user
$restrPhoneNb = [];
foreach ($restrdata as $rskey => $rsvalue) {
$restrgrparr = explode("|", $rsvalue['groups']);
$chck = 0;
foreach ($restrgrparr as $rkey => $rvalue) {
if (str_contains(implode("|", $usergrps), $rvalue)) { $chck++; }
}
if (str_contains($rsvalue['users'], $cruserdname)) { $chck++; }
if ($chck == 0) { $restrPhoneNb[] = $rsvalue['phone_number']; }
}
$restrPhoneNmbrs = array_unique($restrPhoneNb);
// 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['user_id'] == $userId) {
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]);
}
}
}
} else { unset($groupedpernb[$gmdkey]); }
}
$groupedpernb = array_values($groupedpernb);
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_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`, `show_display_names`
FROM `*PREFIX*sms_relent_settings`
WHERE `user_id` = ?');
$resultsettings = $getsettings->execute([$userId]);
$settingsfromdb = $resultsettings->fetch();
$resultsettings->closeCursor();
if ($settingsfromdb) {
if ($settingsfromdb['telapi_key'] != '') {
// Send a placeholder to the browser, instead of the real API key
$settingsfromdb['telapi_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['tel_pub_key'] != '') {
$settingsfromdb['tel_pub_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['messaging_profile_id'] != '') {
$settingsfromdb['messaging_profile_id'] = "%20%20%20%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['nexapi_key'] != '') {
$settingsfromdb['nexapi_key'] = "%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['nexapi_secret'] != '') {
$settingsfromdb['nexapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['twilapi_key'] != '') {
$settingsfromdb['twilapi_key'] = "%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['twilapi_secret'] != '') {
$settingsfromdb['twilapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['flowapi_key'] != '') {
$settingsfromdb['flowapi_key'] = "%20%20%20%20%20%20%20%20%20";
}
if ($settingsfromdb['flowapi_secret'] != '') {
$settingsfromdb['flowapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
}
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;
}
}
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)) {
// Get the 'show_all_messages' option for the current admin
$getsettingsadm = $this->connection->prepare('SELECT `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
$getadmsetresult = $getsettingsadm->execute([$userId]);
$settingsfdbadm = $getadmsetresult->fetch();
$getadmsetresult->closeCursor();
if ($settingsfdbadm) {
// 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 groups
$getgroups = $this->connection->prepare('SELECT `gid`, `displayname` FROM `*PREFIX*groups`');
$getgroupsres = $getgroups->execute();
$groupsArr = [];
while ($groupsfetched = $getgroupsres->fetch()) {
$groupsArr[] = $groupsfetched;
}
$getgroupsres->closeCursor();
if ($groupsArr) { $allgroups = $groupsArr; } else { $allgroups = ''; }
// Get the name of all users
$getusers = $this->connection->prepare('SELECT `uid`, `name`, `value` FROM `*PREFIX*accounts_data` WHERE `name` = ?');
$getusersres = $getusers->execute(['displayname']);
$usersArr = [];
while ($usersfetched = $getusersres->fetch()) {
$usersArr[] = $usersfetched;
}
$getusersres->closeCursor();
if ($usersArr) { $allusers = $usersArr; } else { $allusers = ''; }
$settingsadm = ['show_all_messages' => $settingsfdbadm['show_all_messages'], 'admdisplayname' => $cruserdname, 'restrictions' => $restrictedUsers,
'allgroups' => $allgroups, 'allusers' => $allusers];
return $settingsadm;
}
}
}
/**
* @NoAdminRequired
*
*/
public function updatesettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl,
$telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapiKey, $twilapiSecret,
$twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapiKey, $flowapiSecret, $flowapiUrlRec, $flowapiUrl, $showDisplayNames) {
$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`, `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`, `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`, `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`,
`show_display_names`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
');
$sql->execute([$userId, $telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec, $nexapiUrl,
$telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc, $twilapisecretstrenc, $twilapiUrlRec,
$twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec, $flowapiUrl, $showDisplayNames]);
} 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` = ?, `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` = ?, `show_display_names` = ?
WHERE `user_id` = ?');
$updateRes = $sqlupdatedb->execute([$telapikeystrenc, $telpubkeystrenc, $telapiUrlRec, $telapiUrl, $messagingprofenc, $nexapikeystrenc, $nexapisecretstrenc, $nexapiUrlRec,
$nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail, $twilapikeystrenc,
$twilapisecretstrenc, $twilapiUrlRec, $twilapiUrl, $twilSenderName, $flowapikeystrenc, $flowapisecretstrenc, $flowapiUrlRec,
$flowapiUrl, $showDisplayNames, $userId]);
$updateRes->closeCursor();
}
}
public function updateadminsettings($userId, $showAllMessages) {
if ($this->groupManager->isAdmin($userId)) {
$upsettingsadm = $this->connection->prepare('SELECT `id`, `user_id`, `show_all_messages` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = ?');
$resultstngadm = $upsettingsadm->execute([$userId]);
$rowupadm = $resultstngadm->fetch();
$resultstngadm->closeCursor();
if ($resultstngadm && !$rowupadm) {
$sqladm = $this->connection->prepare('INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `show_all_messages`) VALUES (?, ?)');
$sqladm->execute([$userId, $showAllMessages]);
} elseif ($resultstngadm && $rowupadm) {
$sqlupdatedbadm = $this->connection->prepare('UPDATE `*PREFIX*sms_relent_settings` SET `show_all_messages` = ? WHERE `user_id` = ?');
$updateResadm = $sqlupdatedbadm->execute([$showAllMessages, $userId]);
$updateResadm->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;
}
}