/home/ivoiecob/email.hirewise-va.com/modules/Core/Managers/Channels.php
<?php
/**
* This code is licensed under AGPLv3 license or Afterlogic Software License
* if commercial version of the product was purchased.
* For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
*/
namespace Aurora\Modules\Core\Managers;
use Aurora\Modules\Core\Enums\ErrorCodes;
use Aurora\Modules\Core\Models\Channel;
use Aurora\System\Enums\SortOrder;
/**
* @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
* @license https://afterlogic.com/products/common-licensing Afterlogic Software License
* @copyright Copyright (c) 2023, Afterlogic Corp.
*
* @package Channels
*/
class Channels extends \Aurora\System\Managers\AbstractManager
{
/**
*
* @param \Aurora\System\Module\AbstractModule $oModule
*/
public function __construct(\Aurora\System\Module\AbstractModule $oModule)
{
parent::__construct($oModule);
}
/**
* @param int $iOffset
* @param int $iLimit
* @param string $sOrderBy Default value is **Login**
* @param int $iOrderType Default value is **\Aurora\System\Enums\SortOrder::ASC**
* @param string $sSearchDesc Default value is empty string
*
* @return array|bool [Id => [Login, Description]]
*/
public function getChannelList($iOffset = 0, $iLimit = 0, $sOrderBy = 'Login', $iOrderType = SortOrder::ASC, $sSearchDesc = '')
{
$aResult = [];
if (!empty($sSearchDesc)) {
$query = Channel::where('Login', 'like', '%' . $sSearchDesc . '%');
} else {
$query = Channel::query();
}
if ($iOffset > 0) {
$query = $query->offset($iOffset);
}
if ($iLimit > 0) {
$query = $query->limit($iLimit);
}
try {
$aResult = $query->orderBy($sOrderBy, $iOrderType === SortOrder::ASC ? 'asc' : 'desc')->get();
} catch (\Illuminate\Database\QueryException $oException) {
\Aurora\Api::LogException($oException);
}
return $aResult;
}
/**
* @param string $sSearchDesc Default value is empty string
*
* @return int
*/
public function getChannelCount($sSearchDesc = '')
{
$iResult = 0;
try {
$iResult = Channel::where('Login', 'like', '%' . $sSearchDesc . '%')->where('Description', 'like', '%' . $sSearchDesc . '%')->count();
} catch (\Illuminate\Database\QueryException $oException) {
\Aurora\Api::LogException($oException);
}
return $iResult;
}
/**
* @param int $iChannelId
*
* @return \Aurora\Modules\Core\Models\Channel
*/
public function getChannelById($iChannelId)
{
$oChannel = null;
try {
$oChannel = Channel::find($iChannelId);
} catch (\Illuminate\Database\QueryException $oException) {
\Aurora\Api::LogException($oException);
}
return $oChannel;
}
/**
* @param string $sChannelLogin
*
* @return int
*/
public function getChannelIdByLogin($sChannelLogin)
{
$iChannelId = 0;
try {
$oChannel = Channel::firstWhere('Login', $sChannelLogin);
if ($oChannel instanceof Channel) {
$iChannelId = $oChannel->Id;
}
} catch (\Illuminate\Database\QueryException $oException) {
\Aurora\Api::LogException($oException);
}
return $iChannelId;
}
/**
* @param \Aurora\Modules\Core\Models\Channel $oChannel
*
* @return bool
*/
public function isExists(Channel $oChannel)
{
$bResult = false;
try {
$oChannels = Channel::where('Login', $oChannel->Login)->get();
foreach ($oChannels as $oObject) {
/**
* @var Channel $oObject
*/
if ($oObject->Id !== $oChannel->Id) {
$bResult = true;
break;
}
}
} catch (\Illuminate\Database\QueryException $oException) {
\Aurora\Api::LogException($oException);
}
return $bResult;
}
/**
* @param \Aurora\Modules\Core\Models\Channel $oChannel
*
* @return bool
*/
public function createChannel(Channel &$oChannel)
{
$bResult = false;
try {
if ($oChannel->validate()) {
if (!$this->isExists($oChannel)) {
$oChannel->Password = md5($oChannel->Login . mt_rand(1000, 9000) . microtime(true));
if (!$oChannel->save()) {
throw new \Aurora\System\Exceptions\ManagerException(ErrorCodes::ChannelCreateFailed);
}
} else {
throw new \Aurora\System\Exceptions\ManagerException(ErrorCodes::ChannelAlreadyExists);
}
}
$bResult = true;
} catch (\Illuminate\Database\QueryException $oException) {
$bResult = false;
\Aurora\Api::LogException($oException);
}
return $bResult;
}
/**
* @param \Aurora\Modules\Core\Models\Channel $oChannel
*
* @return bool
*/
public function updateChannel(Channel $oChannel)
{
$bResult = false;
try {
if ($oChannel->validate()) {
if (!$this->isExists($oChannel)) {
if (!$oChannel->save()) {
throw new \Aurora\System\Exceptions\ManagerException(ErrorCodes::ChannelUpdateFailed);
}
} else {
throw new \Aurora\Modules\Core\Exceptions\Exception(ErrorCodes::ChannelDoesNotExist);
}
}
$bResult = true;
} catch (\Illuminate\Database\QueryException $oException) {
$bResult = false;
\Aurora\Api::LogException($oException);
}
return $bResult;
}
/**
* @param \Aurora\Modules\Core\Models\Channel $oChannel
*
* @throws \Exception
*
* @return bool
*/
public function deleteChannel(\Aurora\Modules\Core\Models\Channel $oChannel)
{
$bResult = false;
try {
/* @var $oTenantsManager \Aurora\System\Managers\AbstractManager */
$oTenantsManager = new \Aurora\Modules\Core\Managers\Tenants($this->oModule);
if ($oTenantsManager && !$oTenantsManager->deleteTenantsByChannelId($oChannel->Id)) {
$oException = $oTenantsManager->GetLastException();
if ($oException) {
throw $oException;
}
}
$bResult = !!$oChannel->delete();
} catch (\Illuminate\Database\QueryException $oException) {
$bResult = false;
\Aurora\Api::LogException($oException);
}
return $bResult;
}
}