Файл: upload/module/feed/include/service/process.class.php
Строк: 277
<?php
/**
* [PHPFOX_HEADER]
*/
defined('PHPFOX') or exit('NO DICE!');
/**
*
*
* @copyright [PHPFOX_COPYRIGHT]
* @author Raymond Benc
* @package Module_Feed
* @version $Id: process.class.php 4572 2012-07-31 08:51:10Z Miguel_Espinoza $
*/
class Feed_Service_Process extends Phpfox_Service
{
private $_bAllowGuest = false;
private $_iLastId = 0;
private $_aCallback = array();
private $_bIsCallback = false;
private $_bIsNewLoop = false;
/**
* Class constructor
*/
public function __construct()
{
$this->_sTable = Phpfox::getT('feed');
}
public function callback($aCallback)
{
if (isset($aCallback['module']))
{
$this->_bIsCallback = true;
$this->_aCallback = $aCallback;
}
return $this;
}
public function allowGuest()
{
$this->_bAllowGuest = true;
return $this;
}
public function add($sType, $iItemId, $iPrivacy = 0, $iPrivacyComment = 0, $iParentUserId = 0, $iOwnerUserId = null, $bIsTag = 0, $iParentFeedId = 0, $sParentModuleName = null)
{
//Plugin call
if (($sPlugin = Phpfox_Plugin::get('feed.service_process_add__start')))
{
eval($sPlugin);
}
if ((!Phpfox::isUser() && $this->_bAllowGuest === false) || (defined('PHPFOX_SKIP_FEED') && PHPFOX_SKIP_FEED))
{
return false;
}
if ($iParentUserId === null)
{
$iParentUserId = 0;
}
$iNewTimeStamp = PHPFOX_TIME;
$iNewTimeStampCheck = mktime(0, 0, 0, date('n', PHPFOX_TIME), date('j', PHPFOX_TIME), date('Y', PHPFOX_TIME));
if (Phpfox::getParam('feed.can_add_past_dates'))
{
$aVals = Phpfox::getLib('request')->getArray('val');
if (!empty($aVals['start_year']) && !empty($aVals['start_month']) && !empty($aVals['start_day']))
{
$iMakeNewTimeStamp = mktime(0, 0, 0, $aVals['start_month'], $aVals['start_day'], $aVals['start_year']);
if ($iMakeNewTimeStamp < $iNewTimeStampCheck)
{
$iNewTimeStamp = $iMakeNewTimeStamp;
$this->cache()->remove(array('timeline', Phpfox::getUserId()));
}
}
}
$aParentModuleName = explode('_', $sParentModuleName);
$aInsert = array(
'privacy' => (int) $iPrivacy,
'privacy_comment' => (int) $iPrivacyComment,
'type_id' => $sType,
'user_id' => ($iOwnerUserId === null ? Phpfox::getUserId() : (int) $iOwnerUserId),
'parent_user_id' => $iParentUserId,
'item_id' => $iItemId,
'time_stamp' => $iNewTimeStamp,
'parent_feed_id' => (int) $iParentFeedId,
'parent_module_id' => (Phpfox::isModule($aParentModuleName[0]) ? $this->database()->escape($sParentModuleName) : null)
);
if (empty($aInsert['parent_module_id']))
{
unset($aInsert['parent_module_id']);
}
if (defined('PHPFOX_APP_ID'))
{
$aInsert['app_id'] = PHPFOX_APP_ID;
}
//Plugin call
if (($sPlugin = Phpfox_Plugin::get('feed.service_process_add__end')))
{
eval($sPlugin);
}
if ($this->_bIsNewLoop)
{
$aInsert['feed_reference'] = (int)$bIsTag;
$this->database()->insert(Phpfox::getT('feed'), $aInsert);
}
else
{
$this->_iLastId = $this->database()->insert(Phpfox::getT(($this->_bIsCallback ? $this->_aCallback['table_prefix'] : '') . 'feed'), $aInsert);
}
if ($this->_bIsCallback && $this->_aCallback['module'] == 'pages' && !$this->_bIsNewLoop && $iParentUserId > 0)
{
$aUser = $this->database()->select('user_id')
->from(Phpfox::getT('user'))
->where('profile_page_id = ' . (int) $iParentUserId)
->execute('getSlaveRow');
if (isset($aUser['user_id']) && Phpfox::getUserId() == $aUser['user_id'])
{
$this->_bIsNewLoop = true;
$this->_bIsCallback = false;
$this->_aCallback = array();
$this->add($sType, $iItemId, $iPrivacy, $iPrivacyComment);
}
else
{
$this->_bIsNewLoop = true;
$this->_bIsCallback = false;
$this->_aCallback = array();
$this->add($sType, $iItemId, $iPrivacy, $iPrivacyComment, $iParentUserId, Phpfox::getUserId());
}
}
if ($sPlugin = Phpfox_Plugin::get('feed.service_process_add__end2'))
{
eval($sPlugin);
}
return $this->_iLastId;
}
public function update($sType, $iItemId, $iPrivacy = 0, $iPrivacyComment = 0)
{
$this->database()->update($this->_sTable, array(
'privacy' => (int) $iPrivacy,
'privacy_comment' => (int) $iPrivacyComment,
), 'type_id = '' . $this->database()->escape($sType) . '' AND item_id = ' . (int) $iItemId
);
return true;
}
/**
* Deletes an entry from the feeds
*
* @param string $sType module as defined in: type_id
* @param integer $iId numeric as defined in item_id
*/
public function delete($sType, $iId, $iUser = false)
{
$aFeeds = $this->database()->select('feed_id, user_id')
->from(Phpfox::getT(($this->_bIsCallback ? $this->_aCallback['table_prefix'] : '') . 'feed'))
->where('type_id = '' . $sType . '' AND item_id = ' . (int) $iId . ($iUser != false ? ' AND user_id = ' . (int)$iUser : ''))
->execute('getRows');
foreach ($aFeeds as $aFeed)
{
// $this->cache()->remove('feed_' . $aFeed['user_id'], 'substr');
if ($iUser != false)
{
$this->database()->delete(Phpfox::getT('feed'), 'feed_id = ' . $aFeed['feed_id']);
}
}
if ($iUser == false)
{
$this->database()->delete(Phpfox::getT('feed'), 'type_id = '' . $sType . '' AND item_id = ' . (int) $iId);
}
if ($sPlugin = Phpfox_Plugin::get('feed.service_process_delete__end'))
{
eval($sPlugin);
}
}
public function deleteChild($sType, $iId)
{
$this->database()->delete(Phpfox::getT('feed'), 'type_id = '' . $sType . '' AND child_item_id = ' . (int) $iId);
}
public function deleteFeed($iId, $sModule = null, $iItem = 0)
{
$aCallback = null;
if (!empty($sModule))
{
if (Phpfox::hasCallback($sModule, 'getFeedDetails'))
{
$aCallback = Phpfox::callback($sModule . '.getFeedDetails', $iItem);
}
}
$aFeed = Phpfox::getService('feed')->callback($aCallback)->getFeed($iId);
if (!isset($aFeed['feed_id']))
{
return false;
}
if ($sPlugin = Phpfox_Plugin::get('feed.service_process_deletefeed'))
{
eval($sPlugin);
}
$bCanDelete = false;
if (Phpfox::getUserParam('feed.can_delete_own_feed') && ($aFeed['user_id'] == Phpfox::getUserId()))
{
$bCanDelete = true;
}
if (defined('PHPFOX_FEED_CAN_DELETE'))
{
$bCanDelete = true;
}
if (Phpfox::getUserParam('feed.can_delete_other_feeds'))
{
$bCanDelete = true;
}
if ($bCanDelete === true)
{
if (isset($aCallback['table_prefix']))
{
$this->database()->delete(Phpfox::getT($aCallback['table_prefix'] . 'feed'), 'feed_id = ' . (int) $iId);
}
$this->database()->delete(Phpfox::getT('feed'), 'feed_id = ' . $aFeed['feed_id'] . ' AND user_id = ' . $aFeed['user_id'] .' AND time_stamp = ' . $aFeed['time_stamp']);
if (!empty($sModule))
{
if (Phpfox::hasCallback($sModule, 'deleteFeedItem'))
{
Phpfox::callback($sModule . '.deleteFeedItem', $iItem);
}
}
// $this->cache()->remove('feed_' . $aFeed['user_id'], 'substr');
return true;
}
return false;
}
public function addComment($aVals)
{
if (empty($aVals['privacy_comment']))
{
$aVals['privacy_comment'] = 0;
}
if (empty($aVals['privacy']))
{
$aVals['privacy'] = 0;
}
if (empty($aVals['parent_user_id']))
{
$aVals['parent_user_id'] = 0;
}
if (!Phpfox::getService('ban')->checkAutomaticBan($aVals['user_status']))
{
return false;
}
$sStatus = $this->preParse()->prepare($aVals['user_status']);
$iStatusId = $this->database()->insert(Phpfox::getT(($this->_bIsCallback ? $this->_aCallback['table_prefix'] : '') . 'feed_comment'), array(
'user_id' => (int) Phpfox::getUserId(),
'parent_user_id' => (int) $aVals['parent_user_id'],
'privacy' => $aVals['privacy'],
'privacy_comment' => $aVals['privacy_comment'],
'content' => $sStatus,
'time_stamp' => PHPFOX_TIME
)
);
if ($this->_bIsCallback)
{
if ($sPlugin = Phpfox_Plugin::get('feed.service_process_addcomment__1'))
{
eval($sPlugin);
}
$sLink = $this->_aCallback['link'] . 'comment-id_' . $iStatusId . '/';
if (!empty($this->_aCallback['notification']) && !Phpfox::getUserBy('profile_page_id'))
{
Phpfox::getLib('mail')->to($this->_aCallback['email_user_id'])
->subject($this->_aCallback['subject'])
->message(sprintf($this->_aCallback['message'], $sLink))
->send();
if (Phpfox::isModule('notification'))
{
Phpfox::getService('notification.process')->add($this->_aCallback['notification'], $iStatusId, $this->_aCallback['email_user_id']);
}
}
return Phpfox::getService('feed.process')->add($this->_aCallback['feed_id'], $iStatusId, $aVals['privacy'], $aVals['privacy_comment'], (int) $aVals['parent_user_id']);
}
$aUser = $this->database()->select('user_name')
->from(Phpfox::getT('user'))
->where('user_id = ' . (int) $aVals['parent_user_id'])
->execute('getRow');
$sLink = Phpfox::getLib('url')->makeUrl($aUser['user_name'], array('comment-id' => $iStatusId));
/* When a user is tagged it needs to add a special feed */
if (!isset($aVals['feed_reference']) || empty($aVals['feed_reference']))
{
Phpfox::getLib('mail')->to($aVals['parent_user_id'])
->subject(array('feed.full_name_wrote_a_comment_on_your_wall', array('full_name' => Phpfox::getUserBy('full_name'))))
->message(array('feed.full_name_wrote_a_comment_on_your_wall_message', array('full_name' => Phpfox::getUserBy('full_name'), 'link' => $sLink)))
->notification('comment.add_new_comment')
->send();
if (Phpfox::isModule('notification'))
{
Phpfox::getService('notification.process')->add('feed_comment_profile', $iStatusId, $aVals['parent_user_id']);
}
if (isset($aVals['feed_type']))
{
return Phpfox::getService('feed.process')->add($aVals['feed_type'], $iStatusId, $aVals['privacy'], $aVals['privacy_comment'], (int) $aVals['parent_user_id']);
}
}
else
{ // This is a special feed
// Send mail
return Phpfox::getService('feed.process')->add('feed_comment', $iStatusId, $aVals['privacy'], $aVals['privacy_comment'], (int) $aVals['parent_user_id'], null,$aVals['feed_reference']);
}
return Phpfox::getService('feed.process')->add('feed_comment', $iStatusId, $aVals['privacy'], $aVals['privacy_comment'], (int) $aVals['parent_user_id'], null, 0, (isset($aVals['parent_feed_id']) ? $aVals['parent_feed_id'] : 0), (isset($aVals['parent_module_id']) ? $aVals['parent_module_id'] : null));
}
public function getLastId()
{
return (int) $this->_iLastId;
}
/**
* If a call is made to an unknown method attempt to connect
* it to a specific plug-in with the same name thus allowing
* plug-in developers the ability to extend classes.
*
* @param string $sMethod is the name of the method
* @param array $aArguments is the array of arguments of being passed
*/
public function __call($sMethod, $aArguments)
{
$aDeprecated = array(
'approve',
'like',
'rate',
'updateCommentText',
'deleteLikes'
);
if (in_array($sMethod, $aDeprecated))
{
return Phpfox_Error::set('Method deprecated since 2.1.0beta1');
}
/**
* Check if such a plug-in exists and if it does call it.
*/
if ($sPlugin = Phpfox_Plugin::get('feed.service_process__call'))
{
return eval($sPlugin);
}
/**
* No method or plug-in found we must throw a error.
*/
Phpfox_Error::trigger('Call to undefined method ' . __CLASS__ . '::' . $sMethod . '()', E_USER_ERROR);
}
}
?>