* @license http://opensource.org/licenses/mit-license.php MIT license
*/
if (!defined('IN_MYBB')) {
die('Direct initialization of this file is not allowed.
Please make sure IN_MYBB is defined.');
}
defined(
'MYBBSTUFF_CORE_PATH'
) or define('MYBBSTUFF_CORE_PATH', MYBB_ROOT . 'inc/plugins/MybbStuff/Core/');
define('MYALERTS_PLUGIN_PATH', MYBB_ROOT . 'inc/plugins/MybbStuff/MyAlerts');
defined(
'PLUGINLIBRARY'
) or define('PLUGINLIBRARY', MYBB_ROOT . 'inc/plugins/pluginlibrary.php');
require_once MYBBSTUFF_CORE_PATH . 'ClassLoader.php';
$classLoader = new MybbStuff_Core_ClassLoader();
$classLoader->registerNamespace(
'MybbStuff_MyAlerts',
array(MYALERTS_PLUGIN_PATH . '/src')
);
$classLoader->register();
function myalerts_info()
{
return array(
'name' => 'MyAlerts',
'description' => 'A simple notifications/alerts system for MyBB.',
'website' => 'http://mybbstuff.com/myalerts',
'author' => 'Euan T',
'authorsite' => 'http://euantor.com',
'version' => '2.0.4',
'compatibility' => '18*',
'codename' => 'mybbstuff_myalerts',
);
}
function myalerts_install()
{
global $db, $cache, $plugins;
$plugin_info = myalerts_info();
$euantor_plugins = $cache->read('euantor_plugins');
if (empty($euantor_plugins)) {
$euantor_plugins = array();
}
$euantor_plugins['myalerts'] = array(
'title' => 'MyAlerts',
'version' => $plugin_info['version'],
);
$cache->update('euantor_plugins', $euantor_plugins);
$collation = $db->build_create_table_collation();
if (!$db->table_exists('alerts')) {
switch ($db->type) {
case 'pgsql':
$db->write_query(
"CREATE TABLE " . TABLE_PREFIX . "alerts(
id serial,
uid int NOT NULL,
unread smallint NOT NULL DEFAULT '1',
dateline timestamp NOT NULL,
alert_type_id int NOT NULL,
object_id int NOT NULL DEFAULT '0',
from_user_id int DEFAULT NULL,
forced smallint NOT NULL DEFAULT '0',
extra_details text,
PRIMARY KEY (id)
);"
);
$db->write_query("CREATE INDEX uid_index ON " . TABLE_PREFIX . "alerts (uid);");
break;
default:
$db->write_query(
"CREATE TABLE " . TABLE_PREFIX . "alerts(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(10) unsigned NOT NULL,
`unread` tinyint(4) NOT NULL DEFAULT '1',
`dateline` datetime NOT NULL,
`alert_type_id` int(10) unsigned NOT NULL,
`object_id` int(10) unsigned NOT NULL DEFAULT '0',
`from_user_id` int(10) unsigned DEFAULT NULL,
`forced` int(1) NOT NULL DEFAULT '0',
`extra_details` text,
PRIMARY KEY (`id`),
KEY `uid_index` (`uid`)
) ENGINE=MyISAM{$collation};"
);
break;
}
}
if (!$db->table_exists('alert_types')) {
switch ($db->type) {
case 'pgsql':
$db->write_query(
"CREATE TABLE " . TABLE_PREFIX . "alert_types(
id serial,
code varchar(100) NOT NULL DEFAULT '' UNIQUE,
enabled smallint NOT NULL DEFAULT '1',
can_be_user_disabled smallint NOT NULL DEFAULT '1',
PRIMARY KEY (id)
);"
);
break;
default:
$db->write_query(
"CREATE TABLE " . TABLE_PREFIX . "alert_types(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`code` varchar(100) NOT NULL DEFAULT '',
`enabled` tinyint(4) NOT NULL DEFAULT '1',
`can_be_user_disabled` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_code` (`code`)
) ENGINE=MyISAM{$collation};"
);
break;
}
}
if (!$db->field_exists('myalerts_disabled_alert_types', 'users')) {
$db->add_column(
'users',
'myalerts_disabled_alert_types',
'TEXT'
);
}
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::createInstance(
$db,
$cache
);
$insertArray = array(
'rep',
'pm',
'buddylist',
'quoted',
'post_threadauthor',
'subscribed_thread',
'rated_threadauthor',
'voted_threadauthor'
);
$alertTypesToAdd = array();
foreach ($insertArray as $type) {
$alertType = new MybbStuff_MyAlerts_Entity_AlertType();
$alertType->setCode($type);
$alertType->setEnabled(true);
$alertType->setCanBeUserDisabled(true);
$alertTypesToAdd[] = $alertType;
}
$alertTypeManager->addTypes($alertTypesToAdd);
$plugins->run_hooks('myalerts_install');
}
function myalerts_is_installed()
{
global $db;
return $db->table_exists('alerts');
}
function myalerts_uninstall()
{
global $db, $lang, $cache, $PL, $plugins;
if (!file_exists(PLUGINLIBRARY)) {
flash_message($lang->myalerts_pluginlibrary_missing, 'error');
admin_redirect('index.php?module=config-plugins');
}
$PL or require_once PLUGINLIBRARY;
$plugins->run_hooks('myalerts_uninstall');
if ($db->table_exists('alerts')) {
$db->drop_table('alerts');
}
if ($db->table_exists('alert_types')) {
$db->drop_table('alert_types');
}
if ($db->field_exists('myalerts_disabled_alert_types', 'users')) {
$db->drop_column('users', 'myalerts_disabled_alert_types');
}
$PL->settings_delete('myalerts', true);
$PL->templates_delete('myalerts');
$PL->stylesheet_delete('alerts.css');
$db->delete_query('tasks', 'file = \'myalerts\'');
$cache->delete('mybbstuff_myalerts_alert_types');
}
function myalerts_activate()
{
global $db, $lang, $PL, $plugins, $cache;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
if (!file_exists(PLUGINLIBRARY)) {
flash_message($lang->myalerts_pluginlibrary_missing, 'error');
admin_redirect('index.php?module=config-plugins');
}
$PL or require_once PLUGINLIBRARY;
if ($PL->version < 9) {
flash_message('This plugin requires PluginLibrary 9 or newer', 'error');
admin_redirect('index.php?module=config-plugins');
}
$plugin_info = myalerts_info();
$euantorPlugins = $cache->read('euantor_plugins');
if (!empty($euantorPlugins) && isset($euantorPlugins['myalerts'])) {
$oldVersion = $euantorPlugins['myalerts'];
if ($oldVersion['version'] == '1.05') {
myalerts_upgrade_105_200();
}
}
$euantorPlugins['myalerts'] = array(
'title' => 'MyAlerts',
'version' => $plugin_info['version'],
);
$cache->update('euantor_plugins', $euantorPlugins);
$PL->settings(
'myalerts',
$lang->setting_group_myalerts,
$lang->setting_group_myalerts_desc,
array(
'perpage' => array(
'title' => $lang->setting_myalerts_perpage,
'description' => $lang->setting_myalerts_perpage_desc,
'value' => '10',
'optionscode' => 'text',
),
'dropdown_limit' => array(
'title' => $lang->setting_myalerts_dropdown_limit,
'description' => $lang->setting_myalerts_dropdown_limit_desc,
'value' => '5',
'optionscode' => 'text',
),
'autorefresh' => array(
'title' => $lang->setting_myalerts_autorefresh,
'description' => $lang->setting_myalerts_autorefresh_desc,
'value' => '0',
'optionscode' => 'text',
),
'avatar_size' => array(
'title' => $lang->setting_myalerts_avatar_size,
'description' => $lang->setting_myalerts_avatar_size_desc,
'value' => '64|64',
'optionscode' => 'text',
),
)
);
$dir = new DirectoryIterator(MYALERTS_PLUGIN_PATH . '/templates');
$templates = array();
foreach ($dir as $file) {
if (!$file->isDot() && !$file->isDir() && pathinfo(
$file->getPathname(),
PATHINFO_EXTENSION
) === 'html'
) {
$templateName = $file->getPathname();
$templateName = basename($templateName, '.html');
$templates[$templateName] = file_get_contents($file->getPathname());
}
}
$PL->templates(
'myalerts',
'MyAlerts',
$templates
);
$stylesheet = file_get_contents(
MYALERTS_PLUGIN_PATH . '/stylesheets/alerts.css'
);
$PL->stylesheet('alerts.css', $stylesheet);
// Attach usercp.css to alerts.php
$query = $db->simple_select(
'themestylesheets',
'sid,attachedto,tid',
"name = 'usercp.css'"
);
while ($userCpStylesheet = $db->fetch_array($query)) {
$sid = (int) $userCpStylesheet['sid'];
$db->update_query(
'themestylesheets',
array(
'attachedto' => $db->escape_string(
$userCpStylesheet['attachedto'] . '|alerts.php'
),
),
"sid = {$sid}"
);
update_theme_stylesheet_list((int) $userCpStylesheet['tid']);
}
require_once MYBB_ROOT . '/inc/adminfunctions_templates.php';
find_replace_templatesets('headerinclude', '/$/', '{$myalerts_js}');
find_replace_templatesets(
'header_welcomeblock_member',
"#" . preg_quote('{$modcplink}') . "#i",
'{$myalerts_headericon}{$modcplink}'
);
find_replace_templatesets(
'footer',
'/$/',
'{$myalerts_modal}'
);
$taskExists = $db->simple_select(
'tasks',
'tid',
'file = \'myalerts\'',
array('limit' => '1')
);
if ($db->num_rows($taskExists) == 0) {
require_once MYBB_ROOT . '/inc/functions_task.php';
$myTask = array(
'title' => $lang->myalerts_task_title,
'file' => 'myalerts',
'description' => $lang->myalerts_task_description,
'minute' => 0,
'hour' => 1,
'day' => '*',
'weekday' => 1,
'month' => '*',
'nextrun' => TIME_NOW + 3600,
'lastrun' => 0,
'enabled' => 1,
'logging' => 1,
'locked' => 0,
);
$task_id = $db->insert_query('tasks', $myTask);
$theTask = $db->fetch_array(
$db->simple_select('tasks', '*', 'tid = ' . (int) $task_id, 1)
);
$nextrun = fetch_next_run($theTask);
$db->update_query(
'tasks',
'nextrun = ' . $nextrun,
'tid = ' . (int) $task_id
);
$plugins->run_hooks('admin_tools_tasks_add_commit');
$cache->update_tasks();
} else {
require_once MYBB_ROOT . '/inc/functions_task.php';
$theTask = $db->fetch_array(
$db->simple_select('tasks', '*', 'file = \'myalerts\'', 1)
);
$db->update_query(
'tasks',
array(
'enabled' => 1,
'nextrun' => fetch_next_run($theTask)
),
'file = \'myalerts\''
);
$cache->update_tasks();
}
$plugins->run_hooks('myalerts_activate');
}
function myalerts_upgrade_105_200()
{
global $db, $lang, $cache, $plugins;
if (!$db->field_exists('alert_type_id', 'alerts')) {
$db->add_column('alerts', 'alert_type_id', 'INT(10) unsigned');
}
if ($db->field_exists('alert_type', 'alerts')) {
$db->drop_column('alerts', 'alert_type');
}
$db->modify_column('alerts', 'dateline', 'DATETIME');
if ($db->field_exists('tid', 'alerts')) {
$db->rename_column('alerts', 'tid', 'object_id', 'INT(10)');
}
if ($db->field_exists('from_id', 'alerts')) {
$db->rename_column('alerts', 'from_id', 'from_user_id', 'INT(10)');
}
// Check if the 'forced' column exists due to earlier issues with the upgrade script in past releases
if (!$db->field_exists('forced', 'alerts')) {
$db->add_column('alerts', 'forced', "INT(1) NOT NULL DEFAULT '0'");
}
if ($db->field_exists('content', 'alerts')) {
$db->rename_column('alerts', 'content', 'extra_details', 'TEXT');
}
if ($db->table_exists('alert_settings')) {
$db->drop_table('alert_settings');
}
if ($db->table_exists('alert_setting_values')) {
$db->drop_table('alert_setting_values');
}
$collation = $db->build_create_table_collation();
if (!$db->table_exists('alert_types')) {
$db->write_query(
"CREATE TABLE " . TABLE_PREFIX . "alert_types(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`code` varchar(100) NOT NULL DEFAULT '',
`enabled` tinyint(4) NOT NULL DEFAULT '1',
`can_be_user_disabled` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_code` (`code`)
) ENGINE=MyISAM{$collation};"
);
}
if (!$db->field_exists('myalerts_disabled_alert_types', 'users')) {
$db->add_column(
'users',
'myalerts_disabled_alert_types',
'TEXT NOT NULL'
);
}
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::createInstance(
$db,
$cache
);
$insertArray = array(
'rep',
'pm',
'buddylist',
'quoted',
'post_threadauthor',
'subscribed_thread'
);
$alertTypesToAdd = array();
foreach ($insertArray as $type) {
$alertType = new MybbStuff_MyAlerts_Entity_AlertType();
$alertType->setCode($type);
$alertType->setEnabled(true);
$alertType->setCanBeUserDisabled(true);
$alertTypesToAdd[] = $alertType;
}
$alertTypeManager->addTypes($alertTypesToAdd);
$plugins->run_hooks('myalerts_install');
flash_message($lang->myalerts_upgraded, 'success');
}
function myalerts_deactivate()
{
global $PL, $db, $lang, $plugins;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
if (!file_exists(PLUGINLIBRARY)) {
flash_message($lang->myalerts_pluginlibrary_missing, 'error');
admin_redirect('index.php?module=config-plugins');
}
isset($PL) or require_once PLUGINLIBRARY;
$plugins->run_hooks('myalerts_deactivate');
$PL->stylesheet_deactivate('alerts.css');
// remove usercp.css from alerts.php
$query = $db->simple_select(
'themestylesheets',
'sid,attachedto,tid',
"name = 'usercp.css'"
);
while ($userCpStylesheet = $db->fetch_array($query)) {
$sid = (int) $userCpStylesheet['sid'];
$attachedTo = str_replace(
'|alerts.php',
'',
$userCpStylesheet['attachedto']
);
$db->update_query(
'themestylesheets',
array(
'attachedto' => $db->escape_string($attachedTo),
),
"sid = {$sid}"
);
update_theme_stylesheet_list((int) $userCpStylesheet['tid']);
}
require_once MYBB_ROOT . "/inc/adminfunctions_templates.php";
find_replace_templatesets(
'headerinclude',
"#" . preg_quote('{$myalerts_js}') . "#i",
''
);
find_replace_templatesets(
'header_welcomeblock_member',
"#" . preg_quote('{$myalerts_headericon}') . "#i",
''
);
find_replace_templatesets(
'footer',
"#" . preg_quote('{$myalerts_modal}') . "#i",
''
);
$db->update_query('tasks', array('enabled' => 0), 'file = \'myalerts\'');
}
/**
* Check whether MyAlerts is activated. Useful for 3rd parties. Example usage:
*
*
* if (function_exists('myalerts_is_activated') && myalerts_is_activated()) {
* // Do work with MyAlerts.
* }
*
*
* @return bool Whether MyAlerts is activated and installed.
*/
function myalerts_is_activated()
{
global $cache;
$plugins = $cache->read('plugins');
$activePlugins = $plugins['active'];
$isActive = false;
if (in_array('myalerts', $activePlugins)) {
$isActive = true;
}
return myalerts_is_installed() && $isActive;
}
/**
* Cache reload function.
*
* MyBB's cache page in the ACP checks for a function named
* "reload_{$cacheitem['title']}" to add the reload button for a cache. Having
* this function in place fixes that.
*/
function reload_mybbstuff_myalerts_alert_types()
{
myalerts_create_instances();
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance();
$alertTypeManager->getAlertTypes(true);
}
function parse_alert(MybbStuff_MyAlerts_Entity_Alert $alertToParse)
{
global $mybb, $lang, $plugins;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
myalerts_create_instances();
/** @var MybbStuff_MyAlerts_Formatter_AbstractFormatter $formatter */
$formatter = MybbStuff_MyAlerts_AlertFormatterManager::getInstance()
->getFormatterForAlertType(
$alertToParse->getType(
)->getCode()
);
$outputAlert = array();
if ($formatter != null) {
$plugins->run_hooks('myalerts_alerts_output_start', $alert);
$formatter->init();
$fromUser = $alertToParse->getFromUser();
$maxDimensions = str_replace(
'|',
'x',
$mybb->settings['myalerts_avatar_size']
);
$outputAlert['avatar'] = format_avatar(
$fromUser['avatar'],
$mybb->settings['myalerts_avatar_size'],
$maxDimensions
);
$outputAlert['avatar']['image'] = htmlspecialchars_uni(
$outputAlert['avatar']['image']
);
$outputAlert['id'] = $alertToParse->getId();
$outputAlert['username'] = htmlspecialchars_uni($fromUser['username']);
$outputAlert['from_user'] = format_name(
htmlspecialchars_uni($fromUser['username']),
$fromUser['usergroup'],
$fromUser['displaygroup']
);
$outputAlert['from_user_raw_profilelink'] = get_profile_link(
(int) $fromUser['uid']
); // htmlspecialchars_uni done by get_profile_link
$outputAlert['from_user_profilelink'] = build_profile_link(
$outputAlert['from_user'],
$fromUser['uid']
);
$outputAlert['alert_status'] = ' alert--read';
if ($alertToParse->getUnread()) {
$outputAlert['alert_status'] = ' alert--unread';
}
$outputAlert['message'] = $formatter->formatAlert(
$alertToParse,
$outputAlert
);
$outputAlert['alert_code'] = $alertToParse->getType()->getCode();
$outputAlert['received_at'] = my_date(
$mybb->settings['dateformat'],
$alertToParse->getCreatedAt()->getTimestamp()
);
$plugins->run_hooks('myalerts_alerts_output_end', $alert);
}
return $outputAlert;
}
$plugins->add_hook('admin_user_users_delete_commit', 'myalerts_user_delete');
function myalerts_user_delete()
{
global $db, $user;
$user['uid'] = (int) $user['uid'];
$db->delete_query('alerts', "uid='{$user['uid']}'");
}
$plugins->add_hook('global_start', 'myalerts_global_start', -1);
function myalerts_global_start()
{
global $mybb, $templatelist, $templates;
if (isset($templatelist)) {
$templatelist .= ',';
}
$templatelist .= 'myalerts_headericon,myalerts_modal,myalerts_popup_row,myalerts_alert_row_no_alerts,myalerts_js_popup';
if (defined('THIS_SCRIPT')) {
if (THIS_SCRIPT == 'usercp.php' || THIS_SCRIPT == 'alerts.php') {
$templatelist .= ',myalerts_usercp_nav';
}
if (THIS_SCRIPT == 'alerts.php') { // Hack to load User CP menu items in alerts.php without querying for templates
$templatelist .= ',usercp_nav_messenger,usercp_nav_messenger_tracking,usercp_nav_messenger_compose,usercp_nav_messenger_folder,usercp_nav_changename,usercp_nav_editsignature,usercp_nav_profile,usercp_nav_attachments,usercp_nav_misc,usercp_nav';
}
if (THIS_SCRIPT == 'alerts.php') {
$templatelist .= ',myalerts_page,myalerts_alert_row,multipage_page_current,multipage_page,multipage_nextpage,multipage';
}
if (THIS_SCRIPT == 'alerts.php' && !empty($mybb->input['action']) && $mybb->input['action'] == 'settings') {
$templatelist .= ',myalerts_setting_row,myalerts_settings_page';
}
}
$mybb->user['unreadAlerts'] = 0;
if ($mybb->user['uid'] > 0) {
global $lang;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
if (!empty($mybb->user['myalerts_disabled_alert_types']))
{
$mybb->user['myalerts_disabled_alert_types'] = json_decode(
$mybb->user['myalerts_disabled_alert_types']
);
}
if (!empty($mybb->user['myalerts_disabled_alert_types']) && is_array(
$mybb->user['myalerts_disabled_alert_types']
)
) {
$mybb->user['myalerts_disabled_alert_types'] = array_map(
'intval',
$mybb->user['myalerts_disabled_alert_types']
);
} else {
$mybb->user['myalerts_disabled_alert_types'] = array();
}
myalerts_create_instances();
$mybb->user['unreadAlerts'] = my_number_format(
(int) MybbStuff_MyAlerts_AlertManager::getInstance()
->getNumUnreadAlerts()
);
}
}
$plugins->add_hook('admin_tabs', 'myalerts_create_instances', -1);
function myalerts_create_instances()
{
global $mybb, $db, $cache, $lang, $plugins;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance();
if (is_null($alertTypeManager) || $alertTypeManager === false) {
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::createInstance(
$db,
$cache
);
}
$alertManager = MybbStuff_MyAlerts_AlertManager::getInstance();
if (is_null($alertManager) || $alertManager === false) {
$alertManager = MybbStuff_MyAlerts_AlertManager::createInstance(
$mybb,
$db,
$cache,
$plugins,
$alertTypeManager
);
}
$formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::getInstance();
if (is_null($formatterManager) || $formatterManager === false) {
$formatterManager = MybbStuff_MyAlerts_AlertFormatterManager::createInstance($mybb, $lang);
}
myalerts_register_core_formatters($mybb, $lang);
if (!MybbStuff_MyAlerts_AlertManager::$isCommitRegistered) {
register_shutdown_function(
array(MybbStuff_MyAlerts_AlertManager::getInstance(), 'commit')
);
MybbStuff_MyAlerts_AlertManager::$isCommitRegistered = true;
}
}
$plugins->add_hook('global_intermediate', 'myalerts_global_intermediate');
function myalerts_global_intermediate()
{
global $templates, $mybb, $lang, $myalerts_return_link, $myalerts_headericon, $myalerts_modal, $myalerts_js, $theme;
$myalerts_js = '';
if (isset($mybb->user['uid']) && $mybb->user['uid'] > 0) {
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
$newAlertsIndicator = '';
if ($mybb->user['unreadAlerts']) {
$newAlertsIndicator = 'alerts--new';
}
$myalerts_return_link = htmlspecialchars_uni(urlencode(myalerts_get_current_url()));
$myalerts_headericon = eval($templates->render('myalerts_headericon'));
$myalerts_js = eval($templates->render('myalerts_js_popup'));
}
}
/**
* Returns the full current URL.
*
* @return string The current URL, including query parameters.
*/
function myalerts_get_current_url()
{
global $mybb;
$uri = explode('?', $_SERVER['REQUEST_URI']);
$link = $mybb->settings['homeurl'] . htmlspecialchars($uri[0], ENT_QUOTES);
if (!empty($_GET)) {
$link .= '?' . http_build_query($_GET);
}
return $link;
}
$plugins->add_hook(
'datahandler_user_insert',
'myalerts_datahandler_user_insert'
);
function myalerts_datahandler_user_insert(&$dataHandler)
{
global $db;
$dataHandler->user_insert_data['myalerts_disabled_alert_types'] = $db->escape_string(
json_encode(array())
);
}
$plugins->add_hook(
'build_friendly_wol_location_end',
'myalerts_online_location'
);
function myalerts_online_location(&$plugin_array)
{
global $lang;
if (!isset($lang->myalerts)) {
$lang->load('myalerts');
}
$inUserCpAlerts = $plugin_array['user_activity']['activity'] == 'usercp' AND my_strpos(
$plugin_array['user_activity']['location'],
'alerts'
);
$inAlertsPage = $plugin_array['user_activity']['activity'] == 'alerts';
if ($inUserCpAlerts || $inAlertsPage) {
$plugin_array['location_name'] = $lang->myalerts_online_location_listing;
}
}
$plugins->add_hook('reputation_do_add_process', 'myalerts_addAlert_rep');
function myalerts_addAlert_rep()
{
global $mybb, $reputation;
if (!isset($mybb->user['uid']) || $mybb->user['uid'] < 1) {
return;
}
myalerts_create_instances();
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance();
/** @var MybbStuff_MyAlerts_Entity_AlertType $alertType */
$alertType = $alertTypeManager->getByCode('rep');
if ($alertType != null && $alertType->getEnabled()) {
$alert = new MybbStuff_MyAlerts_Entity_Alert(
$reputation['uid'],
$alertType,
0
);
MybbStuff_MyAlerts_AlertManager::getInstance()->addAlert($alert);
}
}
$plugins->add_hook('datahandler_pm_insert_commit', 'myalerts_addAlert_pm');
function myalerts_addAlert_pm($PMDataHandler)
{
if ($PMDataHandler->pm_insert_data['fromid'] < 1) {
return;
}
myalerts_create_instances();
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance();
/** @var MybbStuff_MyAlerts_Entity_AlertType $alertType */
$alertType = $alertTypeManager->getByCode('pm');
if ($alertType != null && $alertType->getEnabled()) {
$pmId = current(array_slice($PMDataHandler->pmid, -1));
$alert = new MybbStuff_MyAlerts_Entity_Alert(
(int) $PMDataHandler->pm_insert_data['uid'],
$alertType,
$pmId
);
$alert->setExtraDetails(
array(
'pm_title' => $PMDataHandler->pm_insert_data['subject'],
)
);
MybbStuff_MyAlerts_AlertManager::getInstance()->addAlert($alert);
}
}
$plugins->add_hook('usercp_do_editlists_end', 'myalerts_alert_buddylist');
function myalerts_alert_buddylist()
{
global $mybb, $error_message, $db;
if (!isset($mybb->user['uid']) || $mybb->user['uid'] < 1) {
return;
}
if ($mybb->get_input(
'manage'
) != 'ignored' && !isset($mybb->input['delete']) && empty($error_message)
) {
$addUsers = explode(",", $mybb->input['add_username']);
$addUsers = array_map("trim", $addUsers);
$addUsers = array_unique($addUsers);
if (count($addUsers) > 0) {
myalerts_create_instances();
$alertTypeManager = MybbStuff_MyAlerts_AlertTypeManager::getInstance();
/** @var MybbStuff_MyAlerts_Entity_AlertType $alertType */
$alertType = $alertTypeManager->getByCode('buddylist');
if ($alertType != null && $alertType->getEnabled()) {
$userNames = array_map(array($db, 'escape_string'), $addUsers);
$userNames = "'" . implode("','", $userNames) . "'";
$query = $db->simple_select(
'users',
'uid',
"username IN({$userNames})"
);
$alerts = array();
while ($user = $db->fetch_array($query)) {
$alert = new MybbStuff_MyAlerts_Entity_Alert(
(int) $user['uid'], $alertType, 0
);
$alerts[] = $alert;
}
if (!empty($alerts)) {
MybbStuff_MyAlerts_AlertManager::getInstance()->addAlerts(
$alerts
);
}
}
}
}
}
$plugins->add_hook('newreply_do_newreply_end', 'myalerts_alert_quoted');
function myalerts_alert_quoted()
{
global $mybb, $pid, $post, $db;
if (!isset($mybb->user['uid']) || $mybb->user['uid'] < 1 || $post['savedraft']) {
return;
}
$author = (int) $mybb->user['uid'];
$message = $post['message'];
$pattern = "#\\[quote=(?:\"|'|"|)(?