Файл: base-sys/base/classes/content_provider.php
Строк: 544
<?php
class BASE_CLASS_ContentProvider
{
const ENTITY_TYPE_PROFILE = "user_join";
const ENTITY_TYPE_COMMENT = "comment";
const ENTITY_TYPE_AVATAR = "avatar-change";
/**
* Singleton instance.
*
* @var BASE_CLASS_ContentProvider
*/
private static $classInstance;
/**
* Returns an instance of class (singleton pattern implementation).
*
* @return BASE_CLASS_ContentProvider
*/
public static function getInstance()
{
if ( self::$classInstance === null )
{
self::$classInstance = new self();
}
return self::$classInstance;
}
private function __construct()
{
}
public function onCollectTypes( BASE_CLASS_EventCollector $event )
{
$mandatoryApprove = PEEP::getConfig()->getValue('base', 'mandatory_user_approve');
$event->add(array(
"pluginKey" => "base",
"authorizationGroup" => "base",
"group" => "profiles",
"entityType" => self::ENTITY_TYPE_PROFILE,
"groupLabel" => PEEP::getLanguage()->text("base", "content_profiles_label"),
"entityLabel" => PEEP::getLanguage()->text("base", "content_profile_label"),
"displayFormat" => "empty",
"moderation" => $mandatoryApprove
? array(BOL_ContentService::MODERATION_TOOL_FLAG, BOL_ContentService::MODERATION_TOOL_APPROVE)
: array(BOL_ContentService::MODERATION_TOOL_FLAG)
));
$event->add(array(
"pluginKey" => "base",
"authorizationGroup" => "base",
"group" => "comments",
"entityType" => self::ENTITY_TYPE_COMMENT,
"groupLabel" => PEEP::getLanguage()->text("base", "content_comments_label"),
"entityLabel" => PEEP::getLanguage()->text("base", "content_comment_label"),
"moderation" => array(BOL_ContentService::MODERATION_TOOL_FLAG)
));
$event->add(array(
"pluginKey" => "base",
"authorizationGroup" => "base",
"group" => "avatars",
"entityType" => self::ENTITY_TYPE_AVATAR,
"groupLabel" => PEEP::getLanguage()->text("base", "content_avatars_label"),
"entityLabel" => PEEP::getLanguage()->text("base", "content_avatar_label")
));
}
public function onGetInfo( PEEP_Event $event )
{
$params = $event->getParams();
$data = null;
switch ($params["entityType"])
{
case self::ENTITY_TYPE_PROFILE:
$data = $this->getProfileInfo($params["entityIds"]);
break;
case self::ENTITY_TYPE_COMMENT:
$data = $this->getCommentInfo($params["entityIds"]);
break;
case self::ENTITY_TYPE_AVATAR:
$data = $this->getAvatarInfo($params["entityIds"]);
break;
default:
return;
}
$event->setData($data);
return $data;
}
private function getAvatarInfo( $entityIds )
{
$out = array();
if ( empty($entityIds) )
{
return $out;
}
$avatarList = BOL_AvatarService::getInstance()->findAvatarByIdList($entityIds);
if ( empty($avatarList) )
{
return $out;
}
foreach ( $avatarList as $avatar )
{
$info = array();
$info["id"] = $avatar->id;
$info["userId"] = $avatar->userId;
$info["timeStamp"] = $avatar->hash;
$info["status"] = $avatar->status;
$fullSize = BOL_AvatarService::getInstance()->getAvatarUrl($avatar->userId, 3, $avatar->hash, true, false);
$info["image"] = array( "thumbnail" => BOL_AvatarService::getInstance()->getAvatarUrl($avatar->userId, 1, $avatar->hash, true, false),
"preview" => BOL_AvatarService::getInstance()->getAvatarUrl($avatar->userId, 2, $avatar->hash, true, false),
"view" => $fullSize,
"fullsize" => $fullSize );
$out[$avatar->id] = $info;
}
return $out;
}
private function getProfileInfo( $userIds )
{
foreach ( $userIds as $userId )
{
$user = BOL_UserService::getInstance()->findUserById($userId);
$info = array();
$info["id"] = $user->id;
$info["userId"] = $user->id;
$info["timeStamp"] = $user->joinStamp;
$info["joinIP"] = $user->joinIp;
$info["activityStamp"] = $user->activityStamp;
$info["email"] = $user->email;
$out[$userId] = $info;
}
return $out;
}
private function getCommentInfo( $commentIds )
{
$out = array();
$comments = BOL_CommentService::getInstance()->findCommentListByIds($commentIds);
foreach ( $comments as $comment )
{
$info = array();
$info["id"] = $comment->id;
$info["userId"] = $comment->userId;
$info["text"] = $comment->message;
$info["timeStamp"] = $comment->createStamp;
$info["image"] = array();
$attachment = empty($comment->attachment)
? null
: json_decode($comment->attachment, true);
if ( $attachment !== null )
{
if ( $attachment["type"] == "photo" )
{
$info["image"]["preview"] = $attachment["url"];
}
$info["image"]["thumbnail"] = empty($attachment["thumbnail_url"])
? null
: $attachment["thumbnail_url"];
$info["title"] = empty($attachment["title"]) ? null : $attachment["title"];
$info["description"] = empty($attachment["description"]) ? null : $attachment["description"];
$info["url"] = empty($attachment["url"]) ? null : $attachment["url"];
}
$commentEntity = BOL_CommentService::getInstance()->findCommentEntityById($comment->commentEntityId);
$contentInfo = BOL_ContentService::getInstance()->getContent($commentEntity->entityType, $commentEntity->entityId);
if ( !empty($contentInfo) )
{
$label = strtolower($contentInfo["label"]);
$contentEmbed = $contentInfo["url"]
? '<a href="' . $contentInfo["url"] . '">' . $label . '</a>'
: $label;
$info["label"] = PEEP::getLanguage()->text("base", "comment_content_label", array(
"content" => $contentEmbed
));
}
$out[$comment->id] = $info;
}
return $out;
}
public function onUpdateInfo( PEEP_Event $event )
{
$params = $event->getParams();
$data = $event->getData();
switch ($params["entityType"])
{
case self::ENTITY_TYPE_PROFILE:
$this->updateProfiles($data);
break;
case self::ENTITY_TYPE_COMMENT:
$data = $this->updateComments($data);
break;
case self::ENTITY_TYPE_AVATAR:
$this->updateAvatar($data);
break;
default:
return;
}
}
private function updateProfiles( $data )
{
foreach ( $data as $userId => $info )
{
$isApproved = BOL_UserService::getInstance()->isApproved($userId);
$isSuspended = BOL_UserService::getInstance()->isSuspended($userId);
if ( $info["status"] == BOL_ContentService::STATUS_ACTIVE && !$isApproved )
{
BOL_UserService::getInstance()->approve($userId);
BOL_UserService::getInstance()->sendApprovalNotification($userId);
}
if ( $info["status"] == BOL_ContentService::STATUS_APPROVAL && $isApproved )
{
BOL_UserService::getInstance()->disapprove($userId);
}
if ( $info["status"] == BOL_ContentService::STATUS_SUSPENDED && !$isSuspended )
{
BOL_UserService::getInstance()->disapprove($userId);
}
}
}
private function updateComments( $data )
{
foreach ( $data as $commentId => $info )
{
// TODO
}
}
private function updateAvatar( $data )
{
foreach ( $data as $avatarId => $info )
{
$avatar = BOL_AvatarService::getInstance()->findAvatarById($avatarId);
if ( $avatar->status != $info['status'] )
{
$avatar->status = $info['status'];
BOL_AvatarService::getInstance()->updateAvatar($avatar);
$params = array(
'avatarId' => $avatar->id,
'userId' => $avatar->userId,
'trackAction' => false,
'isModerable' => true
);
$event = new PEEP_Event('base.after_avatar_update', $params);
PEEP::getEventManager()->trigger($event);
}
}
}
public function onDelete( PEEP_Event $event )
{
$params = $event->getParams();
switch ($params["entityType"])
{
case self::ENTITY_TYPE_PROFILE:
$this->deleteProfiles($params["entityIds"]);
break;
case self::ENTITY_TYPE_COMMENT:
$this->deleteComments($params["entityIds"]);
break;
case self::ENTITY_TYPE_AVATAR:
$this->deleteAvatar($params["entityIds"]);
break;
default:
return;
}
}
public function deleteProfiles( $userIds )
{
foreach ( $userIds as $userId )
{
BOL_UserService::getInstance()->deleteUser($userId);
}
}
public function deleteComments( $commentIds )
{
BOL_CommentService::getInstance()->deleteCommentListByIds($commentIds);
}
private function deleteAvatar( $avatarIds )
{
foreach ( $avatarIds as $id )
{
BOL_AvatarService::getInstance()->deleteAvatarById($id);
}
}
public function onCommentAdd( PEEP_Event $event )
{
$params = $event->getParams();
$contentInfo = BOL_ContentService::getInstance()->getContent($params["entityType"], $params["entityId"]);
$label = strtolower($contentInfo["label"]);
PEEP::getEventManager()->trigger(new PEEP_Event(BOL_ContentService::EVENT_AFTER_ADD, array(
"entityType" => self::ENTITY_TYPE_COMMENT,
"entityId" => $params["commentId"]
), array(
"string" => array("key" => "base+comment_added_string", "vars" => array(
"content" => $contentInfo["url"]
? '<a href="' . $contentInfo["url"] . '">' . $label . '</a>'
: $label
))
)));
}
public function onUserJoin( PEEP_Event $event )
{
$params = $event->getParams();
$userId = $params["userId"];
PEEP::getEventManager()->trigger(new PEEP_Event(BOL_ContentService::EVENT_AFTER_ADD, array(
"entityType" => self::ENTITY_TYPE_PROFILE,
"entityId" => $userId
), array(
"string" => array('key' => 'base+feed_user_join')
)));
}
public function onUserDeleted( PEEP_Event $event )
{
$params = $event->getParams();
$userId = $params["userId"];
PEEP::getEventManager()->trigger(new PEEP_Event(BOL_ContentService::EVENT_BEFORE_DELETE, array(
"entityType" => self::ENTITY_TYPE_PROFILE,
"entityId" => $userId
)));
}
public function onUserApprove( PEEP_Event $event )
{
$params = $event->getParams();
$userId = $params["userId"];
PEEP::getEventManager()->trigger(new PEEP_Event("moderation.approve", array(
"entityType" => self::ENTITY_TYPE_PROFILE,
"entityId" => $userId
)));
}
public function onAvatarChange( PEEP_Event $event )
{
$params = $event->getParams();
$avatarId = $params["avatarId"];
if ( isset($params["isModerable"]) && $params["isModerable"] == false )
{
return;
}
PEEP::getEventManager()->trigger(new PEEP_Event(BOL_ContentService::EVENT_AFTER_CHANGE, array(
"entityType" => self::ENTITY_TYPE_AVATAR,
"entityId" => $avatarId
), array(
"string" => array("key" => "base+avatar_update_string")
)));
}
public function onAvatarDelete( PEEP_Event $event )
{
$params = $event->getParams();
$avatarId = $params["avatarId"];
PEEP::getEventManager()->trigger(new PEEP_Event(BOL_ContentService::EVENT_BEFORE_DELETE, array(
"entityType" => self::ENTITY_TYPE_AVATAR,
"entityId" => $avatarId
), array()));
}
public function init()
{
PEEP::getEventManager()->bind('base.after_avatar_update', array($this, "onAvatarChange"), 10000);
PEEP::getEventManager()->bind('base.before_user_avatar_delete', array($this, "onAvatarDelete"));
PEEP::getEventManager()->bind(PEEP_EventManager::ON_USER_APPROVE, array($this, "onUserApprove"));
PEEP::getEventManager()->bind(PEEP_EventManager::ON_USER_REGISTER, array($this, "onUserJoin"));
PEEP::getEventManager()->bind(PEEP_EventManager::ON_USER_UNREGISTER, array($this, "onUserDeleted"));
PEEP::getEventManager()->bind("base_add_comment", array($this, "onCommentAdd"));
PEEP::getEventManager()->bind(BOL_ContentService::EVENT_COLLECT_TYPES, array($this, "onCollectTypes"));
PEEP::getEventManager()->bind(BOL_ContentService::EVENT_GET_INFO, array($this, "onGetInfo"));
PEEP::getEventManager()->bind(BOL_ContentService::EVENT_UPDATE_INFO, array($this, "onUpdateInfo"));
PEEP::getEventManager()->bind(BOL_ContentService::EVENT_DELETE, array($this, "onDelete"));
}
}