Skip to content

Commit

Permalink
Modules updates.
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonLV committed Oct 31, 2023
1 parent a6a354b commit 9f08213
Showing 1 changed file with 383 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,383 @@
<?php defined('BX_DOL') or die('hack attempt');
/**
* Copyright (c) UNA, Inc - https://una.io
* MIT License - https://opensource.org/licenses/MIT
*
* @defgroup Timeline Timeline
* @ingroup UnaModules
*
* @{
*/

class BxTimelineResponse extends BxBaseModNotificationsResponse
{
public function __construct()
{
parent::__construct();

$this->_oModule = BxDolModule::getInstance('bx_timeline');
}

/**
* Overwtire the method of parent class.
*
* @param BxDolAlerts $oAlert an instance of alert.
*/
public function response($oAlert)
{
bx_alert($this->_oModule->getName(), 'before_register_alert', 0, 0, array(
'unit' => $oAlert->sUnit,
'action' => $oAlert->sAction,
'alert' => &$oAlert,
));

$CNF = &$this->_oModule->_oConfig->CNF;

$sMethod = '_process' . bx_gen_method_name($oAlert->sUnit . '_' . $oAlert->sAction);
if(method_exists($this, $sMethod))
return $this->$sMethod($oAlert);

$iObjectAuthorId = $this->_getObjectOwnerId($oAlert->aExtras);
$iObjectPrivacyView = $this->_getObjectPrivacyView($oAlert->aExtras);
if($iObjectPrivacyView == BX_DOL_PG_HIDDEN)
return;

$aHandler = $this->_oModule->_oConfig->getHandlers($oAlert->sUnit . '_' . $oAlert->sAction);
if(empty($aHandler) || !is_array($aHandler))
return;

$iSilentMode = $this->_oModule->getSilentMode($oAlert->aExtras);
if(in_array($iSilentMode, array(BX_BASE_MOD_NTFS_SLTMODE_ABSOLUTE, BX_TIMELINE_SLTMODE_ABSOLUTE)))
return;

switch($aHandler['type']) {
case BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT:
$iOwnerId = abs($oAlert->iSender);
if($iObjectPrivacyView < 0)
$iOwnerId = abs($iObjectPrivacyView);

$sContent = '';
if(!empty($oAlert->aExtras) && is_array($oAlert->aExtras))
$sContent = serialize(bx_process_input($oAlert->aExtras));

$sSource = '';
if(!empty($oAlert->aExtras['timeline_group']))
$sSource = $oAlert->aExtras['timeline_group']['by'];
else
$sSource = $oAlert->sUnit . '_' . $iObjectAuthorId . '_' . $oAlert->iObject;

$iDate = time();
$aEvent = [
'owner_id' => $iOwnerId,
'type' => $oAlert->sUnit,
'action' => $oAlert->sAction,
'object_id' => $oAlert->iObject,
'object_owner_id' => $iObjectAuthorId,
'object_privacy_view' => $iObjectPrivacyView,
'object_cf' => $this->_getObjectCf($oAlert->aExtras),
'content' => $sContent,
'source' => $sSource,
'title' => '',
'description' => '',
'date' => $iDate,
'reacted' => $iDate,
];

$sMethod = '_prepareEvent' . bx_gen_method_name($oAlert->sUnit . '_' . $oAlert->sAction);
if(method_exists($this, $sMethod))
$this->$sMethod($oAlert, $aEvent);

$iId = $this->_oModule->_oDb->insertEvent($aEvent);
if(!empty($iId))
$this->_oModule->onPost($iId);
break;

case BX_BASE_MOD_NTFS_HANDLER_TYPE_UPDATE:
$sMethod = '_getEventUpdate' . bx_gen_method_name($oAlert->sUnit . '_' . $oAlert->sAction);
if(!method_exists($this, $sMethod))
$sMethod = '_getEventUpdate';

$aEvent = $this->$sMethod($oAlert, $aHandler);
if(empty($aEvent) || !is_array($aEvent))
break;

$aContent = [];
if(!empty($aEvent['content']) && is_string($aEvent['content']))
$aContent = unserialize($aEvent['content']);
if(!empty($oAlert->aExtras) && is_array($oAlert->aExtras))
$aContent = array_merge($aContent, bx_process_input($oAlert->aExtras));

$aParamsSet = ['content' => serialize($aContent)];
$aParamsSetBySource = [];

foreach(['status', 'status_admin'] as $sStatusKey)
if(!empty($aContent[$sStatusKey])) {
$aParamsSet[$sStatusKey] = $aContent[$sStatusKey];
$aParamsSetBySource[$sStatusKey] = $aContent[$sStatusKey];
}

if($iObjectPrivacyView > 0)
$aParamsSet = array_merge($aParamsSet, [
'owner_id' => $iObjectAuthorId,
'object_privacy_view' => $iObjectPrivacyView
]);
else if($iObjectPrivacyView < 0)
$aParamsSet = array_merge($aParamsSet, [
'owner_id' => abs($iObjectPrivacyView),
'object_privacy_view' => $iObjectPrivacyView
]);

$this->_oModule->_oDb->updateEvent($aParamsSet, ['id' => $aEvent[$CNF['FIELD_ID']]]);

//--- Delete item cache.
$this->_oModule->deleteCacheItem($aEvent[$CNF['FIELD_ID']]);

//--- Update related events.
if(!empty($aEvent[$CNF['FIELD_SOURCE']]) && !empty($aParamsSetBySource)) {
$aEventsBySource = $this->_oModule->_oDb->getEvents(['browse' => 'source', 'value' => $aEvent[$CNF['FIELD_SOURCE']]]);
foreach($aEventsBySource as $aEventBySource) {
if($aEventBySource[$CNF['FIELD_ID']] == $aEvent[$CNF['FIELD_ID']])
continue;

$this->_oModule->_oDb->updateEvent($aParamsSetBySource, ['id' => $aEventBySource[$CNF['FIELD_ID']]]);

//--- Delete item cache.
$this->_oModule->deleteCacheItem($aEventBySource[$CNF['FIELD_ID']]);
}
}

$this->_oModule->rebuildSlice();
break;

case BX_BASE_MOD_NTFS_HANDLER_TYPE_DELETE:
if($oAlert->sUnit == 'profile' && $oAlert->sAction == 'delete') {
$aEvents = $this->_oModule->_oDb->getEvents(array('browse' => 'owner_id', 'value' => $oAlert->iObject));
foreach($aEvents as $aEvent)
$this->_oModule->deleteEvent($aEvent);

if(!isset($oAlert->aExtras['delete_with_content']) || !$oAlert->aExtras['delete_with_content'])
break;

$aEvents = $this->_oModule->_oDb->getEvents(array('browse' => 'common_by_object', 'value' => $oAlert->iObject));
foreach($aEvents as $aEvent)
$this->_oModule->deleteEvent($aEvent);
break;
}

$sMethod = '_getEventDelete' . bx_gen_method_name($oAlert->sUnit . '_' . $oAlert->sAction);
if(!method_exists($this, $sMethod))
$sMethod = '_getEventDelete';

$aEvent = $this->$sMethod($oAlert, $aHandler);
if(empty($aEvent) || !is_array($aEvent))
break;

$this->_oModule->deleteEvent($aEvent);
break;
}
}

protected function _prepareEventCommentAdded($oAlert, &$aEvent)
{
$aEvent = array_merge($aEvent, array(
'object_id' => $oAlert->aExtras['comment_uniq_id'],
'object_owner_id' => $oAlert->aExtras['comment_author_id'],
));
}

protected function _getEventUpdate(&$oAlert, &$aHandler)
{
$aHandlers = $this->_oModule->_oDb->getHandlers([
'type' => 'by_group_key_type',
'group' => $aHandler['group']
]);

return $this->_oModule->_oDb->getEvents([
'browse' => 'descriptor',
'type' => $oAlert->sUnit,
'action' => $aHandlers[BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT]['alert_action'],
'object_id' => $oAlert->iObject
]);
}

protected function _getEventUpdateCommentEdited(&$oAlert, &$aHandler)
{
$aHandlers = $this->_oModule->_oDb->getHandlers([
'type' => 'by_group_key_type',
'group' => $aHandler['group']
]);

return $this->_oModule->_oDb->getEvents([
'browse' => 'descriptor',
'type' => $oAlert->sUnit,
'action' => $aHandlers[BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT]['alert_action'],
'object_id' => $oAlert->aExtras['comment_uniq_id']
]);
}

protected function _getEventDelete(&$oAlert, &$aHandler)
{
$aHandlers = $this->_oModule->_oDb->getHandlers([
'type' => 'by_group_key_type',
'group' => $aHandler['group']
]);

return $this->_oModule->_oDb->getEvents([
'browse' => 'descriptor',
'type' => $oAlert->sUnit,
'action' => $aHandlers[BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT]['alert_action'],
'object_id' => $oAlert->iObject
]);
}

protected function _getEventDeleteCommentDeleted(&$oAlert, &$aHandler)
{
$aHandlers = $this->_oModule->_oDb->getHandlers([
'type' => 'by_group_key_type',
'group' => $aHandler['group']
]);

return $this->_oModule->_oDb->getEvents([
'browse' => 'descriptor',
'type' => $oAlert->sUnit,
'action' => $aHandlers[BX_BASE_MOD_NTFS_HANDLER_TYPE_INSERT]['alert_action'],
'object_id' => $oAlert->aExtras['comment_uniq_id']
]);
}

protected function _processSystemClearCache($oAlert)
{
if(!in_array($oAlert->aExtras['type'], array('all', 'custom')))
return;

$this->_clearCache();
}

protected function _processSystemEnable($oAlert)
{
$aModuleConfig = $oAlert->aExtras['config'];
if(empty($aModuleConfig) || !is_array($aModuleConfig))
return false;

$sName = $aModuleConfig['name'];
if(!bx_srv_ii('system', 'is_module_context', [$sName]))
return false;

return $this->_oModule->serviceFeedsMenuAdd($sName);
}

protected function _processSystemDisable($oAlert)
{
$aModuleConfig = $oAlert->aExtras['config'];
if(empty($aModuleConfig) || !is_array($aModuleConfig))
return false;

$sName = $aModuleConfig['name'];
if(!bx_srv_ii('system', 'is_module_context', [$sName]))
return false;

return $this->_oModule->serviceFeedsMenuDelete($sName);
}

protected function _processAccountConfirm($oAlert)
{
$this->_clearCache();
}

protected function _processAccountUnconfirm($oAlert)
{
$this->_clearCache();
}

protected function _processProfileApprove($oAlert)
{
$this->_clearCache();
}

protected function _processProfileDisapprove($oAlert)
{
$this->_clearCache();
}

protected function _processProfileActivate($oAlert)
{
$this->_clearCache();
}

protected function _processProfileSuspend($oAlert)
{
$this->_clearCache();
}

protected function _clearCache()
{
//--- Clear item cache.
$this->_oModule->getCacheItemObject()->removeAllByPrefix($this->_oModule->_oConfig->getPrefix('cache_item'));
}

protected function _processBxTimelineVideosMp4Transcoded($oAlert)
{
$this->_onVideoTranscoded($oAlert->iObject, $oAlert->aExtras['ret']);
}

protected function _onVideoTranscoded($iMediaId, $bResult, $aParams = array())
{
$CNF = &$this->_oModule->_oConfig->CNF;

if(!isset($CNF['FIELD_STATUS']))
return;

$aMedia = $this->_oModule->_oDb->getMediaById($CNF['FIELD_VIDEO'], $iMediaId);
if(empty($aMedia) || !is_array($aMedia))
return;

$iContentId = (int)$aMedia['event_id'];
$aContentInfo = $this->_oModule->_oDb->getContentInfoById($iContentId);
if(empty($aContentInfo) || !is_array($aContentInfo))
return;

if(!isset($aContentInfo[$CNF['FIELD_STATUS']]) || $aContentInfo[$CNF['FIELD_STATUS']] != 'awaiting')
return;

$iNow = time();
$bNotify = $iNow - $aContentInfo[$CNF['FIELD_ADDED']] > $this->_oModule->_oConfig->getDpnTime();
$iSystemBotProfileId = (int)getParam('sys_profile_bot');
$iAuthorProfileId = $aContentInfo[$CNF['FIELD_' . ((int)$aContentInfo[$CNF['FIELD_SYSTEM']] == 0 ? 'OBJECT_ID' : 'OWNER_ID')]];

if(!$bResult) {
if((int)$this->_oModule->_oDb->updateEntriesBy(array($CNF['FIELD_STATUS'] => 'failed'), array($CNF['FIELD_ID'] => $iContentId)) > 0) {
$this->_oModule->onFailed($iContentId);

if($bNotify)
bx_alert($this->_oModule->getName(), 'publish_failed', $aContentInfo[$CNF['FIELD_ID']], $iSystemBotProfileId, array(
'object_author_id' => $iAuthorProfileId,
'privacy_view' => BX_DOL_PG_ALL
));
}

return;
}

if(isset($CNF['FIELD_PUBLISHED']) && isset($aContentInfo[$CNF['FIELD_PUBLISHED']]) && $aContentInfo[$CNF['FIELD_PUBLISHED']] > $iNow)
return;

$oTranscoder = BxDolTranscoder::getObjectInstance($CNF['OBJECT_VIDEOS_TRANSCODERS']['mp4']);
$aMediasToCheck = $this->_oModule->_oDb->getMedia($CNF['FIELD_VIDEO'], $iContentId, 0, true);
foreach($aMediasToCheck as $aMediaToCheck)
if($oTranscoder->isMimeTypeSupported($aMediaToCheck['mime_type']) && !$oTranscoder->isFileReady($aMediaToCheck['id']))
return;

if(!$this->_oModule->_oDb->updateEntriesBy(array($CNF['FIELD_STATUS'] => 'active'), array($CNF['FIELD_ID'] => $iContentId)))
return;

$this->_oModule->onPublished($iContentId);

if($bNotify)
bx_alert($this->_oModule->getName(), 'publish_succeeded', $aContentInfo[$CNF['FIELD_ID']], $iSystemBotProfileId, array(
'object_author_id' => $iAuthorProfileId,
'privacy_view' => BX_DOL_PG_ALL
));
}
}

/** @} */

0 comments on commit 9f08213

Please sign in to comment.