Файл: plugins/searchsys/classes/event_handler.php
Строк: 1028
<?php
class SEARCHSYS_CLASS_EventHandler
{
/**
* Class instance
*
* @var SEARCHSYS_CLASS_EventHandler
*/
private static $classInstance;
/**
* Returns class instance
*
* @return SEARCHSYS_CLASS_EventHandler
*/
public static function getInstance()
{
if ( !isset(self::$classInstance) )
{
self::$classInstance = new self();
}
return self::$classInstance;
}
/**
* @param BASE_CLASS_ConsoleItemCollector $event
*/
public function addConsoleSearchCmp( BASE_CLASS_ConsoleItemCollector $event )
{
if ( !PEEP::getUser()->isAuthorized('searchsys', 'site_search') )
{
return;
}
if ( !PEEP::getConfig()->getValue('searchsys', 'site_search_enabled') )
{
return;
}
$cmp = new SEARCHSYS_CMP_SiteSearch();
$event->addItem($cmp, 1000);
}
/**
* @param $found
* @param $key
* @return array|null
*/
private function getAvatarsByFoundItems( $found, $key )
{
if ( !$found )
{
return null;
}
$userIdList = array();
foreach ( $found as $item )
{
if ( !in_array($item[$key], $userIdList) )
{
array_push($userIdList, $item[$key]);
}
}
$avatars = BOL_AvatarService::getInstance()->getDataForUserAvatars($userIdList);
return $avatars;
}
// Users
public function addUsersSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
$group = array(
'pluginKey' => 'base',
'key' => 'users',
'priority' => 1000,
'label' => PEEP::getLanguage()->text('base', 'users'),
'url' => PEEP::getRouter()->urlForRoute('users')
);
$ec->add($group);
}
public function searchUsersGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'users' )
{
$query = PEEP::getDbo()->escapeString('%' . $params['query'] . '%');
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$queryParts = BOL_UserDao::getInstance()->getUserQueryFilter("u", "id", array(
"method" => "SEARCHSYS_CLASS_EventHandler::searchUsersGroup"
));
$questionName = PEEP::getConfig()->getValue('base', 'display_name_question');
$realnameCond = $questionName == 'realname' ? "OR `name` = 'realname'" : '';
$questionsSql = "SELECT `name` FROM `". BOL_QuestionDao::getInstance()->getTableName() ."`
WHERE `type` = 'text' AND (`onSearch` = 1 $realnameCond )
ORDER BY `sortOrder` ASC";
$questions = PEEP::getDbo()->queryForColumnList($questionsSql);
switch ( $questionName )
{
case 'username':
if ( $questions )
{
$sql = "SELECT `u`.*, `qd`.`textValue` FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`
ON (`u`.`id` = `qd`.`userId` AND `qd`.`questionName` IN (" . PEEP::getDbo()->mergeInClause($questions) . ") ) " .
" WHERE " . $queryParts["where"] .
" AND ( `u`.`username` LIKE '" . $query . "' collate utf8_general_ci " .
" OR `qd`.`textValue` LIKE '" . $query . "' collate utf8_general_ci ) " .
" GROUP BY `u`.`id` " .
" ORDER BY `u`.`activityStamp` DESC
LIMIT :offset, :limit";
}
else
{
$sql = "SELECT `u`.* FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`" .
" WHERE " . $queryParts["where"] .
" AND ( `u`.`username` LIKE '" . $query . "' collate utf8_general_ci ) " .
"ORDER BY `u`.`activityStamp` DESC
LIMIT :offset, :limit";
}
break;
case 'realname':
$sql = "SELECT `u`.*, `qd`.`textValue` FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`
ON (`u`.`id` = `qd`.`userId` AND `qd`.`questionName` IN (" . PEEP::getDbo()->mergeInClause($questions) . ") ) " .
" WHERE " . $queryParts["where"] .
" AND ( `qd`.`textValue` LIKE '" . $query . "' collate utf8_general_ci ) " .
" GROUP BY `u`.`id` " .
"ORDER BY `u`.`activityStamp` DESC
LIMIT :offset, :limit";
break;
}
$found = PEEP::getDbo()->queryForList($sql, array('offset' => $offset, 'limit' => $limit));
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'id');
foreach ( $found as $item )
{
$data = array(
'id' => $key . '_' . $item['id'],
'url' => !empty($avatars[$item['id']]) ? $avatars[$item['id']]['url'] : null,
'avatar' => !empty($avatars[$item['id']]) ? $avatars[$item['id']] : $defAvatar,
'text' => !empty($avatars[$item['id']]) ? $avatars[$item['id']]['title'] : null,
'info' => !empty($item['textValue']) ? $item['textValue'] : ''
);
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countUsersGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'users' )
{
$query = PEEP::getDbo()->escapeString('%' . $params['query'] . '%');
$queryParts = BOL_UserDao::getInstance()->getUserQueryFilter("u", "id", array(
"method" => "SEARCHSYS_CLASS_EventHandler::searchUsersGroup"
));
$questionName = PEEP::getConfig()->getValue('base', 'display_name_question');
$realnameCond = $questionName == 'realname' ? "OR `name` = 'realname'" : '';
$questionsSql = "SELECT `name` FROM `". BOL_QuestionDao::getInstance()->getTableName() ."`
WHERE `type` = 'text' AND (`onSearch` = 1 $realnameCond )
ORDER BY `sortOrder` ASC";
$questions = PEEP::getDbo()->queryForColumnList($questionsSql);
switch ( $questionName )
{
case 'username':
if ( $questions )
{
$sql = "SELECT COUNT(DISTINCT(`u`.`id`)) FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`
ON (`u`.`id` = `qd`.`userId` AND `qd`.`questionName` IN (" . PEEP::getDbo()->mergeInClause($questions) . ") ) " .
" WHERE " . $queryParts["where"] .
" AND ( `u`.`username` LIKE '" . $query . "' collate utf8_general_ci " .
" OR `qd`.`textValue` LIKE '" . $query . "' collate utf8_general_ci )";
}
else
{
$sql = "SELECT COUNT(DISTINCT(`u`.`id`)) FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`" .
" WHERE " . $queryParts["where"] .
" AND ( `u`.`username` LIKE '" . $query . "' collate utf8_general_ci ) ";
}
break;
case 'realname':
$sql = "SELECT COUNT(DISTINCT(`u`.`id`)) FROM `" . BOL_UserDao::getInstance()->getTableName() . "` AS `u` " .
$queryParts["join"] .
"LEFT JOIN `" . BOL_QuestionDataDao::getInstance()->getTableName() . "` AS `qd`
ON (`u`.`id` = `qd`.`userId` AND `qd`.`questionName` IN (" . PEEP::getDbo()->mergeInClause($questions) . ") ) " .
" WHERE " . $queryParts["where"] .
" AND ( `qd`.`textValue` LIKE '" . $query . "' collate utf8_general_ci ) ";
break;
}
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => $query));
$result[$key] = $count;
$ec->add($result);
}
}
// Stories
public function addStoriesSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('stories') )
{
$group = array(
'pluginKey' => 'stories',
'key' => 'stories',
'priority' => 90,
'label' => PEEP::getLanguage()->text('stories', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('stories')
);
$ec->add($group);
}
}
public function searchStoriesGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'stories' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$storyDao = PostDao::getInstance();
$sql =
"SELECT * FROM `" . $storyDao->getTableName() . "`
WHERE `privacy` = 'everybody' AND `isDraft` = 0 AND (`title` LIKE :query collate utf8_general_ci OR `post` LIKE :query collate utf8_general_ci)
ORDER BY `timestamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'authorId');
foreach ( $found as $item )
{
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('post', array('id' => $item['id'])),
'avatar' => !empty($avatars[$item['authorId']]) ? $avatars[$item['authorId']] : $defAvatar,
'text' => $item['title'],
'info' => $item['post']
);
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countStoriesGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'stories' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$storyDao = PostDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $storyDao->getTableName() . "`
WHERE `privacy` = 'everybody' AND `isDraft` = 0 AND (`title` LIKE :query collate utf8_general_ci OR `post` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Forum
public function addForumSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('forum') )
{
$group = array(
'pluginKey' => 'forum',
'key' => 'forum',
'priority' => 80,
'label' => PEEP::getLanguage()->text('forum', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('forum-default')
);
$ec->add($group);
}
}
public function searchForumGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'forum' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = PEEP::getDbo()->escapeString('%' . $params['query'] . '%');
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$forumService = FORUM_BOL_ForumService::getInstance();
$router = PEEP::getRouter();
if ( PEEP::getUser()->isAuthorized('forum') )
{
$excludeGroupIdList = array();
}
else
{
$excludeGroupIdList = $forumService->getPrivateUnavailableGroupIdList(PEEP::getUser()->getId());
}
$excludeCond = $excludeGroupIdList ? " AND `t`.`groupId` NOT IN (".PEEP::getDbo()->mergeInClause($excludeGroupIdList).") " : "";
$sql = "SELECT `p`.*, `t`.`title`
FROM `".FORUM_BOL_TopicDao::getInstance()->getTableName()."` AS `t`
INNER JOIN `".FORUM_BOL_PostDao::getInstance()->getTableName()."` AS `p` ON(`p`.`topicId` = `t`.`id`)
WHERE `t`.`status` = 'approved' $excludeCond
AND (`t`.`title` LIKE '" . $query . "' collate utf8_general_ci OR `p`.`text` LIKE '" . $query . "' collate utf8_general_ci)
ORDER BY `p`.`createStamp` DESC
LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('offset' => $offset, 'limit' => $limit));
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'userId');
foreach ( $found as $item )
{
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('topic-default', array('topicId' => $item['topicId'])),
'avatar' => !empty($avatars[$item['userId']]) ? $avatars[$item['userId']] : $defAvatar,
'text' => $item['title'],
'info' => $item['text']
);
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countForumGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'forum' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = PEEP::getDbo()->escapeString('%' . $params['query'] . '%');
$forumService = FORUM_BOL_ForumService::getInstance();
if ( PEEP::getUser()->isAuthorized('forum') )
{
$excludeGroupIdList = array();
}
else
{
$excludeGroupIdList = $forumService->getPrivateUnavailableGroupIdList(PEEP::getUser()->getId());
}
$excludeCond = $excludeGroupIdList ? " AND `t`.`groupId` NOT IN (".PEEP::getDbo()->mergeInClause($excludeGroupIdList).") " : "";
$sql = "SELECT COUNT(`p`.`id`)
FROM `".FORUM_BOL_TopicDao::getInstance()->getTableName()."` AS `t`
INNER JOIN `".FORUM_BOL_PostDao::getInstance()->getTableName()."` AS `p` ON(`p`.`topicId` = `t`.`id`)
WHERE `t`.`status` = 'approved' $excludeCond
AND (`t`.`title` LIKE '" . $query . "' collate utf8_general_ci OR `p`.`text` LIKE '" . $query . "' collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql);
$result[$key] = $count;
$ec->add($result);
}
}
// Event
public function addEventSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('event') )
{
$group = array(
'pluginKey' => 'event',
'key' => 'event',
'priority' => 60,
'label' => PEEP::getLanguage()->text('event', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('event.main_menu_route')
);
$ec->add($group);
}
}
public function searchEventGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'event' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$eventDao = EVENT_BOL_EventDao::getInstance();
$sql =
"SELECT * FROM `" . $eventDao->getTableName() . "`
WHERE `whoCanView` = 1 AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `createTimeStamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$eventService = EVENT_BOL_EventService::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$avatar = $item['image'] ? $eventService->generateImageUrl($item['image'], true) : $eventService->generateDefaultImageUrl();
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('event.view', array('eventId' => $item['id'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['title'];
$data['info'] = $item['description'] ? $item['description'] : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countEventGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'event' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$eventDao = EVENT_BOL_EventDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $eventDao->getTableName() . "`
WHERE `whoCanView` = 1 AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Groups
public function addGroupsSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('groups') )
{
$group = array(
'pluginKey' => 'groups',
'key' => 'groups',
'priority' => 50,
'label' => PEEP::getLanguage()->text('groups', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('groups-index')
);
$ec->add($group);
}
}
public function searchGroupsGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'groups' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$groupsDao = GROUPS_BOL_GroupDao::getInstance();
$sql =
"SELECT * FROM `" . $groupsDao->getTableName() . "`
WHERE `whoCanView` = 'anyone' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `timeStamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForObjectList(
$sql,
$groupsDao->getDtoClassName(),
array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit)
);
$router = PEEP::getRouter();
$groupService = GROUPS_BOL_Service::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$data = array(
'id' => $key . '_' . $item->id,
'url' => $router->urlForRoute('groups-view', array('groupId' => $item->id))
);
$data['avatar'] = array('src' => $groupService->getGroupImageUrl($item), 'url' => $data['url']);
$data['text'] = $item->title;
$data['info'] = $item->description ? $item->description : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countGroupsGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'groups' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$groupsDao = GROUPS_BOL_GroupDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $groupsDao->getTableName() . "`
WHERE `whoCanView` = 'anyone' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Video
public function addVideoSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('video') )
{
$group = array(
'pluginKey' => 'video',
'key' => 'video',
'priority' => 80,
'label' => PEEP::getLanguage()->text('video', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('video_list_index')
);
$ec->add($group);
}
}
public function searchVideoGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'video' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$videoDao = VIDEO_BOL_ClipDao::getInstance();
$sql =
"SELECT * FROM `" . $videoDao->getTableName() . "`
WHERE status = 'approved' AND `privacy` = 'everybody' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `addDatetime` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForObjectList(
$sql,
$videoDao->getDtoClassName(),
array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit)
);
$router = PEEP::getRouter();
$videoService = VIDEO_BOL_ClipService::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$data = array(
'id' => $key . '_' . $item->id,
'url' => $router->urlForRoute('view_clip', array('id' => $item->id))
);
$thumb = $videoService->getClipThumbUrl($item->id, $item->code, $item->thumbUrl);
if ( $thumb == 'undefined' )
{
$thumb = $videoService->getClipDefaultThumbUrl();
}
$data['avatar'] = array('src' => $thumb, 'url' => $data['url']);
$data['text'] = $item->title;
$data['info'] = $item->description ? $item->description : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countVideoGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'video' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$videoDao = VIDEO_BOL_ClipDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $videoDao->getTableName() . "`
WHERE `status` = 'approved' AND `privacy` = 'everybody' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Photo
public function addPhotoSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('photo') )
{
$group = array(
'pluginKey' => 'photo',
'key' => 'photo',
'priority' => 70,
'label' => PEEP::getLanguage()->text('photo', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('view_photo_list')
);
$ec->add($group);
}
}
public function searchPhotoGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'photo' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$photoDao = PHOTO_BOL_PhotoDao::getInstance();
$sql =
"SELECT * FROM `" . $photoDao->getTableName() . "`
WHERE status = 'approved' AND `privacy` = 'everybody' AND `description` LIKE :query collate utf8_general_ci
ORDER BY `addDatetime` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForObjectList(
$sql,
$photoDao->getDtoClassName(),
array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit)
);
$router = PEEP::getRouter();
$photoService = PHOTO_BOL_PhotoService::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$data = array();
$data['id'] = $key . '_' . $item->id;
$data['url'] = $router->urlForRoute('view_photo', array('id' => $item->id));
$data['avatar'] = array('src' => $photoService->getPhotoPreviewUrl($item->id, $item->hash), 'url' => $data['url']);
$data['text'] = UTIL_String::truncate($item->description, 30);
$data['info'] = '';
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countPhotoGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'photo' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$photoDao = PHOTO_BOL_PhotoDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $photoDao->getTableName() . "`
WHERE status = 'approved' AND `privacy` = 'everybody' AND `description` LIKE :query collate utf8_general_ci";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Links
public function addLinksSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('links') )
{
$group = array(
'pluginKey' => 'links',
'key' => 'links',
'priority' => 30,
'label' => PEEP::getLanguage()->text('links', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('links')
);
$ec->add($group);
}
}
public function searchLinksGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'links' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$linksDao = LinkDao::getInstance();
$sql =
"SELECT * FROM `" . $linksDao->getTableName() . "`
WHERE `privacy` = 'everybody' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `timestamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'userId');
foreach ( $found as $item )
{
$data = array();
$data['id'] = $key . '_' . $item['id'];
$data['url'] = $router->urlForRoute('link', array('id' => $item['id']));
$data['avatar'] = !empty($avatars[$item['userId']]) ? $avatars[$item['userId']] : $defAvatar;
$data['text'] = $item['title'];
$data['info'] = $item['description'] ? $item['description'] : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countLinksGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'links' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$linksDao = LinkDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $linksDao->getTableName() . "`
WHERE `privacy` = 'everybody' AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// ShopPro
public function addShopProSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('shoppro') )
{
$group = array(
'pluginKey' => 'shoppro',
'key' => 'shoppro',
'priority' => 50,
'label' => PEEP::getLanguage()->text('shoppro', 'main_menu_item'),
'url' => PEEP::getRouter()->urlForRoute('shoppro.index')
);
$ec->add($group);
}
}
public function searchShopProGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'shoppro' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$sql = "SELECT * FROM `" . PEEP_DB_PREFIX . "shoppro_products` WHERE `active` = '1'
AND `name` LIKE :query collate utf8_general_ci
ORDER BY `date_add` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList(
$sql,
array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit)
);
$list = array();
$url = PEEP::getPluginManager()->getPlugin('shoppro')->getUserFilesUrl();
if ( $found )
{
foreach ( $found as $item )
{
$data = array();
$data['id'] = $key . '_' . $item['id'];
$data['url'] = PEEP_URL_HOME . "product/".$item['id']."/zoom/index.html";
$data['avatar'] = array('src' => $url . "images/product_".$item['id'].".jpg", 'url' => $data['url']);
$data['text'] = $item['name'];
$data['info'] = $item['description'] ? UTIL_String::truncate($item['description'], 30) : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countShopProGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'shoppro' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$sql =
"SELECT COUNT(*) FROM `" . PEEP_DB_PREFIX . "shoppro_products` WHERE `active` = '1'
AND `name` LIKE :query collate utf8_general_ci";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Events Extended
public function addEventXSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('eventx') )
{
$group = array(
'pluginKey' => 'eventx',
'key' => 'eventx',
'priority' => 60,
'label' => PEEP::getLanguage()->text('eventx', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('eventx.main_menu_route')
);
$ec->add($group);
}
}
public function searchEventXGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'eventx' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$eventXDao = EVENTX_BOL_EventDao::getInstance();
$sql =
"SELECT * FROM `" . $eventXDao->getTableName() . "`
WHERE `whoCanView` = 1 AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `createTimeStamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$eventXService = EVENTX_BOL_EventService::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$avatar = $item['image'] ? $eventXService->generateImageUrl($item['image'], true) : $eventXService->generateDefaultImageUrl();
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('eventx.view', array('eventId' => $item['id'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['title'];
$data['info'] = $item['description'] ? $item['description'] : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countEventXGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'eventx' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$eventXDao = EVENTX_BOL_EventDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $eventXDao->getTableName() . "`
WHERE `whoCanView` = 1 AND (`title` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Games
public function addGamesSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('mochigames') )
{
$group = array(
'pluginKey' => 'mochigames',
'key' => 'mochigames',
'priority' => 60,
'label' => PEEP::getLanguage()->text('mochigames', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('mochigames')
);
$ec->add($group);
}
}
public function searchGamesGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'mochigames' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$gamesDao = MOCHIGAMES_BOL_MochigamesDao::getInstance();
$sql =
"SELECT * FROM `" . $gamesDao->getTableName() . "`
WHERE `is_enabled` = 1 AND (`name` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `timestamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$gamesService = MOCHIGAMES_BOL_Service::getInstance();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$avatar = !empty($item['thumbnail_url']) ? $item['thumbnail_url'] : $gamesService->getDefaultThumbnailUrl();
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('mochigames-game', array('slug' => $item['slug'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['name'];
$data['info'] = $item['description'] ? $item['description'] : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countGamesGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'mochigames' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$gamesDao = MOCHIGAMES_BOL_MochigamesDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $gamesDao->getTableName() . "`
WHERE `is_enabled` = 1 AND (`name` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Questions
public function addQuestionsSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('questions') )
{
$group = array(
'pluginKey' => 'questions',
'key' => 'questions',
'priority' => 60,
'label' => PEEP::getLanguage()->text('questions', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('questions-index')
);
$ec->add($group);
}
}
public function searchQuestionsGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'questions' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$qDao = QUESTIONS_BOL_QuestionDao::getInstance();
$sql =
"SELECT * FROM `" . $qDao->getTableName() . "`
WHERE `text` LIKE :query collate utf8_general_ci
ORDER BY `timeStamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'userId');
foreach ( $found as $item )
{
$avatar = !empty($avatars[$item['userId']]) ? $avatars[$item['userId']]['src'] : $defAvatar;
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('questions-question', array('qid' => $item['id'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['text'];
$data['info'] = '';
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countQuestionsGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'questions' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$qDao = QUESTIONS_BOL_OptionDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $qDao->getTableName() . "`
WHERE `text` LIKE :query collate utf8_general_ci";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// Extended Questions
public function addEQuestionsSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('equestions') )
{
$group = array(
'pluginKey' => 'equestions',
'key' => 'equestions',
'priority' => 60,
'label' => PEEP::getLanguage()->text('equestions', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('equestions-index')
);
$ec->add($group);
}
}
public function searchEQuestionsGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'equestions' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$qDao = EQUESTIONS_BOL_QuestionDao::getInstance();
$sql =
"SELECT * FROM `" . $qDao->getTableName() . "`
WHERE `text` LIKE :query collate utf8_general_ci
ORDER BY `timeStamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$list = array();
if ( $found )
{
$defAvatar = BOL_AvatarService::getInstance()->getDefaultAvatarUrl();
$avatars = $this->getAvatarsByFoundItems($found, 'userId');
foreach ( $found as $item )
{
$avatar = !empty($avatars[$item['userId']]) ? $avatars[$item['userId']]['src'] : $defAvatar;
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('equestions-question', array('qid' => $item['id'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['text'];
$data['info'] = '';
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countEQuestionsGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'equestions' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$qDao = EQUESTIONS_BOL_OptionDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $qDao->getTableName() . "`
WHERE `text` LIKE :query collate utf8_general_ci";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
// IClassifieds
public function addIClassifiedsSearchResultGroup( BASE_CLASS_EventCollector $ec )
{
if ( PEEP::getPluginManager()->isPluginActive('iclassifieds') )
{
$group = array(
'pluginKey' => 'iclassifieds',
'key' => 'iclassifieds',
'priority' => 60,
'label' => PEEP::getLanguage()->text('iclassifieds', 'auth_group_label'),
'url' => PEEP::getRouter()->urlForRoute('iclassifieds_view_index')
);
$ec->add($group);
}
}
public function searchIClassifiedsGroup( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'iclassifieds' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$offset = (int) $params['offset'];
$limit = (int) $params['limit'];
$cDao = ICLASSIFIEDS_BOL_ItemDao::getInstance();
$sql =
"SELECT * FROM `" . $cDao->getTableName() . "`
WHERE status = 'approved' AND privacy = 'everybody' AND (expiry >= NOW() OR expiry = '0000-00-00')
AND (`name` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)
ORDER BY `timestamp` DESC LIMIT :offset, :limit";
$found = PEEP::getDbo()->queryForList($sql, array('query' => '%'.$query.'%', 'offset' => $offset, 'limit' => $limit));
$router = PEEP::getRouter();
$list = array();
if ( $found )
{
foreach ( $found as $item )
{
$avatar = ICLASSIFIEDS_BOL_ItemImageService::getInstance()->getItemMainPreviewImage($item['id']);
$data = array(
'id' => $key . '_' . $item['id'],
'url' => $router->urlForRoute('iclassifieds_view_item', array('id' => $item['id'])),
);
$data['avatar'] = array('src' => $avatar, 'url' => $data['url']);
$data['text'] = $item['name'];
$data['info'] = $item['description'] ? UTIL_HtmlTag::stripTags($item['description']) : "";
$list[$data['id']] = $data;
}
}
$result[$key] = $list;
$ec->add($result);
}
}
public function countIClassifiedsGroupResult( BASE_CLASS_EventCollector $ec )
{
$params = $ec->getParams();
$key = $params['key'];
if ( $key == 'iclassifieds' && PEEP::getPluginManager()->isPluginActive($key) )
{
$query = $params['query'];
$cDao = ICLASSIFIEDS_BOL_ItemDao::getInstance();
$sql =
"SELECT COUNT(*) FROM `" . $cDao->getTableName() . "`
WHERE status = 'approved' AND privacy = 'everybody' AND (expiry >= NOW() OR expiry = '0000-00-00')
AND (`name` LIKE :query collate utf8_general_ci OR `description` LIKE :query collate utf8_general_ci)";
$count = PEEP::getDbo()->queryForColumn($sql, array('query' => '%'.$query.'%'));
$result[$key] = $count;
$ec->add($result);
}
}
public function init()
{
$em = PEEP::getEventManager();
// add component to console
$em->bind('console.collect_items', array($this, 'addConsoleSearchCmp'));
// add searchable groups
$em->bind('searchsys.collect_group', array($this, 'addUsersSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addStoriesSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addForumSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addEventSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addGroupsSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addVideoSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addPhotoSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addLinksSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addShopProSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addEventXSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addGamesSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addQuestionsSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addEQuestionsSearchResultGroup'));
$em->bind('searchsys.collect_group', array($this, 'addIClassifiedsSearchResultGroup'));
// perform search in each group
$em->bind('searchsys.search_in_groups', array($this, 'searchUsersGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchStoriesGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchForumGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchEventGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchGroupsGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchVideoGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchPhotoGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchLinksGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchShopProGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchEventXGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchGamesGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchQuestionsGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchEQuestionsGroup'));
$em->bind('searchsys.search_in_groups', array($this, 'searchIClassifiedsGroup'));
// count search results
$em->bind('searchsys.count_search_result', array($this, 'countUsersGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countStoriesGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countForumGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countEventGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countGroupsGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countVideoGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countPhotoGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countLinksGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countShopProGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countEventXGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countGamesGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countQuestionsGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countEQuestionsGroupResult'));
$em->bind('searchsys.count_search_result', array($this, 'countIClassifiedsGroupResult'));
}
}