/home/ivoiecob/email.hirewise-va.com/modules/ActivityHistory/Module.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\ActivityHistory;
use Aurora\Api;
use Aurora\Modules\ActivityHistory\Models\ActivityHistory;
/**
* System module provides hash-based object storage.
*
* @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.
*
* @property Settings $oModuleSettings
*
* @package Modules
*/
class Module extends \Aurora\System\Module\AbstractModule
{
public $oManager = null;
/***** private functions *****/
/**
* Initializes module.
*
* @ignore
*/
public function init()
{
$this->oManager = new Manager($this);
$this->subscribeEvent('AddToActivityHistory', array($this, 'onAddToActivityHistory'));
$this->subscribeEvent('Files::Delete::after', array($this, 'onAfterFilesDelete'));
$this->subscribeEvent('Files::DeletePublicLink::after', array($this, 'onAfterFilesDeletePublicLink'));
$this->subscribeEvent('CreatePublicLink::after', array($this, 'onAfterFilesCreatePublicLink'));
$this->subscribeEvent('OpenPgpFilesWebclient::ValidatePublicLinkPassword::after', array($this, 'onAfterValidatePublicLinkPassword'));
$this->subscribeEvent('Core::DeleteUser::after', array($this, 'onAfterDeleteUser'));
$this->aDeniedMethodsByWebApi = [];
}
/**
* @return Module
*/
public static function getInstance()
{
return parent::getInstance();
}
/**
* @return Module
*/
public static function Decorator()
{
return parent::Decorator();
}
/**
* @return Settings
*/
public function getModuleSettings()
{
return $this->oModuleSettings;
}
public function onAddToActivityHistory($aParams, &$mResult)
{
$iUserId = 0;
if (is_numeric($aParams['UserId'])) {
$iUserId = $aParams['UserId'];
} else {
$oUser = \Aurora\Modules\Core\Module::getInstance()->GetUserByPublicId($aParams['UserId']);
if ($oUser) {
$iUserId = $oUser->Id;
}
}
$sGuestPublicId = isset($aParams['GuestPublicId']) ? $aParams['GuestPublicId'] : null;
$this->Create($iUserId, $aParams['ResourceType'], $aParams['ResourceId'], $aParams['Action'], $sGuestPublicId);
}
public function onAfterFilesDelete(&$aArgs, &$mResult)
{
$iUserId = $aArgs['UserId'];
$sStorage = $aArgs['Type'];
$aItems = $aArgs['Items'];
foreach ($aItems as $aItem) {
$sResourceId = $sStorage . '/' . \ltrim(\ltrim($aItem['Path'], '/') . '/' . \ltrim($aItem['Name'], '/'), '/');
$this->Delete($iUserId, 'file', $sResourceId);
}
}
public function onAfterFilesCreatePublicLink(&$aArgs, &$mResult)
{
$iUserId = $aArgs['UserId'];
$sStorage = $aArgs['Type'];
$sResourceId = $sStorage . '/' . \ltrim(\ltrim($aArgs['Path'], '/') . '/' . \ltrim($aArgs['Name'], '/'), '/');
$this->Create($iUserId, 'file', $sResourceId, 'create-public-link');
}
public function onAfterValidatePublicLinkPassword(&$aArgs, &$mResult)
{
if (!$mResult) {
$this->CreateFromHash($aArgs['Hash'], 'wrong-password');
}
}
public function onAfterFilesDeletePublicLink(&$aArgs, &$mResult)
{
$iUserId = $aArgs['UserId'];
$sStorage = $aArgs['Type'];
$sResourceId = $sStorage . '/' . \ltrim(\ltrim($aArgs['Path'], '/') . '/' . \ltrim($aArgs['Name'], '/'), '/');
$this->Delete($iUserId, 'file', $sResourceId);
}
public function onAfterDeleteUser($aArgs, &$mResult)
{
if ($mResult) {
ActivityHistory::where('UserId', $aArgs['UserId'])->delete();
}
}
/***** private functions *****/
/***** public functions might be called with web API *****/
/**
*/
public function Create($UserId, $ResourceType, $ResourceId, $Action, $GuestPublicId = null)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::Anonymous);
$IpAddress = "";
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$IpAddress = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$IpAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$IpAddress = $_SERVER['REMOTE_ADDR'];
}
if (!isset($GuestPublicId)) {
$oUser = \Aurora\System\Api::getAuthenticatedUser();
if ($oUser) {
$GuestPublicId = $oUser->PublicId;
} else {
$GuestPublicId = '';
}
}
return $this->oManager->Create($UserId, $ResourceType, $ResourceId, $IpAddress, $Action, time(), $GuestPublicId);
}
public function CreateFromHash($Hash, $EventName)
{
$oMin = \Aurora\Modules\Min\Module::getInstance();
$mMin = $oMin->GetMinByHash($Hash);
if (isset($mMin['UserId']) && isset($mMin['Type']) && isset($mMin['Path']) && isset($mMin['Name'])) {
$mUserId = $mMin['UserId'];
if (is_string($mUserId)) {
$oUser = \Aurora\Modules\Core\Module::getInstance()->GetUserByPublicId($mUserId);
if ($oUser instanceof \Aurora\Modules\Core\Models\User) {
$mUserId = $oUser->Id;
}
}
if (is_int($mUserId)) {
$sStorage = $mMin['Type'];
$sResourceId = $sStorage . '/' . \ltrim(\ltrim($mMin['Path'], '/') . '/' . \ltrim($mMin['Name'], '/'), '/');
$this->Create($mUserId, 'file', $sResourceId, $EventName);
}
}
}
/**
*/
public function GetList($UserId, $ResourceType, $ResourceId, $Offset = 0, $Limit = 0)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
Api::CheckAccess($UserId);
return [
'Items' => $this->oManager->GetList($UserId, $ResourceType, $ResourceId, $Offset, $Limit)->all(),
'Count' => $this->oManager->GetListCount($UserId, $ResourceType, $ResourceId)
];
}
/**
*/
public function Delete($UserId, $ResourceType, $ResourceId)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
Api::CheckAccess($UserId);
return $this->oManager->Delete($UserId, $ResourceType, $ResourceId);
}
/***** public functions might be called with web API *****/
}