Merge pull request #114 from Exile37/leroy0_develop

New compatible with php7 classes: Db, Config
This commit is contained in:
Yuriy Pikhtarev 2017-01-18 00:42:05 +03:00 committed by GitHub
commit 10984fc840
43 changed files with 869 additions and 1058 deletions

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2005-2016 TorrentPier
Copyright (c) 2005-2017 TorrentPier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -33,6 +33,7 @@ $di = new Di();
$di->register(new ServiceProviders\ConfigServiceProvider, [
'file.system.main' => __DIR__ . '/configs/main.php',
'file.local.main' => __DIR__ . '/configs/local.php',
'config.dbQuery' => "SELECT config_name, config_value FROM bb_config"
]);
//// Application

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'callseed');
define('BB_ROOT', './');
require_once __DIR__ . '/common.php';
@ -48,18 +50,18 @@ if ($t_data['seeders'] > 2) {
$ban_user_id = [];
$sql = DB()->fetch_rowset("SELECT ban_userid FROM " . BB_BANLIST . " WHERE ban_userid != 0");
$sql = Di::getInstance()->db->fetch_rowset("SELECT ban_userid FROM " . BB_BANLIST . " WHERE ban_userid != 0");
foreach ($sql as $row) {
$ban_user_id[] = ',' . $row['ban_userid'];
}
$ban_user_id = join('', $ban_user_id);
$user_list = DB()->fetch_rowset("
$user_list = Di::getInstance()->db->fetch_rowset("
SELECT DISTINCT dl.user_id, u.user_opt, tr.user_id as active_dl
FROM " . BB_BT_DLSTATUS . " dl
LEFT JOIN " . BB_USERS . " u ON(u.user_id = dl.user_id)
LEFT JOIN " . BB_BT_TRACKER . " tr ON(tr.user_id = dl.user_id)
LEFT JOIN bb_users u ON(u.user_id = dl.user_id)
LEFT JOIN bb_bt_tracker tr ON(tr.user_id = dl.user_id)
WHERE dl.topic_id = $topic_id
AND dl.user_status IN (" . DL_STATUS_COMPLETE . ", " . DL_STATUS_DOWN . ")
AND dl.user_id NOT IN ({$userdata['user_id']}, " . EXCLUDED_USERS . $ban_user_id . ")
@ -84,7 +86,7 @@ if ($user_list) {
send_pm($t_data['poster_id'], $subject, $message, BOT_UID);
}
DB()->query("UPDATE " . BB_BT_TORRENTS . " SET call_seed_time = " . TIMENOW . " WHERE topic_id = $topic_id LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_bt_torrents SET call_seed_time = " . TIMENOW . " WHERE topic_id = $topic_id LIMIT 1");
meta_refresh(TOPIC_URL . $topic_id);
bb_die($lang['CALLSEED_MSG_OK']);
@ -97,13 +99,13 @@ function topic_info($topic_id)
SELECT
tor.poster_id, tor.forum_id, tor.call_seed_time,
t.topic_title, sn.seeders
FROM " . BB_BT_TORRENTS . " tor
LEFT JOIN " . BB_TOPICS . " t USING(topic_id)
LEFT JOIN " . BB_BT_TRACKER_SNAP . " sn USING(topic_id)
FROM bb_bt_torrents tor
LEFT JOIN bb_topics t USING(topic_id)
LEFT JOIN bb_bt_tracker_snap sn USING(topic_id)
WHERE tor.topic_id = $topic_id
";
if (!$torrent = DB()->fetch_row($sql)) {
if (!$torrent = Di::getInstance()->db->fetch_row($sql)) {
bb_die($lang['TOPIC_POST_NOT_EXIST']);
}

View file

@ -23,6 +23,9 @@
* SOFTWARE.
*/
use TorrentPier\Di;
use TorrentPier\ServiceProviders;
if (isset($_REQUEST['GLOBALS'])) {
die();
}
@ -64,16 +67,17 @@ require_once(BB_ROOT . 'vendor/autoload.php');
// Get initial config
require_once(BB_ROOT . 'library/config.php');
$di = new \TorrentPier\Di();
$di = new Di();
// TODO: Need to get locale from settings
$di['settings.locale'] = function ($di) {
return 'en';
};
$di->register(new \TorrentPier\ServiceProviders\ConfigServiceProvider, [
'file.system.main' => __DIR__ . '/library/config.php',
'file.local.main' => __DIR__ . '/library/config.local.php',
$di->register(new ServiceProviders\ConfigServiceProvider, [
'file.system.main' => __DIR__ . '/configs/main.php',
'file.local.main' => __DIR__ . '/configs/local.php',
'config.dbQuery' => "SELECT config_name, config_value FROM bb_config"
]);
$di->register(new \TorrentPier\ServiceProviders\LogServiceProvider());
@ -86,9 +90,9 @@ $di->register(new \TorrentPier\ServiceProviders\TranslationServiceProvider());
$di->register(new \TorrentPier\ServiceProviders\TwigServiceProvider());
$di->register(new \TorrentPier\ServiceProviders\CaptchaServiceProvider());
$page_cfg = $di->config->page->toArray();
$tr_cfg = $di->config->tracker->toArray();
$rating_limits = $di->config->rating->toArray();
$page_cfg = $di->config->page;
$tr_cfg = $di->config->tracker;
$rating_limits = $di->config->rating;
define('BB_CFG_LOADED', true);
// Load Zend Framework
@ -141,28 +145,17 @@ require(CORE_DIR . 'dbs.php');
$DBS = new DBS([
'db' => [
'db' => [
$di->config->services->db->hostname,
$di->config->services->db->database,
$di->config->services->db->username,
$di->config->services->db->password,
$di->config->services->db->charset,
$di->config->get("services.db.hostname"),
$di->config->get("services.db.database"),
$di->config->get("services.db.username"),
$di->config->get("services.db.password"),
$di->config->get("services.db.charset"),
false
]
],
'db_alias' => $di->config->get('db_alias')
]);
/**
* TODO: @deprecated
* @param string $db_alias
* @return mixed
*/
function DB($db_alias = 'db')
{
global $DBS;
return $DBS->get_db_obj($db_alias);
}
/**
* Datastore
* TODO: @deprecated

View file

@ -30,11 +30,11 @@ return [
// Database
'db' => [
'debug' => '{self.debug}',
'driver' => 'Pdo_Mysql',
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'tp_220',
'username' => 'user',
'password' => 'pass',
'password' => function() { return 'pass'; },
'charset' => 'utf8'
],

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'dl_list');
define('BB_ROOT', './');
require_once __DIR__ . '/common.php';
@ -83,9 +85,9 @@ if (isset($_POST['cancel']) && $_POST['cancel']) {
// Delete DL-list
if ($mode == 'dl_delete' && $topic_id) {
if (!IS_ADMIN) {
$sql = "SELECT forum_id FROM " . BB_TOPICS . " WHERE topic_id = $topic_id LIMIT 1";
$sql = "SELECT forum_id FROM bb_topics WHERE topic_id = $topic_id LIMIT 1";
if (!$row = DB()->sql_fetchrow(DB()->sql_query($sql))) {
if (!$row = Di::getInstance()->db->sql_fetchrow(Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain forum_id for this topic');
}
@ -131,9 +133,9 @@ if ($mode == 'set_topics_dl_status') {
// Get existing topics
if ($req_topics_sql = join(',', $req_topics_ary)) {
$sql = "SELECT topic_id FROM " . BB_TOPICS . " WHERE topic_id IN($req_topics_sql)";
$sql = "SELECT topic_id FROM bb_topics WHERE topic_id IN($req_topics_sql)";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topics_ary[] = $row['topic_id'];
}
}
@ -148,9 +150,9 @@ if ($topics_ary && ($mode == 'set_dl_status' || $mode == 'set_topics_dl_status')
'user_status' => (int)$new_dl_status,
);
}
$new_dlstatus_sql = DB()->build_array('MULTI_INSERT', $new_dlstatus_ary);
$new_dlstatus_sql = Di::getInstance()->db->build_array('MULTI_INSERT', $new_dlstatus_ary);
DB()->query("REPLACE INTO " . BB_BT_DLSTATUS . " $new_dlstatus_sql");
Di::getInstance()->db->query("REPLACE INTO " . BB_BT_DLSTATUS . " $new_dlstatus_sql");
redirect("$redirect_type?$redirect");
}

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'group');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -113,7 +115,7 @@ if (!$group_id) {
" . BB_USER_GROUP . " ug2 ON
ug2.group_id = g.group_id
LEFT JOIN
" . BB_USERS . " u ON g.group_moderator = u.user_id
bb_users u ON g.group_moderator = u.user_id
WHERE
g.group_single_user = 0
GROUP BY g.group_id
@ -124,7 +126,7 @@ if (!$group_id) {
g.group_name ASC
";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
if ($row['is_group_mod']) {
$type = 'MOD';
} elseif ($row['membership'] == $member) {
@ -198,14 +200,14 @@ if (!$group_id) {
$sql = "SELECT g.group_id, g.group_name, ug.user_id, u.user_email, u.username, u.user_lang
FROM " . BB_GROUPS . " g
LEFT JOIN " . BB_USERS . " u ON(u.user_id = g.group_moderator)
LEFT JOIN bb_users u ON(u.user_id = g.group_moderator)
LEFT JOIN " . BB_USER_GROUP . " ug ON(ug.group_id = g.group_id AND ug.user_id = {$userdata['user_id']})
WHERE g.group_id = $group_id
AND group_single_user = 0
AND g.group_type = " . GROUP_OPEN . "
LIMIT 1";
$row = $moderator = DB()->fetch_row($sql);
$row = $moderator = Di::getInstance()->db->fetch_row($sql);
if (!$row['group_id']) {
bb_die($lang['NO_GROUPS_EXIST']);
@ -291,7 +293,7 @@ if (!$group_id) {
}
if (!empty($_POST['approve'])) {
DB()->query("
Di::getInstance()->db->query("
UPDATE " . BB_USER_GROUP . " SET
user_pending = 0
WHERE user_id IN($sql_in)
@ -300,7 +302,7 @@ if (!$group_id) {
update_user_level($sql_in);
} elseif (!empty($_POST['deny']) || !empty($_POST['remove'])) {
DB()->query("
Di::getInstance()->db->query("
DELETE FROM " . BB_USER_GROUP . "
WHERE user_id IN($sql_in)
AND group_id = $group_id
@ -313,10 +315,10 @@ if (!$group_id) {
// Email users when they are approved
if (!empty($_POST['approve']) && $di->config->get('group_send_email')) {
$sql_select = "SELECT username, user_email, user_lang
FROM " . BB_USERS . "
FROM bb_users
WHERE user_id IN($sql_in)";
if (!$result = DB()->sql_query($sql_select)) {
if (!$result = Di::getInstance()->db->sql_query($sql_select)) {
bb_die('Could not get user email information');
}
@ -325,7 +327,7 @@ if (!$group_id) {
$emailer->from($di->config->get('sitename') . " <{$di->config->get('board_email')}>");
foreach (DB()->fetch_rowset($sql_select) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql_select) as $row) {
$emailer->use_template('group_approved', $row['user_lang']);
$emailer->email_address($row['username'] . " <{$row['user_email']}>");
}
@ -345,9 +347,9 @@ if (!$group_id) {
// END approve or deny
// Get moderator details for this group
$group_moderator = DB()->fetch_row("
$group_moderator = Di::getInstance()->db->fetch_row("
SELECT *
FROM " . BB_USERS . "
FROM bb_users
WHERE user_id = " . $group_info['group_moderator'] . "
");
@ -360,7 +362,7 @@ if (!$group_id) {
AND user_id = " . $userdata['user_id'] . "
LIMIT 1";
if ($row = DB()->fetch_row($sql)) {
if ($row = Di::getInstance()->db->fetch_row($sql)) {
if ($row['user_pending'] == 0) {
$is_group_member = true;
} else {
@ -462,12 +464,12 @@ if (!$group_id) {
}
// Count releases for pagination
$all_releases = DB()->fetch_rowset("
$all_releases = Di::getInstance()->db->fetch_rowset("
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_TOPICS . " t ON(p.topic_id = t.topic_id)
LEFT JOIN " . BB_FORUMS . " f ON(p.forum_id= f.forum_id)
LEFT JOIN " . BB_USERS . " u ON(p.poster_id = u.user_id)
LEFT JOIN bb_topics t ON(p.topic_id = t.topic_id)
LEFT JOIN bb_forums f ON(p.forum_id= f.forum_id)
LEFT JOIN bb_users u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $rel_limit
@ -479,15 +481,15 @@ if (!$group_id) {
$sql = "
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_TOPICS . " t ON(p.topic_id = t.topic_id)
LEFT JOIN " . BB_FORUMS . " f ON(p.forum_id= f.forum_id)
LEFT JOIN " . BB_USERS . " u ON(p.poster_id = u.user_id)
LEFT JOIN bb_topics t ON(p.topic_id = t.topic_id)
LEFT JOIN bb_forums f ON(p.forum_id= f.forum_id)
LEFT JOIN bb_users u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $start, $per_page
";
if (!$releases = DB()->fetch_rowset($sql)) {
if (!$releases = Di::getInstance()->db->fetch_rowset($sql)) {
set_die_append_msg(false, false, $group_id);
bb_die($lang['NO_SEARCH_MATCH']);
}
@ -516,9 +518,9 @@ if (!$group_id) {
default:
// Members
$count_members = DB()->fetch_rowset("
$count_members = Di::getInstance()->db->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
FROM " . BB_USER_GROUP . " ug, bb_users u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> " . $group_moderator['user_id'] . "
@ -531,9 +533,9 @@ if (!$group_id) {
$modgroup_pending_count = 0;
// Members
$group_members = DB()->fetch_rowset("
$group_members = Di::getInstance()->db->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
FROM " . BB_USER_GROUP . " ug, bb_users u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> " . $group_moderator['user_id'] . "
@ -587,9 +589,9 @@ if (!$group_id) {
// Pending
if ($is_moderator) {
$modgroup_pending_list = DB()->fetch_rowset("
$modgroup_pending_list = Di::getInstance()->db->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
FROM " . BB_USER_GROUP . " ug, bb_users u
WHERE ug.group_id = $group_id
AND ug.user_pending = 1
AND u.user_id = ug.user_id

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'group_edit');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -65,7 +67,7 @@ if ($is_moderator) {
bb_die(implode($upload->errors));
}
DB()->query("UPDATE " . BB_GROUPS . " SET avatar_ext_id = $avatar_ext_id WHERE group_id = $group_id LIMIT 1");
Di::getInstance()->db->query("UPDATE " . BB_GROUPS . " SET avatar_ext_id = $avatar_ext_id WHERE group_id = $group_id LIMIT 1");
}
}

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'index');
define('BB_ROOT', './');
require_once __DIR__ . '/common.php';
@ -132,11 +134,11 @@ $sql = "
t.topic_id AS last_topic_id, t.topic_title AS last_topic_title,
u.user_id AS last_post_user_id, u.user_rank AS last_post_user_rank,
IF(p.poster_id = $anon, p.post_username, u.username) AS last_post_username
FROM " . BB_CATEGORIES . " c
INNER JOIN " . BB_FORUMS . " f ON($forums_join_sql)
FROM bb_categories c
INNER JOIN bb_forums f ON($forums_join_sql)
$join_p_type " . BB_POSTS . " p ON($posts_join_sql)
$join_t_type " . BB_TOPICS . " t ON($topics_join_sql)
LEFT JOIN " . BB_USERS . " u ON(u.user_id = p.poster_id)
$join_t_type bb_topics t ON($topics_join_sql)
LEFT JOIN bb_users u ON(u.user_id = p.poster_id)
ORDER BY c.cat_order, f.forum_order
";
@ -153,7 +155,7 @@ $replace_in_parent = array(
$cache_name = 'index_sql_' . md5($sql);
if (!$cache->has($cache_name)) {
$cat_forums = [];
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
if (!($cat_id = $row['cat_id']) || !($forum_id = $row['forum_id'])) {
continue;
}
@ -290,13 +292,30 @@ $template->assign_vars(array(
'TOTAL_TOPICS' => sprintf($lang['POSTED_TOPICS_TOTAL'], $stats['topiccount']),
'TOTAL_POSTS' => sprintf($lang['POSTED_ARTICLES_TOTAL'], $stats['postcount']),
'TOTAL_USERS' => sprintf($lang['REGISTERED_USERS_TOTAL'], $stats['usercount']),
'TOTAL_GENDER' => ($di->config->get('gender')) ? sprintf($lang['USERS_TOTAL_GENDER'], $stats['male'], $stats['female'], $stats['unselect']) : '',
'TOTAL_GENDER' => ($di->config->get('gender')) ? sprintf(
$lang['USERS_TOTAL_GENDER'],
$stats['male'] ?? 0,
$stats['female'] ?? 0,
$stats['unselect'] ?? 0
) : '',
'NEWEST_USER' => sprintf($lang['NEWEST_USER'], profile_url($stats['newestuser'])),
// Tracker stats
'TORRENTS_STAT' => ($di->config->get('tor_stats')) ? sprintf($lang['TORRENTS_STAT'], $stats['torrentcount'], humn_size($stats['size'])) : '',
'PEERS_STAT' => ($di->config->get('tor_stats')) ? sprintf($lang['PEERS_STAT'], $stats['peers'], $stats['seeders'], $stats['leechers']) : '',
'SPEED_STAT' => ($di->config->get('tor_stats')) ? sprintf($lang['SPEED_STAT'], humn_size($stats['speed']) . '/s') : '',
'TORRENTS_STAT' => ($di->config->get('tor_stats')) ? sprintf(
$lang['TORRENTS_STAT'],
$stats['torrentcount'] ?? 0,
humn_size($stats['size'] ?? 0)
) : '',
'PEERS_STAT' => ($di->config->get('tor_stats')) ? sprintf(
$lang['PEERS_STAT'],
$stats['peers'] ?? 0,
$stats['seeders'] ?? 0,
$stats['leechers'] ?? 0
) : '',
'SPEED_STAT' => ($di->config->get('tor_stats')) ? sprintf(
$lang['SPEED_STAT'],
humn_size($stats['speed'] ?? 0) . '/s'
) : '',
'SHOW_MOD_INDEX' => $di->config->get('show_mod_index'),
'FORUM_IMG' => $images['forum'],
'FORUM_NEW_IMG' => $images['forum_new'],
@ -365,7 +384,7 @@ if ($di->config->get('birthday_check_day') && $di->config->get('birthday_enabled
$week_list = $today_list = array();
$week_all = $today_all = false;
if ($stats['birthday_week_list']) {
if (isset($stats['birthday_week_list'])) {
shuffle($stats['birthday_week_list']);
foreach ($stats['birthday_week_list'] as $i => $week) {
if ($i >= 5) {
@ -380,7 +399,7 @@ if ($di->config->get('birthday_check_day') && $di->config->get('birthday_enabled
$week_list = sprintf($lang['NOBIRTHDAY_WEEK'], $di->config->get('birthday_check_day'));
}
if ($stats['birthday_today_list']) {
if (isset($stats['birthday_today_list'])) {
shuffle($stats['birthday_today_list']);
foreach ($stats['birthday_today_list'] as $i => $today) {
if ($i >= 5) {

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -41,26 +42,26 @@ $limit_sql = 3000;
$topics_sql = [];
$sql = "SELECT topic_id
FROM " . BB_BT_TORRENTS . "
FROM bb_bt_torrents
WHERE reg_time < $never_seen_time
AND seeder_last_seen < $last_seen_time
LIMIT $limit_sql";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topics_sql[] = $row['topic_id'];
}
$dead_tor_sql = join(',', $topics_sql);
if ($dead_tor_sql) {
// Delete torstat
DB()->query("
Di::getInstance()->db->query("
DELETE FROM " . BB_BT_TORSTAT . "
WHERE topic_id IN($dead_tor_sql)
");
// Remove torrents
DB()->query("
DELETE FROM " . BB_BT_TORRENTS . "
Di::getInstance()->db->query("
DELETE FROM bb_bt_torrents
WHERE topic_id IN($dead_tor_sql)
");
}

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -30,7 +31,7 @@ if (!defined('BB_ROOT')) {
/** @var \TorrentPier\Di $di */
$di = \TorrentPier\Di::getInstance();
DB()->expect_slow_query(600);
Di::getInstance()->db->expect_slow_query(600);
//
// Make tracker snapshot

View file

@ -22,19 +22,20 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
}
DB()->query("
Di::getInstance()->db->query("
UPDATE
" . BUF_LAST_SEEDER . " b,
" . BB_BT_TORRENTS . " tor
bb_bt_torrents tor
SET
tor.seeder_last_seen = b.seeder_last_seen
WHERE
tor.topic_id = b.topic_id
");
DB()->query("TRUNCATE TABLE " . BUF_LAST_SEEDER);
Di::getInstance()->db->query("TRUNCATE TABLE " . BUF_LAST_SEEDER);

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -33,7 +34,7 @@ $di = \TorrentPier\Di::getInstance();
require_once(INC_DIR . 'functions_atom.php');
$timecheck = TIMENOW - 600;
$forums_data = DB()->fetch_rowset("SELECT forum_id, allow_reg_tracker, forum_name FROM " . BB_FORUMS);
$forums_data = Di::getInstance()->db->fetch_rowset("SELECT forum_id, allow_reg_tracker, forum_name FROM " . BB_FORUMS);
if (file_exists($di->config->get('atom.path') . '/f/0.atom')) {
if (filemtime($di->config->get('atom.path') . '/f/0.atom') <= $timecheck) {

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -31,7 +32,7 @@ $ranks = array();
$sql = "SELECT rank_id, rank_title, rank_image, rank_style FROM " . BB_RANKS;
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$ranks[$row['rank_id']] = $row;
}

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -33,27 +34,27 @@ $di = \TorrentPier\Di::getInstance();
$data = [];
// usercount
$row = DB()->fetch_row("SELECT COUNT(*) AS usercount FROM " . BB_USERS . " WHERE user_id NOT IN(" . EXCLUDED_USERS . ")");
$row = Di::getInstance()->db->fetch_row("SELECT COUNT(*) AS usercount FROM bb_users WHERE user_id NOT IN(" . EXCLUDED_USERS . ")");
$data['usercount'] = commify($row['usercount']);
// newestuser
$row = DB()->fetch_row("SELECT user_id, username, user_rank FROM " . BB_USERS . " WHERE user_active = 1 ORDER BY user_id DESC LIMIT 1");
$row = Di::getInstance()->db->fetch_row("SELECT user_id, username, user_rank FROM bb_users WHERE user_active = 1 ORDER BY user_id DESC LIMIT 1");
$data['newestuser'] = $row;
// post/topic count
$row = DB()->fetch_row("SELECT SUM(forum_topics) AS topiccount, SUM(forum_posts) AS postcount FROM " . BB_FORUMS);
$row = Di::getInstance()->db->fetch_row("SELECT SUM(forum_topics) AS topiccount, SUM(forum_posts) AS postcount FROM " . BB_FORUMS);
$data['postcount'] = commify($row['postcount']);
$data['topiccount'] = commify($row['topiccount']);
// Tracker stats
if ($di->config->get('tor_stats')) {
// torrents stat
$row = DB()->fetch_row("SELECT COUNT(topic_id) AS torrentcount, SUM(size) AS size FROM " . BB_BT_TORRENTS);
$row = Di::getInstance()->db->fetch_row("SELECT COUNT(topic_id) AS torrentcount, SUM(size) AS size FROM " . BB_BT_TORRENTS);
$data['torrentcount'] = commify($row['torrentcount']);
$data['size'] = $row['size'];
// peers stat
$row = DB()->fetch_row("SELECT SUM(seeders) AS seeders, SUM(leechers) AS leechers, ((SUM(speed_up) + SUM(speed_down))/2) AS speed FROM " . BB_BT_TRACKER_SNAP);
$row = Di::getInstance()->db->fetch_row("SELECT SUM(seeders) AS seeders, SUM(leechers) AS leechers, ((SUM(speed_up) + SUM(speed_down))/2) AS speed FROM bb_bt_tracker_snap");
$data['seeders'] = commify($row['seeders']);
$data['leechers'] = commify($row['leechers']);
$data['peers'] = commify($row['seeders'] + $row['leechers']);
@ -62,9 +63,9 @@ if ($di->config->get('tor_stats')) {
// gender stat
if ($di->config->get('gender')) {
$male = DB()->fetch_row("SELECT COUNT(user_id) AS male FROM " . BB_USERS . " WHERE user_gender = " . MALE . " AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$female = DB()->fetch_row("SELECT COUNT(user_id) AS female FROM " . BB_USERS . " WHERE user_gender = " . FEMALE . " AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$unselect = DB()->fetch_row("SELECT COUNT(user_id) AS unselect FROM " . BB_USERS . " WHERE user_gender = 0 AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$male = Di::getInstance()->db->fetch_row("SELECT COUNT(user_id) AS male FROM bb_users WHERE user_gender = " . MALE . " AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$female = Di::getInstance()->db->fetch_row("SELECT COUNT(user_id) AS female FROM bb_users WHERE user_gender = " . FEMALE . " AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$unselect = Di::getInstance()->db->fetch_row("SELECT COUNT(user_id) AS unselect FROM bb_users WHERE user_gender = 0 AND user_id NOT IN(" . EXCLUDED_USERS . ")");
$data['male'] = $male['male'];
$data['female'] = $female['female'];
@ -73,8 +74,8 @@ if ($di->config->get('gender')) {
// birthday stat
if ($di->config->get('birthday_check_day') && $di->config->get('birthday_enabled')) {
$sql = DB()->fetch_rowset("SELECT user_id, username, user_rank , user_birthday
FROM " . BB_USERS . "
$sql = Di::getInstance()->db->fetch_rowset("SELECT user_id, username, user_rank , user_birthday
FROM bb_users
WHERE user_id NOT IN(" . EXCLUDED_USERS . ")
AND user_birthday != '0000-00-00'
AND user_active = 1

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -32,22 +33,22 @@ if (empty($_GET['u']) || empty($_GET['act_key'])) {
}
$sql = "SELECT user_active, user_id, username, user_email, user_newpasswd, user_lang, user_actkey
FROM " . BB_USERS . "
FROM bb_users
WHERE user_id = " . intval($_GET[POST_USERS_URL]);
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain user information');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
if ($row['user_active'] && trim($row['user_actkey']) == '') {
bb_die($lang['ALREADY_ACTIVATED']);
} elseif ((trim($row['user_actkey']) == trim($_GET['act_key'])) && (trim($row['user_actkey']) != '')) {
$sql_update_pass = ($row['user_newpasswd'] != '') ? ", user_password = '" . md5(md5($row['user_newpasswd'])) . "', user_newpasswd = ''" : '';
$sql = "UPDATE " . BB_USERS . "
$sql = "UPDATE bb_users
SET user_active = 1, user_actkey = ''" . $sql_update_pass . "
WHERE user_id = " . $row['user_id'];
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not update users table');
}

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -62,7 +63,7 @@ if (isset($_POST['bonus_id'])) {
bb_die($message);
}
DB()->query("UPDATE " . BB_BT_USERS . " bu, " . BB_USERS . " u
Di::getInstance()->db->query("UPDATE " . BB_BT_USERS . " bu, bb_users u
SET
bu.u_up_total = u_up_total + $upload,
u.user_points = u.user_points - $points

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -50,11 +51,11 @@ if (!$userdata['session_logged_in']) {
$errors = array();
$sql = "SELECT username, user_id, user_rank, user_email, user_lang
FROM " . BB_USERS . "
FROM bb_users
WHERE user_id = $user_id
";
if ($row = DB()->fetch_row($sql)) {
if ($row = Di::getInstance()->db->fetch_row($sql)) {
$username = $row['username'];
$user_email = $row['user_email'];
$user_lang = $row['user_lang'];

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -74,7 +75,7 @@ switch ($mode) {
if (!IS_ADMIN) {
// Ограничение по ip
if ($di->config->get('unique_ip')) {
if ($users = DB()->fetch_row("SELECT user_id, username FROM " . BB_USERS . " WHERE user_reg_ip = '" . USER_IP . "' LIMIT 1")) {
if ($users = Di::getInstance()->db->fetch_row("SELECT user_id, username FROM bb_users WHERE user_reg_ip = '" . USER_IP . "' LIMIT 1")) {
bb_die(sprintf($lang['ALREADY_REG_IP'], '<a href="' . PROFILE_URL . $users['user_id'] . '"><b>' . $users['username'] . '</b></a>', $di->config->get('tech_admin_email')));
}
}
@ -157,11 +158,11 @@ switch ($mode) {
user_rank,
user_level,
$profile_fields_sql
FROM " . BB_USERS . "
FROM bb_users
WHERE user_id = $pr_user_id
LIMIT 1
";
if (!$pr_data = DB()->fetch_row($sql)) {
if (!$pr_data = Di::getInstance()->db->fetch_row($sql)) {
bb_die($lang['PROFILE_NOT_FOUND']);
}
break;
@ -576,10 +577,10 @@ if ($submit && !$errors) {
$db_data['tpl_name'] = (string)$di->config->get('tpl_name');
}
$sql_args = DB()->build_array('INSERT', $db_data);
$sql_args = Di::getInstance()->db->build_array('INSERT', $db_data);
DB()->query("INSERT INTO " . BB_USERS . $sql_args);
$new_user_id = DB()->sql_nextid();
Di::getInstance()->db->query("INSERT INTO " . BB_USERS . $sql_args);
$new_user_id = Di::getInstance()->db->sql_nextid();
if (IS_ADMIN) {
set_pr_die_append_msg($new_user_id);
@ -648,9 +649,9 @@ if ($submit && !$errors) {
$message = $lang['PROFILE_UPDATED'];
}
$sql_args = DB()->build_array('UPDATE', $db_data);
$sql_args = Di::getInstance()->db->build_array('UPDATE', $db_data);
DB()->query("UPDATE " . BB_USERS . " SET $sql_args WHERE user_id = {$pr_data['user_id']} LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_users SET $sql_args WHERE user_id = {$pr_data['user_id']} LIMIT 1");
if ($pr_data['user_id'] != $userdata['user_id']) {
if ($pr_data['user_level'] == MOD && !empty($db_data['username'])) {

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -43,9 +44,9 @@ if (isset($_POST['submit'])) {
bb_die($lang['CAPTCHA_WRONG']);
}
$email = (!empty($_POST['email'])) ? trim(strip_tags(htmlspecialchars($_POST['email']))) : '';
$sql = "SELECT * FROM " . BB_USERS . " WHERE user_email = '" . DB()->escape($email) . "'";
if ($result = DB()->sql_query($sql)) {
if ($row = DB()->sql_fetchrow($result)) {
$sql = "SELECT * FROM bb_users WHERE user_email = '" . Di::getInstance()->db->escape($email) . "'";
if ($result = Di::getInstance()->db->sql_query($sql)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
if (!$row['user_active']) {
bb_die($lang['NO_SEND_ACCOUNT_INACTIVE']);
}
@ -59,10 +60,10 @@ if (isset($_POST['submit'])) {
$user_actkey = make_rand_str(12);
$user_password = make_rand_str(8);
$sql = "UPDATE " . BB_USERS . "
$sql = "UPDATE bb_users
SET user_newpasswd = '$user_password', user_actkey = '$user_actkey'
WHERE user_id = " . $row['user_id'];
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update new password information');
}

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
/** @var \TorrentPier\Di $di */
$di = \TorrentPier\Di::getInstance();
@ -41,7 +42,7 @@ $per_page = $di->config->get('topics_per_page');
if (isset($_POST['topic_id_list'])) {
$topic_ids = implode(",", $_POST['topic_id_list']);
$sql = "DELETE FROM " . BB_TOPICS_WATCH . " WHERE topic_id IN(" . $topic_ids . ") AND user_id = $user_id";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not delete topic watch information #1');
}
}
@ -52,17 +53,17 @@ $template->assign_vars(array(
));
$sql = "SELECT COUNT(topic_id) as watch_count FROM " . BB_TOPICS_WATCH . " WHERE user_id = $user_id";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain watch topic information #2');
}
$row = DB()->sql_fetchrow($result);
$row = Di::getInstance()->db->sql_fetchrow($result);
$watch_count = ($row['watch_count']) ? $row['watch_count'] : 0;
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
if ($watch_count > 0) {
$sql = "SELECT w.*, t.*, f.*, u.*, u2.username as last_username, u2.user_id as last_user_id,
u2.user_level as last_user_level, u2.user_rank as last_user_rank
FROM " . BB_TOPICS_WATCH . " w, " . BB_TOPICS . " t, " . BB_USERS . " u, " . BB_FORUMS . " f, " . BB_POSTS . " p, " . BB_USERS . " u2
FROM " . BB_TOPICS_WATCH . " w, bb_topics t, bb_users u, bb_forums f, " . BB_POSTS . " p, bb_users u2
WHERE w.topic_id = t.topic_id
AND t.forum_id = f.forum_id
AND p.post_id = t.topic_last_post_id
@ -71,10 +72,10 @@ if ($watch_count > 0) {
AND w.user_id = $user_id
GROUP BY t.topic_last_post_time DESC
LIMIT $start, $per_page";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain watch topic information #3');
}
$watch = DB()->sql_fetchrowset($result);
$watch = Di::getInstance()->db->sql_fetchrowset($result);
if ($watch) {
for ($i = 0; $i < count($watch); $i++) {
@ -107,7 +108,7 @@ if ($watch_count > 0) {
'PER_PAGE' => $per_page,
));
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
} else {
meta_refresh('index.php', 3);
bb_die($lang['NO_WATCHED_TOPICS']);

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('BB_ROOT')) {
die(basename(__FILE__));
@ -145,7 +146,7 @@ if (IS_ADMIN) {
GROUP BY ug.user_id, g.group_single_user, ug.user_pending
ORDER BY NULL
";
if ($rowset = DB()->fetch_rowset($sql)) {
if ($rowset = Di::getInstance()->db->fetch_rowset($sql)) {
$member = $pending = $single = 0;
foreach ($rowset as $row) {
if (!$row['group_single_user'] && !$row['user_pending']) {

View file

@ -22,6 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
use \TorrentPier\Di;
if (!defined('IN_PROFILE')) {
die(basename(__FILE__));
@ -37,12 +38,12 @@ $not_auth_forums_sql = ($excluded_forums_csv) ? "
AND f.forum_parent NOT IN($excluded_forums_csv)
" : '';
$sql = DB()->fetch_rowset("
$sql = Di::getInstance()->db->fetch_rowset("
SELECT
f.forum_id, f.forum_name, t.topic_title,
tor.tor_type, tor.size,
sn.seeders, sn.leechers, tr.*
FROM " . BB_FORUMS . " f, " . BB_TOPICS . " t, " . BB_BT_TRACKER . " tr, " . BB_BT_TORRENTS . " tor, " . BB_BT_TRACKER_SNAP . " sn
FROM bb_forums f, bb_topics t, bb_bt_tracker tr, bb_bt_torrents tor, bb_bt_tracker_snap sn
WHERE tr.user_id = {$profiledata['user_id']}
AND tr.topic_id = tor.topic_id
AND sn.topic_id = tor.topic_id

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'memberlist');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -138,7 +140,7 @@ if ($by_letter_req) {
$by_letter = 'others';
$letter_sql = "username REGEXP '^[!-@\\[-`].*$'";
} elseif ($letter_req = preg_replace("#[^$letters_range]#ui", '', iconv('windows-1251', 'UTF-8', $by_letter_req[0]))) {
$by_letter = DB()->escape($letter_req);
$by_letter = Di::getInstance()->db->escape($letter_req);
$letter_sql = "LOWER(username) LIKE '$by_letter%'";
}
}
@ -164,15 +166,15 @@ $template->assign_vars(array(
));
// per-letter selection end
$sql = "SELECT username, user_id, user_rank, user_opt, user_posts, user_regdate, user_from, user_website, user_email FROM " . BB_USERS . " WHERE user_id NOT IN(" . EXCLUDED_USERS . ")";
$sql = "SELECT username, user_id, user_rank, user_opt, user_posts, user_regdate, user_from, user_website, user_email FROM bb_users WHERE user_id NOT IN(" . EXCLUDED_USERS . ")";
if ($username) {
$username = preg_replace('/\*/', '%', clean_username($username));
$letter_sql = "username LIKE '" . DB()->escape($username) . "'";
$letter_sql = "username LIKE '" . Di::getInstance()->db->escape($username) . "'";
}
$sql .= ($letter_sql) ? " AND $letter_sql" : '';
$sql .= " ORDER BY $order_by";
if ($result = DB()->fetch_rowset($sql)) {
if ($result = Di::getInstance()->db->fetch_rowset($sql)) {
foreach ($result as $i => $row) {
$user_id = $row['user_id'];
$from = $row['user_from'];
@ -221,14 +223,14 @@ if ($paginationusername) {
if ($mode != 'topten' || $di->config->get('topics_per_page') < 10) {
$sql = "SELECT COUNT(*) AS total FROM " . BB_USERS;
$sql .= ($letter_sql) ? " WHERE $letter_sql" : '';
if (!$result = DB()->sql_query($sql)) {
if (!$result = Di::getInstance()->db->sql_query($sql)) {
bb_die('Error getting total users');
}
if ($total = DB()->sql_fetchrow($result)) {
if ($total = Di::getInstance()->db->sql_fetchrow($result)) {
$total_members = $total['total'];
generate_pagination($paginationurl, $total_members, $di->config->get('topics_per_page'), $start) . '&nbsp;';
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
}
$template->assign_vars(array(

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'modcp');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -65,9 +67,9 @@ function validate_topics($forum_id, &$req_topics, &$topic_titles)
$valid_topics = $valid_titles = array();
if ($topic_csv = get_id_csv($req_topics)) {
$sql = "SELECT topic_id, topic_title FROM " . BB_TOPICS . " WHERE topic_id IN($topic_csv) AND forum_id = $forum_id";
$sql = "SELECT topic_id, topic_title FROM bb_topics WHERE topic_id IN($topic_csv) AND forum_id = $forum_id";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$valid_topics[] = $row['topic_id'];
$valid_titles[] = $row['topic_title'];
}
@ -124,13 +126,13 @@ if ($topic_id) {
SELECT
f.forum_id, f.forum_name, f.forum_topics, f.self_moderated,
t.topic_first_post_id, t.topic_poster
FROM " . BB_TOPICS . " t, " . BB_FORUMS . " f
FROM bb_topics t, bb_forums f
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
LIMIT 1
";
if (!$topic_row = DB()->fetch_row($sql)) {
if (!$topic_row = Di::getInstance()->db->fetch_row($sql)) {
bb_die('Topic post not exist');
}
@ -138,9 +140,9 @@ if ($topic_id) {
$forum_name = $topic_row['forum_name'];
$forum_topics = (!$topic_row['forum_topics']) ? 1 : $topic_row['forum_topics'];
} elseif ($forum_id) {
$sql = "SELECT forum_name, forum_topics FROM " . BB_FORUMS . " WHERE forum_id = $forum_id LIMIT 1";
$sql = "SELECT forum_name, forum_topics FROM bb_forums WHERE forum_id = $forum_id LIMIT 1";
if (!$topic_row = DB()->fetch_row($sql)) {
if (!$topic_row = Di::getInstance()->db->fetch_row($sql)) {
bb_die('Forum not exist');
}
@ -325,7 +327,7 @@ switch ($mode) {
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
FROM bb_topics
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
AND topic_status != " . TOPIC_MOVED . "
@ -334,7 +336,7 @@ switch ($mode) {
$topic_csv = array();
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
@ -343,8 +345,8 @@ switch ($mode) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
Di::getInstance()->db->query("
UPDATE bb_topics SET
topic_status = $new_topic_status
WHERE topic_id IN($topic_csv)
");
@ -371,8 +373,8 @@ switch ($mode) {
$set_download = ($mode == 'set_download');
$new_dl_type = ($set_download) ? 1 : 0;
DB()->query("
UPDATE " . BB_TOPICS . " SET
Di::getInstance()->db->query("
UPDATE bb_topics SET
tracker_status = $new_dl_type
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
@ -413,10 +415,10 @@ switch ($mode) {
AND topic_id = $topic_id
AND forum_id = $forum_id";
if (!$result = DB()->sql_query($sql)) {
if (!$result = Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not get post id information');
}
if ($rowset = DB()->sql_fetchrowset($result)) {
if ($rowset = Di::getInstance()->db->sql_fetchrowset($result)) {
foreach ($rowset as $rid => $row) {
$post_id_sql[] = $row['post_id'];
}
@ -432,11 +434,11 @@ switch ($mode) {
FROM " . BB_POSTS . "
WHERE post_id IN ($post_id_sql)
ORDER BY post_time ASC";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not get post information');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$first_poster = $row['poster_id'];
$topic_id = $row['topic_id'];
$post_time = $row['post_time'];
@ -446,7 +448,7 @@ switch ($mode) {
do {
$user_id_sql .= (($user_id_sql != '') ? ', ' : '') . intval($row['poster_id']);
$post_id_sql .= (($post_id_sql != '') ? ', ' : '') . intval($row['post_id']);
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
$post_subject = clean_title($_POST['subject']);
if (empty($post_subject)) {
@ -457,25 +459,25 @@ switch ($mode) {
$topic_time = TIMENOW;
$sql = 'SELECT forum_id FROM ' . BB_FORUMS . ' WHERE forum_id = ' . $new_forum_id;
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not select from forums table');
}
if (!DB()->sql_fetchrow($result)) {
if (!Di::getInstance()->db->sql_fetchrow($result)) {
bb_die('New forum does not exist');
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
$first_post_id = min(explode(',', $post_id_sql));
$sql = "INSERT INTO " . BB_TOPICS . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_first_post_id)
VALUES ('" . DB()->escape($post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ", $first_post_id)";
if (!(DB()->sql_query($sql))) {
$sql = "INSERT INTO bb_topics (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_first_post_id)
VALUES ('" . Di::getInstance()->db->escape($post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ", $first_post_id)";
if (!(Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not insert new topic');
}
$new_topic_id = DB()->sql_nextid();
$new_topic_id = Di::getInstance()->db->sql_nextid();
// Update topic watch table, switch users whose posts
// have moved, over to watching the new topic
@ -483,14 +485,14 @@ switch ($mode) {
SET topic_id = $new_topic_id
WHERE topic_id = $topic_id
AND user_id IN ($user_id_sql)";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update topics watch table');
}
$sql_where = (!empty($_POST['split_type_beyond'])) ? " post_time >= $post_time AND topic_id = $topic_id" : "post_id IN ($post_id_sql)";
$sql = "UPDATE " . BB_POSTS . " SET topic_id = $new_topic_id, forum_id = $new_forum_id WHERE $sql_where";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update posts table');
}
@ -533,19 +535,19 @@ switch ($mode) {
bb_die(return_msg_mcp($msg));
} else {
$sql = "SELECT u.username, p.*, pt.post_text, p.post_username
FROM " . BB_POSTS . " p, " . BB_USERS . " u, " . BB_POSTS_TEXT . " pt
FROM " . BB_POSTS . " p, bb_users u, " . BB_POSTS_TEXT . " pt
WHERE p.topic_id = $topic_id
AND p.poster_id = u.user_id
AND p.post_id = pt.post_id
ORDER BY p.post_time ASC";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not get topic / post information');
}
$s_hidden_fields = '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" /><input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" /><input type="hidden" name="mode" value="split" />';
if (($total_posts = DB()->num_rows($result)) > 0) {
$postrow = DB()->sql_fetchrowset($result);
if (($total_posts = Di::getInstance()->db->num_rows($result)) > 0) {
$postrow = Di::getInstance()->db->sql_fetchrowset($result);
$template->assign_vars(array(
'FORUM_NAME' => htmlCHR($forum_name),
@ -603,11 +605,11 @@ switch ($mode) {
// Look up relevant data for this post
$sql = "SELECT * FROM " . BB_POSTS . " WHERE post_id = $post_id AND forum_id = $forum_id";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not get poster IP information');
}
if (!($post_row = DB()->sql_fetchrow($result))) {
if (!($post_row = Di::getInstance()->db->sql_fetchrow($result))) {
bb_die($lang['NO_SUCH_POST']);
}
@ -628,11 +630,11 @@ switch ($mode) {
$where_sql = ($poster_id == $anon) ? "post_username = '{$post_row['post_username']}'" : "poster_id = $poster_id";
$sql = "SELECT poster_ip, COUNT(*) AS postings FROM " . BB_POSTS . " WHERE $where_sql GROUP BY poster_ip ORDER BY postings DESC LIMIT 100";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not get IP information for this user');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$i = 0;
do {
if ($row['poster_ip'] == $post_row['poster_ip']) {
@ -653,7 +655,7 @@ switch ($mode) {
));
$i++;
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
}
//
@ -663,17 +665,17 @@ switch ($mode) {
u.user_id,
IF(u.user_id = $anon, p.post_username, u.username) AS username,
COUNT(*) as postings
FROM " . BB_USERS . " u, " . BB_POSTS . " p
FROM bb_users u, " . BB_POSTS . " p
WHERE p.poster_id = u.user_id
AND p.poster_ip = '" . $post_row['poster_ip'] . "'
GROUP BY u.user_id, p.post_username
ORDER BY postings DESC
LIMIT 100";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not get posters information based on IP');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$i = 0;
do {
$id = $row['user_id'];
@ -688,7 +690,7 @@ switch ($mode) {
));
$i++;
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
}
$template->set_filenames(array('body' => 'modcp.tpl'));
@ -702,7 +704,7 @@ switch ($mode) {
if (count($topic_csv)) {
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
FROM bb_topics
WHERE topic_id IN($topic_csv)
AND forum_id = $forum_id
AND topic_show_first_post != " . TOPIC_MOVED . "
@ -711,7 +713,7 @@ switch ($mode) {
$topic_csv = array();
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
@ -720,8 +722,8 @@ switch ($mode) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
Di::getInstance()->db->query("
UPDATE bb_topics SET
topic_show_first_post = $new_topic_status
WHERE topic_id IN($topic_csv)
");
@ -731,7 +733,7 @@ switch ($mode) {
} elseif ($topic_id) {
$sql = "
SELECT topic_id, topic_title
FROM " . BB_TOPICS . "
FROM bb_topics
WHERE topic_id = $topic_id
AND forum_id = $forum_id
AND topic_show_first_post != " . TOPIC_MOVED . "
@ -741,7 +743,7 @@ switch ($mode) {
$topic_csv = array();
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topic_csv[] = $row['topic_id'];
$log_topics[$row['topic_id']] = $row['topic_title'];
}
@ -750,8 +752,8 @@ switch ($mode) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("
UPDATE " . BB_TOPICS . " SET
Di::getInstance()->db->query("
UPDATE bb_topics SET
topic_show_first_post = $new_topic_status
WHERE topic_id IN($topic_csv)
");

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'vote');
define('BB_ROOT', './');
require_once __DIR__ . '/common.php';
@ -51,7 +53,7 @@ $poll = new bb_poll();
if (!$topic_id) {
bb_die('Invalid topic_id');
}
if (!$t_data = DB()->fetch_row("SELECT * FROM " . BB_TOPICS . " WHERE topic_id = $topic_id LIMIT 1")) {
if (!$t_data = Di::getInstance()->db->fetch_row("SELECT * FROM bb_topics WHERE topic_id = $topic_id LIMIT 1")) {
bb_die('Topic not found');
}
@ -89,22 +91,22 @@ switch ($mode) {
if (!$vote_id) {
bb_die($lang['NO_VOTE_OPTION']);
}
if (DB()->fetch_row("SELECT 1 FROM " . BB_POLL_USERS . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']} LIMIT 1")) {
if (Di::getInstance()->db->fetch_row("SELECT 1 FROM " . BB_POLL_USERS . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']} LIMIT 1")) {
bb_die($lang['ALREADY_VOTED']);
}
DB()->query("
Di::getInstance()->db->query("
UPDATE " . BB_POLL_VOTES . " SET
vote_result = vote_result + 1
WHERE topic_id = $topic_id
AND vote_id = $vote_id
LIMIT 1
");
if (DB()->affected_rows() != 1) {
if (Di::getInstance()->db->affected_rows() != 1) {
bb_die($lang['NO_VOTE_OPTION']);
}
DB()->query("INSERT IGNORE INTO " . BB_POLL_USERS . " (topic_id, user_id, vote_ip, vote_dt) VALUES ($topic_id, {$userdata['user_id']}, '" . USER_IP . "', " . TIMENOW . ")");
Di::getInstance()->db->query("INSERT IGNORE INTO " . BB_POLL_USERS . " (topic_id, user_id, vote_ip, vote_dt) VALUES ($topic_id, {$userdata['user_id']}, '" . USER_IP . "', " . TIMENOW . ")");
$cache->delete('poll_' . $topic_id);
@ -116,7 +118,7 @@ switch ($mode) {
if (!$t_data['topic_vote']) {
bb_die($lang['POST_HAS_NO_POLL']);
}
DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = 1 WHERE topic_id = $topic_id LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_topics SET topic_vote = 1 WHERE topic_id = $topic_id LIMIT 1");
bb_die($lang['NEW_POLL_START']);
break;
@ -125,7 +127,7 @@ switch ($mode) {
if (!$t_data['topic_vote']) {
bb_die($lang['POST_HAS_NO_POLL']);
}
DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = " . POLL_FINISHED . " WHERE topic_id = $topic_id LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_topics SET topic_vote = " . POLL_FINISHED . " WHERE topic_id = $topic_id LIMIT 1");
bb_die($lang['NEW_POLL_END']);
break;
@ -225,16 +227,16 @@ class bb_poll
'vote_result' => (int)0,
);
}
$sql_args = DB()->build_array('MULTI_INSERT', $sql_ary);
$sql_args = Di::getInstance()->db->build_array('MULTI_INSERT', $sql_ary);
DB()->query("REPLACE INTO " . BB_POLL_VOTES . $sql_args);
Di::getInstance()->db->query("REPLACE INTO " . BB_POLL_VOTES . $sql_args);
DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = 1 WHERE topic_id = $topic_id LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_topics SET topic_vote = 1 WHERE topic_id = $topic_id LIMIT 1");
}
public function delete_poll($topic_id)
{
DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = 0 WHERE topic_id = $topic_id LIMIT 1");
Di::getInstance()->db->query("UPDATE bb_topics SET topic_vote = 0 WHERE topic_id = $topic_id LIMIT 1");
$this->delete_votes_data($topic_id);
}
@ -246,8 +248,8 @@ class bb_poll
/** @var \TorrentPier\Cache\Adapter $cache */
$cache = $di->cache;
DB()->query("DELETE FROM " . BB_POLL_VOTES . " WHERE topic_id = $topic_id");
DB()->query("DELETE FROM " . BB_POLL_USERS . " WHERE topic_id = $topic_id");
Di::getInstance()->db->query("DELETE FROM " . BB_POLL_VOTES . " WHERE topic_id = $topic_id");
Di::getInstance()->db->query("DELETE FROM " . BB_POLL_USERS . " WHERE topic_id = $topic_id");
$cache->delete('poll_' . $topic_id);
}

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'posting');
define('BB_ROOT', './');
require(BB_ROOT . "common.php");
@ -118,7 +120,7 @@ switch ($mode) {
if (!$forum_id) {
bb_simple_die($lang['FORUM_NOT_EXIST']);
}
$sql = "SELECT * FROM " . BB_FORUMS . " WHERE forum_id = $forum_id LIMIT 1";
$sql = "SELECT * FROM bb_forums WHERE forum_id = $forum_id LIMIT 1";
break;
case 'reply':
@ -126,7 +128,7 @@ switch ($mode) {
bb_simple_die($lang['NO_TOPIC_ID']);
}
$sql = "SELECT f.*, t.*
FROM " . BB_FORUMS . " f, " . BB_TOPICS . " t
FROM bb_forums f, bb_topics t
WHERE t.topic_id = $topic_id
AND f.forum_id = t.forum_id
LIMIT 1";
@ -142,8 +144,8 @@ switch ($mode) {
$select_sql = 'SELECT f.*, t.*, p.*';
$select_sql .= (!$submit) ? ', pt.*, u.username, u.user_id' : '';
$from_sql = "FROM " . BB_POSTS . " p, " . BB_TOPICS . " t, " . BB_FORUMS . " f";
$from_sql .= (!$submit) ? ", " . BB_POSTS_TEXT . " pt, " . BB_USERS . " u" : '';
$from_sql = "FROM " . BB_POSTS . " p, bb_topics t, bb_forums f";
$from_sql .= (!$submit) ? ", " . BB_POSTS_TEXT . " pt, bb_users u" : '';
$where_sql = "
WHERE p.post_id = $post_id
@ -162,7 +164,7 @@ switch ($mode) {
bb_simple_die($lang['NO_VALID_MODE']);
}
if ($post_info = DB()->fetch_row($sql)) {
if ($post_info = Di::getInstance()->db->fetch_row($sql)) {
$forum_id = $post_info['forum_id'];
$forum_name = $post_info['forum_name'];
@ -242,8 +244,8 @@ if (!$is_auth[$is_auth_type]) {
if ($mode == 'new_rel') {
if ($tor_status = join(',', $di->config->get('tor_cannot_new'))) {
$sql = DB()->fetch_rowset("SELECT t.topic_title, t.topic_id, tor.tor_status
FROM " . BB_BT_TORRENTS . " tor, " . BB_TOPICS . " t
$sql = Di::getInstance()->db->fetch_rowset("SELECT t.topic_title, t.topic_id, tor.tor_status
FROM bb_bt_torrents tor, bb_topics t
WHERE poster_id = {$userdata['user_id']}
AND tor.topic_id = t.topic_id
AND tor.tor_status IN ($tor_status)
@ -269,7 +271,7 @@ if ($submit || $preview) {
$notify_user = bf($userdata['user_opt'], 'user_opt', 'user_notify');
if (!IS_GUEST && $mode != 'newtopic' && !$notify_user) {
$notify_user = (int)DB()->fetch_row("SELECT topic_id FROM " . BB_TOPICS_WATCH . " WHERE topic_id = $topic_id AND user_id = " . $userdata['user_id']);
$notify_user = (int)Di::getInstance()->db->fetch_row("SELECT topic_id FROM " . BB_TOPICS_WATCH . " WHERE topic_id = $topic_id AND user_id = " . $userdata['user_id']);
}
}
@ -281,7 +283,7 @@ $topic_has_new_posts = false;
if (!IS_GUEST && $mode != 'newtopic' && ($submit || $preview || $mode == 'quote' || $mode == 'reply') && isset($_COOKIE[COOKIE_TOPIC])) {
if ($topic_last_read = max(intval($tracking_topics[$topic_id]), intval($tracking_forums[$forum_id]))) {
$sql = "SELECT p.*, pt.post_text, u.username, u.user_rank
FROM " . BB_POSTS . " p, " . BB_POSTS_TEXT . " pt, " . BB_USERS . " u
FROM " . BB_POSTS . " p, " . BB_POSTS_TEXT . " pt, bb_users u
WHERE p.topic_id = " . (int)$topic_id . "
AND u.user_id = p.poster_id
AND pt.post_id = p.post_id
@ -289,7 +291,7 @@ if (!IS_GUEST && $mode != 'newtopic' && ($submit || $preview || $mode == 'quote'
ORDER BY p.post_time
LIMIT " . $di->config->get('posts_per_page');
if ($rowset = DB()->fetch_rowset($sql)) {
if ($rowset = Di::getInstance()->db->fetch_rowset($sql)) {
$topic_has_new_posts = true;
foreach ($rowset as $i => $row) {
@ -347,7 +349,7 @@ if ($mode == 'delete' && !$confirm) {
if (!$error_msg) {
$topic_type = (isset($post_data['topic_type']) && $topic_type != $post_data['topic_type'] && !$is_auth['auth_sticky'] && !$is_auth['auth_announce']) ? $post_data['topic_type'] : $topic_type;
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $topic_type, DB()->escape($username), DB()->escape($subject), DB()->escape($message), $update_post_time, $poster_rg_id, $attach_rg_sig);
submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $topic_type, Di::getInstance()->db->escape($username), Di::getInstance()->db->escape($subject), Di::getInstance()->db->escape($message), $update_post_time, $poster_rg_id, $attach_rg_sig);
$post_url = POST_URL . "$post_id#$post_id";
$post_msg = ($mode == 'editpost') ? $lang['EDITED'] : $lang['STORED'];
@ -386,8 +388,8 @@ if ($mode == 'delete' && !$confirm) {
$upload = new upload_common();
if ($upload->init($di->config->get('attach'), $_FILES['attach']) && $upload->store('attach', array('topic_id' => $topic_id))) {
DB()->query("
UPDATE " . BB_TOPICS . " SET
Di::getInstance()->db->query("
UPDATE bb_topics SET
attach_ext_id = " . (int)$upload->file_ext_id . ",
filesize = " . (int)$upload->file_size . "
WHERE topic_id = $topic_id
@ -401,7 +403,7 @@ if ($mode == 'delete' && !$confirm) {
if ($post_info['forum_parent']) {
$forum_parent = $post_info['forum_parent'];
}
$count_rowset = DB()->fetch_rowset("SELECT forum_id FROM " . BB_FORUMS . " WHERE forum_parent = $forum_parent");
$count_rowset = Di::getInstance()->db->fetch_rowset("SELECT forum_id FROM bb_forums WHERE forum_parent = $forum_parent");
$sub_forums = array();
foreach ($count_rowset as $count_row) {
if ($count_row['forum_id'] != $forum_id) {
@ -411,7 +413,7 @@ if ($mode == 'delete' && !$confirm) {
$sub_forums[] = $forum_id;
$sub_forums = join(',', $sub_forums);
// Подсчет проверенных релизов в форумах раздела
$count_checked_releases = DB()->fetch_row("SELECT COUNT(*) AS checked_releases FROM " . BB_BT_TORRENTS . " WHERE poster_id = " . $userdata['user_id'] . " AND forum_id IN($sub_forums) AND tor_status IN(" . TOR_APPROVED . "," . TOR_DOUBTFUL . "," . TOR_TMP . ") LIMIT 1", 'checked_releases');
$count_checked_releases = Di::getInstance()->db->fetch_row("SELECT COUNT(*) AS checked_releases FROM bb_bt_torrents WHERE poster_id = " . $userdata['user_id'] . " AND forum_id IN($sub_forums) AND tor_status IN(" . TOR_APPROVED . "," . TOR_DOUBTFUL . "," . TOR_TMP . ") LIMIT 1", 'checked_releases');
if ($count_checked_releases || IS_AM) {
tracker_register($topic_id, 'newtopic', TOR_NOT_APPROVED);
} else {
@ -571,7 +573,7 @@ if ($userdata['user_level'] == GROUP_MEMBER || IS_AM) {
AND g.release_group = 1
ORDER BY g.group_name";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$selected_opt = ($row['group_id'] == $selected_rg) ? 'selected' : '';
$poster_rgroups .= '<option value="' . $row['group_id'] . '" ' . $selected_opt . '>' . $row['group_name'] . '</option>';
}

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'pm');
define('IN_PM', true);
define('BB_ROOT', './');
@ -160,20 +162,20 @@ if ($mode == 'read') {
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_email, u.user_regdate, u.user_rank,
u2.username AS to_username, u2.user_id AS to_user_id, u2.user_rank as to_user_rank,
pm.*, pmt.privmsgs_text
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, " . BB_USERS . " u, " . BB_USERS . " u2
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, bb_users u, bb_users u2
WHERE pm.privmsgs_id = $privmsgs_id
AND pmt.privmsgs_text_id = pm.privmsgs_id
$pm_sql_user
AND u.user_id = pm.privmsgs_from_userid
AND u2.user_id = pm.privmsgs_to_userid";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not query private message post information');
}
//
// Did the query return any data?
//
if (!($privmsg = DB()->sql_fetchrow($result))) {
if (!($privmsg = Di::getInstance()->db->sql_fetchrow($result))) {
redirect(PM_URL . "?folder=$folder");
}
@ -194,18 +196,18 @@ if ($mode == 'read') {
break;
}
$sql = "UPDATE " . BB_USERS . " SET $sql WHERE user_id = " . $userdata['user_id'];
if (!DB()->sql_query($sql)) {
$sql = "UPDATE bb_users SET $sql WHERE user_id = " . $userdata['user_id'];
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update private message read status for user');
}
if (DB()->affected_rows()) {
if (Di::getInstance()->db->affected_rows()) {
cache_rm_userdata($userdata);
}
$sql = "UPDATE " . BB_PRIVMSGS . "
SET privmsgs_type = " . PRIVMSGS_READ_MAIL . "
WHERE privmsgs_id = " . $privmsg['privmsgs_id'];
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update private message read status');
}
@ -214,29 +216,29 @@ if ($mode == 'read') {
FROM " . BB_PRIVMSGS . "
WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . "
AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid'];
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain sent message info for sender');
}
if ($sent_info = DB()->sql_fetchrow($result)) {
if ($sent_info = Di::getInstance()->db->sql_fetchrow($result)) {
if ($di->config->get('max_sentbox_privmsgs') && $sent_info['sent_items'] >= $di->config->get('max_sentbox_privmsgs')) {
$sql = "SELECT privmsgs_id FROM " . BB_PRIVMSGS . "
WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . "
AND privmsgs_date = " . $sent_info['oldest_post_time'] . "
AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid'];
if (!$result = DB()->sql_query($sql)) {
if (!$result = Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not find oldest privmsgs');
}
$old_privmsgs_id = DB()->sql_fetchrow($result);
$old_privmsgs_id = Di::getInstance()->db->sql_fetchrow($result);
$old_privmsgs_id = (int)$old_privmsgs_id['privmsgs_id'];
$sql = "DELETE FROM " . BB_PRIVMSGS . " WHERE privmsgs_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs (sent)');
}
$sql = "DELETE FROM " . BB_PRIVMSGS_TEXT . " WHERE privmsgs_text_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs text (sent)');
}
}
@ -248,16 +250,16 @@ if ($mode == 'read') {
// set limits on numbers of storable posts for users ... hopefully!
//
$sql = "INSERT INTO " . BB_PRIVMSGS . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip)
VALUES (" . PRIVMSGS_SENT_MAIL . ", '" . DB()->escape($privmsg['privmsgs_subject']) . "', " . $privmsg['privmsgs_from_userid'] . ", " . $privmsg['privmsgs_to_userid'] . ", " . $privmsg['privmsgs_date'] . ", '" . $privmsg['privmsgs_ip'] . "')";
if (!DB()->sql_query($sql)) {
VALUES (" . PRIVMSGS_SENT_MAIL . ", '" . Di::getInstance()->db->escape($privmsg['privmsgs_subject']) . "', " . $privmsg['privmsgs_from_userid'] . ", " . $privmsg['privmsgs_to_userid'] . ", " . $privmsg['privmsgs_date'] . ", '" . $privmsg['privmsgs_ip'] . "')";
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not insert private message sent info');
}
$privmsg_sent_id = DB()->sql_nextid();
$privmsg_sent_id = Di::getInstance()->db->sql_nextid();
$sql = "INSERT INTO " . BB_PRIVMSGS_TEXT . " (privmsgs_text_id, privmsgs_text)
VALUES ($privmsg_sent_id, '" . DB()->escape($privmsg['privmsgs_text']) . "')";
if (!DB()->sql_query($sql)) {
VALUES ($privmsg_sent_id, '" . Di::getInstance()->db->escape($privmsg['privmsgs_text']) . "')";
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not insert private message sent text');
}
}
@ -482,12 +484,12 @@ if ($mode == 'read') {
}
$sql = "SELECT privmsgs_id FROM " . BB_PRIVMSGS . " WHERE $delete_type $delete_sql_id";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain id list to delete messages');
}
$mark_list = array();
while ($row = DB()->sql_fetchrow($result)) {
while ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$mark_list[] = $row['privmsgs_id'];
}
@ -516,11 +518,11 @@ if ($mode == 'read') {
WHERE privmsgs_id IN ($delete_sql_id)
AND $sql
AND privmsgs_type IN (" . PRIVMSGS_NEW_MAIL . ", " . PRIVMSGS_UNREAD_MAIL . ")";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain user id list for outbox messages');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$update_users = $update_list = array();
do {
@ -533,7 +535,7 @@ if ($mode == 'read') {
$update_users['unread'][$row['privmsgs_to_userid']]++;
break;
}
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
if (sizeof($update_users)) {
while (list($type, $users) = each($update_users)) {
@ -557,10 +559,10 @@ if ($mode == 'read') {
while (list($dec, $user_ary) = each($dec_ary)) {
$user_ids = join(', ', $user_ary);
$sql = "UPDATE " . BB_USERS . "
$sql = "UPDATE bb_users
SET $type = $type - $dec
WHERE user_id IN ($user_ids)";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update user pm counters');
}
}
@ -568,7 +570,7 @@ if ($mode == 'read') {
unset($update_list);
}
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
}
// Delete the messages
@ -601,11 +603,11 @@ if ($mode == 'read') {
break;
}
if (!DB()->sql_query($delete_sql)) {
if (!Di::getInstance()->db->sql_query($delete_sql)) {
bb_die('Could not delete private message info');
}
if (!DB()->sql_query($delete_text_sql)) {
if (!Di::getInstance()->db->sql_query($delete_text_sql)) {
bb_die('Could not delete private message text');
}
@ -623,11 +625,11 @@ if ($mode == 'read') {
AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain sent message info for sender');
}
if ($saved_info = DB()->sql_fetchrow($result)) {
if ($saved_info = Di::getInstance()->db->sql_fetchrow($result)) {
if ($di->config->get('max_savebox_privmsgs') && $saved_info['savebox_items'] >= $di->config->get('max_savebox_privmsgs')) {
$sql = "SELECT privmsgs_id FROM " . BB_PRIVMSGS . "
WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
@ -635,19 +637,19 @@ if ($mode == 'read') {
OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )
AND privmsgs_date = " . $saved_info['oldest_post_time'];
if (!$result = DB()->sql_query($sql)) {
if (!$result = Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not find oldest privmsgs (save)');
}
$old_privmsgs_id = DB()->sql_fetchrow($result);
$old_privmsgs_id = Di::getInstance()->db->sql_fetchrow($result);
$old_privmsgs_id = (int)$old_privmsgs_id['privmsgs_id'];
$sql = "DELETE FROM " . BB_PRIVMSGS . " WHERE privmsgs_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs (save)');
}
$sql = "DELETE FROM " . BB_PRIVMSGS_TEXT . " WHERE privmsgs_text_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs text (save)');
}
}
@ -679,11 +681,11 @@ if ($mode == 'read') {
WHERE privmsgs_id IN ($saved_sql_id)
AND $sql
AND privmsgs_type IN (" . PRIVMSGS_NEW_MAIL . ", " . PRIVMSGS_UNREAD_MAIL . ")";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain user id list for outbox messages');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$update_users = $update_list = array();
do {
@ -696,7 +698,7 @@ if ($mode == 'read') {
$update_users['unread'][$row['privmsgs_to_userid']]++;
break;
}
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
if (sizeof($update_users)) {
while (list($type, $users) = each($update_users)) {
@ -720,8 +722,8 @@ if ($mode == 'read') {
while (list($dec, $user_ary) = each($dec_ary)) {
$user_ids = join(', ', $user_ary);
$sql = "UPDATE " . BB_USERS . " SET $type = $type - $dec WHERE user_id IN ($user_ids)";
if (!DB()->sql_query($sql)) {
$sql = "UPDATE bb_users SET $type = $type - $dec WHERE user_id IN ($user_ids)";
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update user pm counters');
}
}
@ -729,7 +731,7 @@ if ($mode == 'read') {
unset($update_list);
}
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
}
switch ($folder) {
@ -757,7 +759,7 @@ if ($mode == 'read') {
$saved_sql .= " AND privmsgs_id IN ($saved_sql_id)";
if (!DB()->sql_query($saved_sql)) {
if (!Di::getInstance()->db->sql_query($saved_sql)) {
bb_die('Could not save private messages');
}
@ -767,8 +769,8 @@ if ($mode == 'read') {
if (IS_USER && $submit && $mode != 'edit') {
// Flood control
$sql = "SELECT MAX(privmsgs_date) AS last_post_time FROM " . BB_PRIVMSGS . " WHERE privmsgs_from_userid = " . $userdata['user_id'];
if ($result = DB()->sql_query($sql)) {
$db_row = DB()->sql_fetchrow($result);
if ($result = Di::getInstance()->db->sql_query($sql)) {
$db_row = Di::getInstance()->db->sql_fetchrow($result);
$last_post_time = $db_row['last_post_time'];
$current_time = TIMENOW;
@ -785,14 +787,14 @@ if ($mode == 'read') {
WHERE privmsgs_id = ' . (int)$privmsg_id . '
AND privmsgs_from_userid = ' . $userdata['user_id'];
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain message details');
}
if (!($row = DB()->sql_fetchrow($result))) {
if (!($row = Di::getInstance()->db->sql_fetchrow($result))) {
bb_die($lang['NO_SUCH_POST']);
}
DB()->sql_freeresult($result);
Di::getInstance()->db->sql_freeresult($result);
unset($row);
}
@ -800,7 +802,7 @@ if ($mode == 'read') {
if ($submit) {
if (!empty($_POST['username'])) {
$to_username = clean_username($_POST['username']);
$to_username_sql = DB()->escape($to_username);
$to_username_sql = Di::getInstance()->db->escape($to_username);
$to_userdata = get_userdata($to_username_sql);
if (!$to_userdata || $to_userdata['user_id'] == GUEST_UID) {
@ -846,11 +848,11 @@ if ($mode == 'read') {
OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
AND privmsgs_to_userid = " . $to_userdata['user_id'];
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die($lang['NO_SUCH_USER']);
}
if ($inbox_info = DB()->sql_fetchrow($result)) {
if ($inbox_info = Di::getInstance()->db->sql_fetchrow($result)) {
if ($di->config->get('max_inbox_privmsgs') && $inbox_info['inbox_items'] >= $di->config->get('max_inbox_privmsgs')) {
$sql = "SELECT privmsgs_id FROM " . BB_PRIVMSGS . "
WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
@ -858,62 +860,62 @@ if ($mode == 'read') {
OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
AND privmsgs_date = " . $inbox_info['oldest_post_time'] . "
AND privmsgs_to_userid = " . $to_userdata['user_id'];
if (!$result = DB()->sql_query($sql)) {
if (!$result = Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not find oldest privmsgs (inbox)');
}
$old_privmsgs_id = DB()->sql_fetchrow($result);
$old_privmsgs_id = Di::getInstance()->db->sql_fetchrow($result);
$old_privmsgs_id = (int)$old_privmsgs_id['privmsgs_id'];
$sql = "DELETE FROM " . BB_PRIVMSGS . " WHERE privmsgs_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs (inbox)');
}
$sql = "DELETE FROM " . BB_PRIVMSGS_TEXT . " WHERE privmsgs_text_id = $old_privmsgs_id";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not delete oldest privmsgs text (inbox)');
}
}
}
$sql_info = "INSERT INTO " . BB_PRIVMSGS . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip)
VALUES (" . PRIVMSGS_NEW_MAIL . ", '" . DB()->escape($privmsg_subject) . "', " . $userdata['user_id'] . ", " . $to_userdata['user_id'] . ", $msg_time, '" . USER_IP . "')";
VALUES (" . PRIVMSGS_NEW_MAIL . ", '" . Di::getInstance()->db->escape($privmsg_subject) . "', " . $userdata['user_id'] . ", " . $to_userdata['user_id'] . ", $msg_time, '" . USER_IP . "')";
} else {
$sql_info = "UPDATE " . BB_PRIVMSGS . "
SET privmsgs_type = " . PRIVMSGS_NEW_MAIL . ", privmsgs_subject = '" . DB()->escape($privmsg_subject) . "', privmsgs_from_userid = " . $userdata['user_id'] . ", privmsgs_to_userid = " . $to_userdata['user_id'] . ", privmsgs_date = $msg_time, privmsgs_ip = '" . USER_IP . "'
SET privmsgs_type = " . PRIVMSGS_NEW_MAIL . ", privmsgs_subject = '" . Di::getInstance()->db->escape($privmsg_subject) . "', privmsgs_from_userid = " . $userdata['user_id'] . ", privmsgs_to_userid = " . $to_userdata['user_id'] . ", privmsgs_date = $msg_time, privmsgs_ip = '" . USER_IP . "'
WHERE privmsgs_id = $privmsg_id";
}
if (!($result = DB()->sql_query($sql_info))) {
if (!($result = Di::getInstance()->db->sql_query($sql_info))) {
bb_die('Could not insert / update private message sent info');
}
if ($mode != 'edit') {
$privmsg_sent_id = DB()->sql_nextid();
$privmsg_sent_id = Di::getInstance()->db->sql_nextid();
$sql = "INSERT INTO " . BB_PRIVMSGS_TEXT . " (privmsgs_text_id, privmsgs_text)
VALUES ($privmsg_sent_id, '" . DB()->escape($privmsg_message) . "')";
VALUES ($privmsg_sent_id, '" . Di::getInstance()->db->escape($privmsg_message) . "')";
} else {
$sql = "UPDATE " . BB_PRIVMSGS_TEXT . "
SET privmsgs_text = '" . DB()->escape($privmsg_message) . "'
SET privmsgs_text = '" . Di::getInstance()->db->escape($privmsg_message) . "'
WHERE privmsgs_text_id = $privmsg_id";
}
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not insert / update private message sent text');
}
if ($mode != 'edit') {
$timenow = TIMENOW;
// Add to the users new pm counter
$sql = "UPDATE " . BB_USERS . " SET
$sql = "UPDATE bb_users SET
user_new_privmsg = user_new_privmsg + 1,
user_last_privmsg = $timenow,
user_newest_pm_id = $privmsg_sent_id
WHERE user_id = {$to_userdata['user_id']}
LIMIT 1";
if (!$status = DB()->sql_query($sql)) {
if (!$status = Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update private message new / read status for user');
}
@ -964,14 +966,14 @@ if ($mode == 'read') {
$page_title = $lang['EDIT_PM'];
$sql = "SELECT u.user_id
FROM " . BB_PRIVMSGS . " pm, " . BB_USERS . " u
FROM " . BB_PRIVMSGS . " pm, bb_users u
WHERE pm.privmsgs_id = $privmsg_id
AND u.user_id = pm.privmsgs_from_userid";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain post and post text');
}
if ($postrow = DB()->sql_fetchrow($result)) {
if ($postrow = Di::getInstance()->db->sql_fetchrow($result)) {
if ($userdata['user_id'] != $postrow['user_id']) {
bb_die($lang['EDIT_OWN_POSTS']);
}
@ -985,29 +987,29 @@ if ($mode == 'read') {
if (!empty($_GET[POST_USERS_URL])) {
$user_id = intval($_GET[POST_USERS_URL]);
$sql = "SELECT username FROM " . BB_USERS . " WHERE user_id = $user_id AND user_id <> " . GUEST_UID;
if (!($result = DB()->sql_query($sql))) {
$sql = "SELECT username FROM bb_users WHERE user_id = $user_id AND user_id <> " . GUEST_UID;
if (!($result = Di::getInstance()->db->sql_query($sql))) {
$error = true;
$error_msg = $lang['NO_SUCH_USER'];
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$to_username = $row['username'];
}
} elseif ($mode == 'edit') {
$sql = "SELECT pm.*, pmt.privmsgs_text, u.username, u.user_id
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, " . BB_USERS . " u
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, bb_users u
WHERE pm.privmsgs_id = $privmsg_id
AND pmt.privmsgs_text_id = pm.privmsgs_id
AND pm.privmsgs_from_userid = " . $userdata['user_id'] . "
AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
AND u.user_id = pm.privmsgs_to_userid";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain private message for editing #1');
}
if (!($privmsg = DB()->sql_fetchrow($result))) {
if (!($privmsg = Di::getInstance()->db->sql_fetchrow($result))) {
redirect(PM_URL . "?folder=$folder");
}
@ -1018,16 +1020,16 @@ if ($mode == 'read') {
$to_userid = $privmsg['user_id'];
} elseif ($mode == 'reply' || $mode == 'quote') {
$sql = "SELECT pm.privmsgs_subject, pm.privmsgs_date, pmt.privmsgs_text, u.username, u.user_id
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, " . BB_USERS . " u
FROM " . BB_PRIVMSGS . " pm, " . BB_PRIVMSGS_TEXT . " pmt, bb_users u
WHERE pm.privmsgs_id = $privmsg_id
AND pmt.privmsgs_text_id = pm.privmsgs_id
AND pm.privmsgs_to_userid = " . $userdata['user_id'] . "
AND u.user_id = pm.privmsgs_from_userid";
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not obtain private message for editing #2');
}
if (!($privmsg = DB()->sql_fetchrow($result))) {
if (!($privmsg = Di::getInstance()->db->sql_fetchrow($result))) {
redirect(PM_URL . "?folder=$folder");
}
@ -1181,7 +1183,7 @@ if ($mode == 'read') {
SET privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . "
WHERE privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
AND privmsgs_to_userid = " . $userdata['user_id'];
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update private message new / read status (2) for user');
}
@ -1211,7 +1213,7 @@ if ($mode == 'read') {
$sql_tot = "SELECT COUNT(privmsgs_id) AS total
FROM " . BB_PRIVMSGS . " ";
$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username, u.user_rank
FROM " . BB_PRIVMSGS . " pm, " . BB_USERS . " u ";
FROM " . BB_PRIVMSGS . " pm, bb_users u ";
switch ($folder) {
case 'inbox':
$sql_tot .= "WHERE privmsgs_to_userid = " . $userdata['user_id'] . "
@ -1289,17 +1291,17 @@ if ($mode == 'read') {
//
// Get messages
//
if (!($result = DB()->sql_query($sql_tot))) {
if (!($result = Di::getInstance()->db->sql_query($sql_tot))) {
bb_die('Could not query private message information #1');
}
$pm_total = ($row = DB()->sql_fetchrow($result)) ? $row['total'] : 0;
$pm_total = ($row = Di::getInstance()->db->sql_fetchrow($result)) ? $row['total'] : 0;
if (!($result = DB()->sql_query($sql_all_tot))) {
if (!($result = Di::getInstance()->db->sql_query($sql_all_tot))) {
bb_die('Could not query private message information #2');
}
$pm_all_total = ($row = DB()->sql_fetchrow($result)) ? $row['total'] : 0;
$pm_all_total = ($row = Di::getInstance()->db->sql_fetchrow($result)) ? $row['total'] : 0;
//
// Build select box
@ -1395,11 +1397,11 @@ if ($mode == 'read') {
//
// Okay, let's build the correct folder
//
if (!($result = DB()->sql_query($sql))) {
if (!($result = Di::getInstance()->db->sql_query($sql))) {
bb_die('Could not query private messages');
}
if ($row = DB()->sql_fetchrow($result)) {
if ($row = Di::getInstance()->db->sql_fetchrow($result)) {
$i = 0;
do {
$privmsg_id = $row['privmsgs_id'];
@ -1445,7 +1447,7 @@ if ($mode == 'read') {
'U_READ' => $u_subject,
));
} while ($row = DB()->sql_fetchrow($result));
} while ($row = Di::getInstance()->db->sql_fetchrow($result));
generate_pagination(PM_URL . "?folder=$folder", $pm_total, $di->config->get('topics_per_page'), $start);
} else {

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'search');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -53,9 +55,9 @@ if (isset($_POST['del_my_post'])) {
bb_die($lang['NONE_SELECTED']);
}
DB()->query("UPDATE " . BB_POSTS . " SET user_post = 0 WHERE poster_id = {$user->id} AND topic_id IN($topic_csv)");
Di::getInstance()->db->query("UPDATE " . BB_POSTS . " SET user_post = 0 WHERE poster_id = {$user->id} AND topic_id IN($topic_csv)");
if (DB()->affected_rows()) {
if (Di::getInstance()->db->affected_rows()) {
//bb_die('Выбранные темы ['. count($_POST['topic_id_list']) .' шт.] удалены из списка "Мои сообщения"');
bb_die($lang['DEL_MY_MESSAGE']);
} else {
@ -72,7 +74,7 @@ if (isset($_POST['del_my_post'])) {
redirect('index.php');
}
DB()->query("UPDATE " . BB_POSTS . " SET user_post = 1 WHERE poster_id = {$user->id}");
Di::getInstance()->db->query("UPDATE " . BB_POSTS . " SET user_post = 1 WHERE poster_id = {$user->id}");
redirect("search.php?u={$user->id}");
}
@ -121,7 +123,7 @@ $forums_tbl = BB_FORUMS . ' f';
$posts_tbl = BB_POSTS . ' p';
$posts_text_tbl = BB_POSTS_TEXT . ' pt';
$posts_html_tbl = BB_POSTS_HTML . ' h';
$tr_snap_tbl = BB_BT_TRACKER_SNAP . ' sn';
$tr_snap_tbl = 'bb_bt_tracker_snap sn';
$topics_tbl = BB_TOPICS . ' t';
$torrents_tbl = BB_BT_TORRENTS . ' tor';
$tracker_tbl = BB_BT_TRACKER . ' tr';
@ -338,7 +340,7 @@ $datastore->rm('cat_forums');
// Restore previously found items list and search settings if we have valid $search_id
if ($search_id) {
$row = DB()->fetch_row("
$row = Di::getInstance()->db->fetch_row("
SELECT search_array, search_settings
FROM " . BB_SEARCH . "
WHERE session_id = '$session_id'
@ -451,7 +453,7 @@ $title_match = ($text_match_sql && ($title_only_val || $di->config->get('disable
$post_mode = (!$dl_search && ($display_as_val == $as_posts || isset($_GET['search_author'])));
// Start building SQL
$SQL = DB()->get_empty_sql_array();
$SQL = Di::getInstance()->db->get_empty_sql_array();
// Displaying "as posts" mode
if ($post_mode) {
@ -565,7 +567,7 @@ if ($post_mode) {
";
// Fetch posts data
if (!$unsorted_rows = DB()->fetch_rowset($sql)) {
if (!$unsorted_rows = Di::getInstance()->db->fetch_rowset($sql)) {
bb_die($lang['NO_SEARCH_MATCH']);
}
$tmp = $sorted_rows = array();
@ -759,7 +761,7 @@ else {
}
// Build SQL for displaying topics
$SQL = DB()->get_empty_sql_array();
$SQL = Di::getInstance()->db->get_empty_sql_array();
$join_dl = ($di->config->get('show_dl_status_in_search') && !IS_GUEST);
$SQL['SELECT'][] = "
@ -790,7 +792,7 @@ else {
// Fetch topics data
$topic_rows = array();
foreach (DB()->fetch_rowset($SQL) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($SQL) as $row) {
$topic_rows[$row['topic_id']] = $row;
}
if (!$topic_rows) {
@ -865,7 +867,7 @@ function fetch_search_ids($sql, $search_type = SEARCH_TYPE_POST)
global $lang, $search_id, $session_id, $items_found, $per_page;
$items_found = array();
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$items_found[] = $row['item_id'];
}
if (!$items_count = count($items_found)) {
@ -901,12 +903,12 @@ function fetch_search_ids($sql, $search_type = SEARCH_TYPE_POST)
foreach ($save_in_db as $name) {
$curr_set[$GLOBALS["{$name}_key"]] = $GLOBALS["{$name}_val"];
}
$search_settings = DB()->escape(serialize($curr_set));
$search_settings = Di::getInstance()->db->escape(serialize($curr_set));
$columns = 'session_id, search_type, search_id, search_time, search_settings, search_array';
$values = "'$session_id', $search_type, '$search_id', " . TIMENOW . ", '$search_settings', '$search_array'";
DB()->query("REPLACE INTO " . BB_SEARCH . " ($columns) VALUES ($values)");
Di::getInstance()->db->query("REPLACE INTO " . BB_SEARCH . " ($columns) VALUES ($values)");
}
return array_slice($items_found, 0, $per_page);
@ -922,9 +924,9 @@ function prevent_huge_searches($SQL)
$SQL['ORDER BY'] = array();
$SQL['LIMIT'] = array('0');
if (DB()->query($SQL) && ($row = DB()->fetch_row("SELECT FOUND_ROWS() AS rows_count"))) {
if (Di::getInstance()->db->query($SQL) && ($row = Di::getInstance()->db->fetch_row("SELECT FOUND_ROWS() AS rows_count"))) {
if ($row['rows_count'] > $di->config->get('limit_max_search_results')) {
# bb_log(str_compact(DB()->build_sql($SQL)) ." [{$row['rows_count']} rows]". LOG_LF, 'sql_huge_search');
# bb_log(str_compact(Di::getInstance()->db->build_sql($SQL)) ." [{$row['rows_count']} rows]". LOG_LF, 'sql_huge_search');
bb_die('Too_many_search_results');
}
}
@ -942,14 +944,14 @@ function username_search($search_match)
$sql = "
SELECT username
FROM " . BB_USERS . "
WHERE username LIKE '" . DB()->escape($username_search) . "'
FROM bb_users
WHERE username LIKE '" . Di::getInstance()->db->escape($username_search) . "'
AND user_id <> " . GUEST_UID . "
ORDER BY username
LIMIT 200
";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$username = htmlCHR(stripslashes(html_entity_decode($row['username'])));
$username_list .= '<option value="' . $username . '">' . $username . '</option>';
}

View file

@ -25,101 +25,149 @@
namespace TorrentPier;
use Zend\Config\Config as ZendConfig;
use \Exception;
/**
* Class Config
* @package TorrentPier
*/
class Config extends ZendConfig
class Config implements \ArrayAccess
{
protected $root;
public $dbQuery;
/**
* Config constructor.
*
* @param array $array
* @param bool $allowModifications
* @param Config|null $root
*/
public function __construct(array $array, $allowModifications = false, Config &$root = null)
protected $data;
protected $mutableData = [];
protected $dbLoaded = false;
public function __construct(array $data)
{
$this->allowModifications = (bool)$allowModifications;
$this->data = $data;
}
$this->root = $root;
public function __set($name, $value)
{
$this->set($name, $value);
}
foreach ($array as $key => $value) {
if (is_array($value)) {
$this->data[$key] = new static($value, $this->allowModifications, $this);
public function __get($name)
{
return $this->get($name);
}
public function offsetExists($offset)
{
return isset($this->data[$offset]) || isset($this->mutableData[$offset]);
}
public function offsetGet($name)
{
$default = null;
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} elseif (array_key_exists($name, $this->mutableData)) {
return $this->mutableData[$name];
} elseif (strpos($name, '.') !== false) {
return $this->getByPath(explode('.', $name), $default);
} else {
$this->data[$key] = $value;
$ret = $default;
if (!$this->dbLoaded && isset($this->dbQuery)) {
$this->dbLoaded = true;
// TODO: cache
$db = Di::getInstance()->db;
foreach ($db->query($this->dbQuery)->fetchAll($db::FETCH_NUM) as $row) {
if (!array_key_exists($row[0], $this->data)) {
if ($row[0] == $name) {
$ret = $row[1];
}
$this->data[$row[0]] = $row[1];
}
}
}
return $ret;
}
}
public function offsetSet($offset, $value)
{
$this->set($offset, $value);
}
public function offsetUnset($offset)
{
$this->delete($offset);
}
public function isExists($name)
{
return isset($this->data[$name]) || isset($this->mutableData[$name]);
}
/**
* @inheritdoc
* @param $name
* @param $value
* @throws Exception
*/
public function set($name, $value)
{
if (isset($this->data[$name])) {
throw new Exception("$name is read only");
}
$this->mutableData[$name] = $value;
}
/**
* @param $name
* @throws Exception
*/
public function delete($name)
{
if (isset($this->data[$name])) {
throw new Exception("$name is read only");
}
unset($this->mutableData[$name]);
}
public function get($name, $default = null)
{
$result = parent::get($name, null);
if ($result === null) {
if (strpos($name, '.')) {
$keys = explode('.', $name);
$result = $this;
foreach ($keys as $key) {
$result = $result->get($key);
if (null === $result) {
break;
}
}
}
$result = $result ?: $default;
}
return $this->prepareValue($result);
}
/**
* Parse value
*
* @param mixed $value
* @return mixed
*/
protected function prepareValue($value)
{
if (is_string($value)) {
$strPos = strpos($value, '{self.');
if ($strPos !== false) {
$strPos += 6;
$key = substr($value, $strPos, (strpos($value, '}') - $strPos));
$value = str_replace('{self.' . $key . '}', $this->root->get($key, ''), $value);
}
}
return $value;
}
/**
* @inheritdoc
*/
public function toArray()
{
$array = [];
$data = $this->data;
/** @var self $value */
foreach ($data as $key => $value) {
if ($value instanceof self) {
$array[$key] = $value->toArray();
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
} elseif (array_key_exists($name, $this->mutableData)) {
return $this->mutableData[$name];
} elseif (strpos($name, '.') !== false) {
return $this->getByPath(explode('.', $name), $default);
} else {
$array[$key] = $this->prepareValue($value);
$ret = $default;
if (!$this->dbLoaded && isset($this->dbQuery)) {
$this->dbLoaded = true;
// TODO: cache
foreach (Di::getInstance()->db->query($this->dbQuery)->fetchAll() as $row) {
if (!array_key_exists($row['config_name'], $this->data)) {
if ($row['config_name'] == $name) {
$ret = $row['config_value'];
}
$this->data[$row['config_name']] = $row['config_value'];
}
}
}
return $ret;
}
}
return $array;
public function getByPath(array $path, $default = null)
{
$ret = $default;
$last = count($path) - 1;
$tmp = $this->data;
foreach ($path as $k => $part) {
if (array_key_exists($part, $tmp)) {
if ($k == $last) {
$ret = $tmp[$part];
} else {
$tmp = $tmp[$part];
}
}
}
return $ret;
}
public function merge(array $data)
{
$this->data = array_replace_recursive($this->data, $data);
}
}

310
src/Db.php Normal file
View file

@ -0,0 +1,310 @@
<?php
/**
* MIT License
*
* Copyright (c) 2005-2017 TorrentPier
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
namespace TorrentPier;
use \PDO;
use \PDOException;
use \PDOStatement;
class Db extends PDO
{
const DEFAULT_OPTIONS = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
public $type;
public $stat;
public $sqlTimeTotal = 0;
public $numQueries = 0;
public function __construct(array $config)
{
$this->stat = $config['stat'] ?? true;
$type = $this->type = $config['type'] ?? 'mysql';
$options = $config['options'] ?? [];
$hostname = $config['hostname'] ?? '127.0.0.1';
$database = $config['database'] ?? null;
$username = $config['username'] ?? null;
$password = $config['password'] ?? null;
if (is_callable($password)) {
$password = $password();
}
$socket = $config['socket'] ?? null;
$port = $config['port'] ?? null;
$charset = $config['charset'] ?? null;
$dsn = null;
switch ($this->type) {
/** @noinspection PhpMissingBreakStatementInspection */
case 'mariadb':
$type = 'mysql';
// no break
case 'mysql':
if (isset($socket)) {
if ($socket === true) {
$socket = ini_get('pdo_mysql.default_socket');
}
$dsn = "$type:unix_socket=$socket;dbname=$database";
} else {
$dsn = "$type:host=$hostname" . (isset($port) ? ";port=$port" : '') . ";dbname=$database";
}
break;
case 'pgsql':
$dsn = "$type:host=$hostname" . (isset($port) ? ";port=$port" : '') . ";dbname=$database";
break;
case 'sybase':
$dsn = "dblib:host=$hostname" . (isset($port) ? ":$port" : '') . ";dbname=$database";
break;
case 'oracle':
$dbname = isset($hostname) ?
"//$hostname" . (isset($port) ? ":$port" : ':1521') . "/$database" :
$database;
$dsn = "oci:dbname=$dbname" . (isset($charset) ? ";charset=$charset" : '');
break;
case 'mssql':
$dsn = strstr(PHP_OS, 'WIN') ?
"sqlsrv:server=$hostname" . (isset($port) ? ",$port" : '') . ";database=$database" :
"dblib:host=$hostname" . (isset($port) ? ":$port" : '') . ";dbname=$database";
break;
case 'sqlite':
$dsn = "$type:$database";
$username = null;
$password = null;
break;
case 'default':
throw new PDOException("Unknown database driver");
}
$dsn .= ";charset=utf8";
parent::__construct(
$dsn,
$username,
is_callable($password) ? $password() : $password,
array_replace_recursive(
static::DEFAULT_OPTIONS,
$options
)
);
$this->setAttribute(static::ATTR_STATEMENT_CLASS, ['\\TorrentPier\\Db\\Statement', [$this]]);
}
public function prepare($statement, $options = [])
{
if (!$this->stat) {
return parent::prepare($statement);
}
$t = microtime(true);
$ret = parent::prepare($statement);
$this->sqlTimeTotal += microtime(true) - $t;
return $ret;
}
public function query($statement, ...$args)
{
if (!$this->stat) {
return parent::query($statement, ...$args);
}
$t = microtime(true);
$ret = parent::query($statement, ...$args);
$this->sqlTimeTotal += microtime(true) - $t;
$this->numQueries++;
return $ret;
}
public function exec($statement)
{
if (!$this->stat) {
return parent::exec($statement);
}
$t = microtime(true);
$ret = parent::exec($statement);
$this->sqlTimeTotal += microtime(true) - $t;
$this->numQueries++;
return $ret;
}
/** @deprecated
* @param $statement
* @return mixed
*/
public function fetch_row($statement)
{
return $this->sql_fetchrow($this->sql_query($statement));
}
/** @deprecated
* @param $statement
* @return array
*/
public function fetch_rowset($statement)
{
return $this->sql_fetchrowset($this->sql_query($statement));
}
/** @deprecated
* @param PDOStatement $statement
* @return array
*/
public function sql_fetchrow(PDOStatement $statement)
{
return $statement->fetch();
}
/** @deprecated
* @param PDOStatement $statement
* @return array
*/
public function sql_fetchrowset(PDOStatement $statement)
{
return $statement->fetchAll();
}
/** @deprecated
* @param $statement
* @return \PDOStatement
*/
public function sql_query($statement)
{
if (is_array($statement)) {
$statement = $this->build_sql($statement);
}
return $this->query($statement);
}
/**
* @deprecated
* Escape data used in sql query
* @param $v
* @param bool $check_type
* @param bool $dont_escape
* @return string
*/
public function escape($v, $check_type = false, $dont_escape = false)
{
if ($dont_escape) {
return $v;
}
if (!$check_type) {
return $this->quote($v);
}
switch (true) {
case is_string($v):
return $this->quote($v);
case is_int($v):
return "$v";
case is_bool($v):
return ($v) ? '1' : '0';
case is_float($v):
return "'$v'";
case is_null($v):
return 'NULL';
}
// if $v has unsuitable type
throw new PDOException(__FUNCTION__ . ' - wrong params');
}
/**
* @deprecated
* Return number of rows
* @param PDOStatement $result
* @return int
*/
public function num_rows(PDOStatement $result)
{
return $result->rowCount();
}
/** @deprecated
* @param $sql_ary
* @return string
*/
public function build_sql($sql_ary)
{
$sql = '';
array_deep($sql_ary, 'array_unique', false, true);
foreach ($sql_ary as $clause => $ary) {
switch ($clause) {
case 'SELECT':
$sql .= ($ary) ? ' SELECT ' . join(' ', $sql_ary['select_options']) . ' ' . join(', ', $ary) : '';
break;
case 'FROM':
$sql .= ($ary) ? ' FROM ' . join(', ', $ary) : '';
break;
case 'INNER JOIN':
$sql .= ($ary) ? ' INNER JOIN ' . join(' INNER JOIN ', $ary) : '';
break;
case 'LEFT JOIN':
$sql .= ($ary) ? ' LEFT JOIN ' . join(' LEFT JOIN ', $ary) : '';
break;
case 'WHERE':
$sql .= ($ary) ? ' WHERE ' . join(' AND ', $ary) : '';
break;
case 'GROUP BY':
$sql .= ($ary) ? ' GROUP BY ' . join(', ', $ary) : '';
break;
case 'HAVING':
$sql .= ($ary) ? ' HAVING ' . join(' AND ', $ary) : '';
break;
case 'ORDER BY':
$sql .= ($ary) ? ' ORDER BY ' . join(', ', $ary) : '';
break;
case 'LIMIT':
$sql .= ($ary) ? ' LIMIT ' . join(', ', $ary) : '';
break;
}
}
return trim($sql);
}
/** @deprecated */
public function get_empty_sql_array()
{
return [
'SELECT' => [],
'select_options' => [],
'FROM' => [],
'INNER JOIN' => [],
'LEFT JOIN' => [],
'WHERE' => [],
'GROUP BY' => [],
'HAVING' => [],
'ORDER BY' => [],
'LIMIT' => []
];
}
}

View file

@ -1,261 +0,0 @@
<?php
/**
* MIT License
*
* Copyright (c) 2005-2017 TorrentPier
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
namespace TorrentPier\Db;
use TorrentPier\Config;
use Zend\Db\Adapter\Driver\ResultInterface;
use Zend\Db\Adapter\Platform\PlatformInterface;
use Zend\Db\Adapter\Profiler\Profiler;
use Zend\Db\Adapter\Profiler\ProfilerInterface;
use Zend\Db\Exception\InvalidArgumentException;
use Zend\Db\ResultSet\ResultSetInterface;
use Zend\Db\Sql\Delete;
use Zend\Db\Sql\Expression;
use Zend\Db\Sql\Insert;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Update;
use Zend\Db\Sql\Where;
/**
* Class Adapter
* @package TorrentPier\Db
*/
class Adapter extends \Zend\Db\Adapter\Adapter
{
/**
* @var Entity|null
*/
protected $resultWrapper;
/**
* {@inheritdoc}
*/
public function __construct(
$driver,
PlatformInterface $platform = null,
ResultSetInterface $queryResultPrototype = null,
ProfilerInterface $profiler = null
) {
if ($driver instanceof Config) {
$driver = $driver->toArray();
}
if ($profiler === null && is_array($driver) && !empty($driver['debug'])) {
$profiler = new Profiler();
}
parent::__construct($driver, $platform, $queryResultPrototype, $profiler);
}
/**
* Get sql object.
*
* @return Sql
*/
protected function getSql()
{
return new Sql($this);
}
/**
* Prepare table name.
*
* @param $table
* @return mixed
*/
protected function prepareTable($table)
{
$this->resultWrapper = null;
if (is_string($table) && class_exists($table)) {
$this->resultWrapper = new $table;
$table = $this->resultWrapper->table();
}
return $table;
}
/**
* Insert row to database.
*
* @param $table
* @param array $values
* @return mixed|null
* @throws InvalidArgumentException
*/
public function insert($table, array $values)
{
$table = $this->prepareTable($table);
$sql = $this->getSql();
/** @var Insert $sqlInsert */
$sqlInsert = $sql->insert($table);
$sqlInsert->values($values);
$statementContainer = $sql->prepareStatementForSqlObject($sqlInsert);
/** @var ResultInterface $result */
$result = $statementContainer->execute();
return $result->getGeneratedValue();
}
/**
* Update rows in database.
*
* @param $table
* @param array $values
* @param Where|\Closure|string|array $where
* @return int
* @throws InvalidArgumentException
*/
public function update($table, array $values, $where)
{
$table = $this->prepareTable($table);
$sql = $this->getSql();
/** @var Update $sqlUpdate */
$sqlUpdate = $sql->update($table);
$sqlUpdate->set($values);
$sqlUpdate->where($where);
$statementContainer = $sql->prepareStatementForSqlObject($sqlUpdate);
/** @var ResultInterface $result */
$result = $statementContainer->execute();
return $result->getAffectedRows();
}
/**
* Delete rows from database.
*
* @param string $table
* @param array $where
* @return int
*/
public function delete($table, array $where)
{
$table = $this->prepareTable($table);
$sql = $this->getSql();
/** @var Delete $sqlDelete */
$sqlDelete = $sql->delete($table);
$sqlDelete->where($where);
$statementContainer = $sql->prepareStatementForSqlObject($sqlDelete);
/** @var ResultInterface $result */
$result = $statementContainer->execute();
return $result->getAffectedRows();
}
/**
* Select rows from database.
*
* @param $table
* @param null|\Closure|array $queryCallback
* @return PrepareStatement
* @throws InvalidArgumentException
*/
public function select($table, $queryCallback = null)
{
$table = $this->prepareTable($table);
$sql = $this->getSql();
/** @var Select $sqlDelete */
$sqlSelect = $sql->select($table);
if ($queryCallback instanceof \Closure) {
call_user_func($queryCallback, $sqlSelect);
} elseif (is_array($queryCallback)) {
$sqlSelect->where($queryCallback);
}
$statementContainer = $sql->prepareStatementForSqlObject($sqlSelect);
return new PrepareStatement($statementContainer, $this->resultWrapper);
}
/**
* Count rows in database.
*
* @param $table
* @param null|\Closure|array $queryCallback
* @return int
* @throws InvalidArgumentException
*/
public function count($table, $queryCallback = null)
{
$table = $this->prepareTable($table);
$sql = $this->getSql();
/** @var Select $sqlDelete */
$sqlSelect = $sql->select($table);
if ($queryCallback instanceof \Closure) {
call_user_func($queryCallback, $sqlSelect);
} elseif (is_array($queryCallback)) {
$sqlSelect->where($queryCallback);
}
$sqlSelect->columns(['count' => new Expression('COUNT(*)')]);
$statementContainer = $sql->prepareStatementForSqlObject($sqlSelect);
/** @var ResultInterface $result */
$result = $statementContainer->execute();
return $result->current()['count'];
}
/**
* Increment field by query.
*
* @param string $table
* @param string $field
* @param Where|\Closure|string|array $where
* @param int $num
* @return int
* @throws InvalidArgumentException
*/
public function increment($table, $field, $where = null, $num = 1)
{
return $this->update($table, [
$field => new Expression('? + ?', [$field, $num], [Expression::TYPE_IDENTIFIER, Expression::TYPE_VALUE])
], $where);
}
/**
* Decrement field by query.
*
* @param string $table
* @param string $field
* @param Where|\Closure|string|array $where
* @param int $num
* @return int
* @throws InvalidArgumentException
*/
public function decrement($table, $field, $where = null, $num = 1)
{
return $this->update($table, [
$field => new Expression('? - ?', [$field, $num], [Expression::TYPE_IDENTIFIER, Expression::TYPE_VALUE])
], $where);
}
}

View file

@ -1,101 +0,0 @@
<?php
/**
* MIT License
*
* Copyright (c) 2005-2017 TorrentPier
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
namespace TorrentPier\Db;
use Zend\Db\Adapter\Driver\StatementInterface;
use Zend\Db\Exception\InvalidArgumentException;
use Zend\Db\ResultSet\HydratingResultSet;
use Zend\Db\ResultSet\ResultSet;
use Zend\Hydrator\Reflection;
class PrepareStatement
{
/**
* @var StatementInterface
*/
protected $statementContainer;
/**
* @var Entity
*/
protected $resultWrapper;
/**
* PrepareStatement constructor.
*
* @param StatementInterface $statementContainer
* @param Entity|null $resultWrapper
*/
public function __construct(StatementInterface $statementContainer, Entity $resultWrapper = null)
{
$this->statementContainer = $statementContainer;
$this->resultWrapper = $resultWrapper;
}
/**
* Executing a query and wrapping a result.
*
* @return HydratingResultSet|ResultSet
* @throws InvalidArgumentException
*/
protected function execute()
{
$result = $this->statementContainer->execute();
if ($this->resultWrapper) {
$entityClass = $this->resultWrapper;
$resultSet = new HydratingResultSet(new Reflection(), new $entityClass);
$resultSet->initialize($result);
} else {
$resultSet = new ResultSet();
$resultSet->initialize($result);
}
return $resultSet;
}
/**
* Current result.
*
* @return array|null
* @throws InvalidArgumentException
*/
public function one()
{
return $this->execute()->current() ?: null;
}
/**
* All results.
*
* @return HydratingResultSet|ResultSet
* @throws InvalidArgumentException
*/
public function all()
{
return $this->execute();
}
}

View file

@ -25,12 +25,27 @@
namespace TorrentPier\Db;
abstract class Entity
{
protected $table;
use \PDOStatement;
use TorrentPier\Db;
public function table()
class Statement extends PDOStatement
{
return $this->table;
protected $db = null;
protected function __construct(Db $db)
{
$this->db = $db;
}
public function execute($input_parameters = null)
{
if (!$this->db->stat) {
return parent::execute($input_parameters);
}
$t = microtime(true);
$ret = parent::execute($input_parameters);
$this->db->sqlTimeTotal += microtime(true) - $t;
$this->db->numQueries++;
return $ret;
}
}

View file

@ -30,6 +30,9 @@ use Pimple\Container;
/**
* Class Di
* Dependency Injection Container.
*
* @property Config $config
* @property Db $db
*/
class Di extends Container
{

View file

@ -41,10 +41,10 @@ class CacheServiceProvider implements ServiceProviderInterface
public function register(Container $container)
{
$container['cache'] = function (Container $container) {
$setting = $container['config.services.cache'];
$setting = $container['config']->get('services.cache');
/** @var Adapter $adapter */
$adapter = new $setting['adapter']();
$adapter->setOptions($setting['options']->toArray());
$adapter->setOptions($setting['options']);
return $adapter;
};
}

View file

@ -41,11 +41,15 @@ class ConfigServiceProvider implements ServiceProviderInterface
*/
public function register(Container $container)
{
$container['config'] = function ($container) {
$container['config'] = function (Container $container) {
$config = new Config(Factory::fromFile($container['file.system.main']));
if (isset($container['file.local.main']) && file_exists($container['file.local.main'])) {
$config->merge(new Config(Factory::fromFile($container['file.local.main'])));
$config->merge(Factory::fromFile($container['file.local.main']));
}
if (isset($container['config.dbQuery'])) {
$config->dbQuery = $container['config.dbQuery'];
}
return $config;

View file

@ -27,7 +27,7 @@ namespace TorrentPier\ServiceProviders;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
use TorrentPier\Db\Adapter;
use TorrentPier\Db;
/**
* Class DbServiceProvider
@ -40,10 +40,8 @@ class DbServiceProvider implements ServiceProviderInterface
*/
public function register(Container $container)
{
$container['db'] = function ($container) {
$adapter = new Adapter($container['config.services.db']);
unset($container['config.services.db']);
return $adapter;
$container['db'] = function (Container $container) {
return new Db($container['config']->get('services.db'));
};
}
}

View file

@ -45,8 +45,6 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
'key1' => 'value1',
'key2' => [
'key3' => 'value2',
'key4' => '{self.key1}',
'key5' => '{self.key2.key4}',
]
];
@ -62,31 +60,9 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
{
static::assertEquals($this->config->get('key1'), 'value1');
static::assertEquals($this->config->get('key2.key3'), 'value2');
static::assertEquals($this->config->get('key2.key4'), 'value1');
static::assertEquals($this->config->get('key2.key5'), 'value1');
static::assertEquals($this->config->get('key2')->get('key3'), 'value2');
static::assertEquals($this->config['key1'], 'value1');
static::assertEquals($this->config['key2.key3'], 'value2');
static::assertEquals($this->config['key2.key4'], 'value1');
static::assertEquals($this->config['key2.key5'], 'value1');
static::assertEquals($this->config['key2']['key3'], 'value2');
static::assertEquals($this->config['key2.key6'], null);
}
/**
* @covers \TorrentPier\Config::toArray
*/
public function testToArray()
{
static::assertEquals($this->config->toArray(), [
'key1' => 'value1',
'key2' => [
'key3' => 'value2',
'key4' => 'value1',
'key5' => 'value1',
]
]);
}
}

View file

@ -1,234 +0,0 @@
<?php
/**
* MIT License
*
* Copyright (c) 2005-2017 TorrentPier
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
namespace TorrentPier\Db;
use Zend\Db\Adapter\Driver\Pdo\Connection;
use Zend\Db\Adapter\Driver\Pdo\Pdo;
use Zend\Db\Adapter\Driver\Pdo\Result;
use Zend\Db\Adapter\Driver\Pdo\Statement;
use Zend\Db\Adapter\Platform\AbstractPlatform;
use Zend\Db\Sql\Delete;
use Zend\Db\Sql\Insert;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Update;
class AdapterTest extends \PHPUnit_Framework_TestCase
{
const AFFECTED_ROWS = 2;
/**
* @var \PHPUnit_Framework_MockObject_MockObject|Adapter
*/
protected $adapterMock;
/**
* @var \PHPUnit_Framework_MockObject_MockObject|Sql
*/
protected $sqlMock;
/**
* @var \PHPUnit_Framework_MockObject_MockObject|Statement
*/
protected $statementMock;
/**
* {@inheritdoc}
*/
public function setUp()
{
$resultMock = $this->getMock(Result::class, ['getGeneratedValue', 'getAffectedRows']);
$resultMock->method('getGeneratedValue')->willReturn(self::AFFECTED_ROWS);
$resultMock->method('getAffectedRows')->willReturn(self::AFFECTED_ROWS);
$this->statementMock = $this->getMock(Statement::class, ['execute']);
$this->statementMock->method('execute')->willReturn($resultMock);
$this->adapterMock = $this->getMockBuilder(Adapter::class)
->setMethods(['getSql', 'getPlatform', 'getDriver'])
->disableOriginalConstructor()
->getMock();
$platformMock = $this->getMock(AbstractPlatform::class, ['getName', 'quoteIdentifier', 'quoteValue']);
$platformMock->method('quoteIdentifier')->willReturnCallback(function ($v) {
return '`' . $v . '`';
});
$platformMock->method('quoteValue')->willReturnCallback(function ($v) {
if (is_int($v)) {
return $v;
} elseif ($v instanceof \DateTime) {
$v = $v->format('Y-m-d H:i:s');
}
return '\'' . $v . '\'';
});
$platformMock->method('getName')->willReturn('platform name');
$this->adapterMock->method('getPlatform')->willReturn($platformMock);
$connectionMock = $this->getMock(Connection::class);
$driverMock = $this->getMock(Pdo::class, [], [
$connectionMock,
$this->statementMock,
$resultMock,
]);
$this->adapterMock->method('getDriver')->willReturn($driverMock);
$this->sqlMock = $this->getMockBuilder(Sql::class)
->setMethods(['prepareStatementForSqlObject'])
->setConstructorArgs([$this->adapterMock])
->getMock();
$this->adapterMock->method('getSql')->willReturn($this->sqlMock);
}
/**
* Create sql insert query.
* @covers \TorrentPier\Db\Adapter::insert
*/
public function testInsert()
{
$date = new \DateTime('now', new \DateTimeZone('UTC'));
$this->sqlMock->expects(static::once())
->method('prepareStatementForSqlObject')
->willReturnCallback(function (Insert $sqlObject) use ($date) {
static::assertEquals(
join(' ', [
"INSERT INTO",
"`tableName` (`field_int`, `field_str`, `field_date`)",
"VALUES (123, 'string', '{$date->format('Y-m-d H:i:s')}')",
]),
$this->sqlMock->buildSqlString($sqlObject)
);
return $this->statementMock;
});
$actual = $this->adapterMock->insert('tableName', [
'field_int' => 123,
'field_str' => 'string',
'field_date' => $date,
]);
static::assertEquals(self::AFFECTED_ROWS, $actual);
}
/**
* Create sql update query.
* @covers \TorrentPier\Db\Adapter::update
*/
public function testUpdate()
{
$date = new \DateTime('now', new \DateTimeZone('UTC'));
$this->sqlMock->expects(static::once())
->method('prepareStatementForSqlObject')
->willReturnCallback(function (Update $sqlObject) use ($date) {
static::assertEquals(
join(' ', [
"UPDATE `tableName` SET",
"`field_int` = 123, `field_str` = 'string', `field_date` = '{$date->format('Y-m-d H:i:s')}'",
"WHERE \"field_id\" = 1"
]),
$this->sqlMock->buildSqlString($sqlObject)
);
return $this->statementMock;
});
$actual = $this->adapterMock->update('tableName', [
'field_int' => 123,
'field_str' => 'string',
'field_date' => $date,
], [
'field_id' => 1
]);
static::assertEquals(self::AFFECTED_ROWS, $actual);
}
/**
* Create sql delete query.
* @covers \TorrentPier\Db\Adapter::delete
*/
public function testDelete()
{
$this->sqlMock->expects(static::once())
->method('prepareStatementForSqlObject')
->willReturnCallback(function (Delete $sqlObject) {
static::assertEquals(
"DELETE FROM `tableName` WHERE \"field_id\" = 1",
$this->sqlMock->buildSqlString($sqlObject)
);
return $this->statementMock;
});
$actual = $this->adapterMock->delete('tableName', [
'field_id' => 1
]);
static::assertEquals(self::AFFECTED_ROWS, $actual);
}
/**
* Create sql increment query.
* @covers \TorrentPier\Db\Adapter::increment
*/
public function testIncrement()
{
$this->sqlMock->expects(static::once())
->method('prepareStatementForSqlObject')
->willReturnCallback(function (Update $sqlObject) {
static::assertEquals(
"UPDATE `tableName` SET `inc` = \"inc\" + 1 WHERE \"field_id\" = 1",
$this->sqlMock->buildSqlString($sqlObject)
);
return $this->statementMock;
});
$actual = $this->adapterMock->increment('tableName', 'inc', ['field_id' => 1]);
static::assertEquals(self::AFFECTED_ROWS, $actual);
}
/**
* Create sql decrement query.
* @covers \TorrentPier\Db\Adapter::decrement
*/
public function testDecrement()
{
$this->sqlMock->expects(static::once())
->method('prepareStatementForSqlObject')
->willReturnCallback(function (Update $sqlObject) {
static::assertEquals(
"UPDATE `tableName` SET `inc` = \"inc\" - 1 WHERE \"field_id\" = 1",
$this->sqlMock->buildSqlString($sqlObject)
);
return $this->statementMock;
});
$actual = $this->adapterMock->decrement('tableName', 'inc', ['field_id' => 1]);
static::assertEquals(self::AFFECTED_ROWS, $actual);
}
}

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'tracker');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -79,7 +81,7 @@ $posts_tbl = BB_POSTS . ' p';
$topics_tbl = BB_TOPICS . ' t';
$users_tbl = BB_USERS . ' u';
$tracker_tbl = BB_BT_TRACKER . ' tr';
$tr_snap_tbl = BB_BT_TRACKER_SNAP . ' sn';
$tr_snap_tbl = 'bb_bt_tracker_snap sn';
$dl_stat_tbl = BB_BT_DLSTATUS . ' dl';
//
@ -321,7 +323,7 @@ $tor_list_ary = array();
$tor_list_sql = '';
if ($search_id) {
$row = DB()->fetch_row("
$row = Di::getInstance()->db->fetch_row("
SELECT search_array, search_settings
FROM " . BB_SEARCH . "
WHERE session_id = '$session_id'
@ -516,7 +518,7 @@ if ($allowed_forums) {
foreach ($save_in_db as $name) {
$curr_set[${"{$name}_key"}] = ${"{$name}_val"};
}
$curr_set_sql = DB()->escape(serialize($curr_set));
$curr_set_sql = Di::getInstance()->db->escape(serialize($curr_set));
// Text search
$search_match_topics_csv = '';
@ -547,7 +549,7 @@ if ($allowed_forums) {
$join_dl = $dl_search;
// Start building SQL
$SQL = DB()->get_empty_sql_array();
$SQL = Di::getInstance()->db->get_empty_sql_array();
// SELECT
$SQL['SELECT'][] = "tor.topic_id";
@ -621,7 +623,7 @@ if ($allowed_forums) {
$tor_list_sql = '';
$tor_count = 0;
} else {
foreach (DB()->fetch_rowset($SQL) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($SQL) as $row) {
$tor_list_ary[] = $row['topic_id'];
}
$tor_list_sql = join(',', $tor_list_ary);
@ -643,7 +645,7 @@ if ($allowed_forums) {
$columns = 'session_id, search_type, search_id, search_time, search_settings, search_array';
$values = "'$session_id', $search_type, '$search_id', " . TIMENOW . ", '$curr_set_sql', '$tor_list_sql'";
DB()->query("REPLACE INTO " . BB_SEARCH . " ($columns) VALUES ($values)");
Di::getInstance()->db->query("REPLACE INTO " . BB_SEARCH . " ($columns) VALUES ($values)");
}
unset($columns, $values, $curr_set_sql, $tor_list_sql);
@ -704,9 +706,9 @@ if ($allowed_forums) {
$limit
";
$passkey = DB()->fetch_row("SELECT auth_key FROM " . BB_BT_USERS . " WHERE user_id = " . (int)$user_id . " LIMIT 1");
$passkey = Di::getInstance()->db->fetch_row("SELECT auth_key FROM " . BB_BT_USERS . " WHERE user_id = " . (int)$user_id . " LIMIT 1");
// Build torrents table
foreach (DB()->fetch_rowset($sql) as $tor) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $tor) {
$dl = isset($tor['speed_down']) ? $tor['speed_down'] : 0;
$ul = isset($tor['speed_up']) ? $tor['speed_up'] : 0;

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'forum');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -162,10 +164,10 @@ if (!$forum_data['forum_parent'] && isset($forums['f'][$forum_id]['subforums'])
f.forum_id, f.forum_status, f.forum_last_post_id, f.forum_posts, f.forum_topics,
t.topic_last_post_time, t.topic_id AS last_topic_id, t.topic_title AS last_topic_title,
p.poster_id AS sf_last_user_id, IF(p.poster_id = $anon, p.post_username, u.username) AS sf_last_username, u.user_rank
FROM " . BB_FORUMS . " f
LEFT JOIN " . BB_TOPICS . " t ON(f.forum_last_post_id = t.topic_last_post_id)
FROM bb_forums f
LEFT JOIN bb_topics t ON(f.forum_last_post_id = t.topic_last_post_id)
LEFT JOIN " . BB_POSTS . " p ON(f.forum_last_post_id = p.post_id)
LEFT JOIN " . BB_USERS . " u ON(p.poster_id = u.user_id)
LEFT JOIN bb_users u ON(p.poster_id = u.user_id)
WHERE f.forum_parent = $forum_id
$only_new_sql
$ignore_forum_sql
@ -173,7 +175,7 @@ if (!$forum_data['forum_parent'] && isset($forums['f'][$forum_id]['subforums'])
ORDER BY f.forum_order
";
if ($rowset = DB()->fetch_rowset($sql)) {
if ($rowset = Di::getInstance()->db->fetch_rowset($sql)) {
$template->assign_vars(array(
'SHOW_SUBFORUMS' => true,
'FORUM_IMG' => $images['forum'],
@ -270,12 +272,12 @@ if (!empty($_REQUEST['topicdays'])) {
if (($req_topic_days = $di->request->query->getInt('topicdays')) && isset($sel_previous_days[$req_topic_days])) {
$sql = "
SELECT COUNT(*) AS forum_topics
FROM " . BB_TOPICS . "
FROM bb_topics
WHERE forum_id = $forum_id
AND topic_last_post_time > " . (TIMENOW - 86400 * $req_topic_days) . "
";
if ($row = DB()->fetch_row($sql)) {
if ($row = Di::getInstance()->db->fetch_row($sql)) {
$topic_days = $req_topic_days;
$forum_topics = $row['forum_topics'];
}
@ -317,9 +319,9 @@ if ($forum_data['allow_reg_tracker']) {
$select_tor_sql .= ($join_dl) ? ', dl.user_status AS dl_status' : '';
$join_tor_sql = "
LEFT JOIN " . BB_BT_TORRENTS . " tor ON(t.topic_id = tor.topic_id)
LEFT JOIN bb_bt_torrents tor ON(t.topic_id = tor.topic_id)
LEFT JOIN " . BB_BT_USERS . " bt ON(bt.user_id = {$userdata['user_id']})
LEFT JOIN " . BB_BT_TRACKER_SNAP . " sn ON(tor.topic_id = sn.topic_id)
LEFT JOIN bb_bt_tracker_snap sn ON(tor.topic_id = sn.topic_id)
";
$join_tor_sql .= ($join_dl) ? " LEFT JOIN " . BB_BT_DLSTATUS . " dl ON(dl.user_id = {$userdata['user_id']} AND dl.topic_id = t.topic_id)" : '';
}
@ -344,7 +346,7 @@ $topic_ids = $topic_rowset = array();
// IDs
$sql = "
SELECT t.topic_id
FROM " . BB_TOPICS . " t
FROM bb_topics t
WHERE t.forum_id = $forum_id
$only_new_sql
$title_match_sql
@ -352,24 +354,24 @@ $sql = "
$order_sql
LIMIT $start, $topics_per_page
";
foreach (DB()->fetch_rowset($sql) as $row) {
foreach (Di::getInstance()->db->fetch_rowset($sql) as $row) {
$topic_ids[] = $row['topic_id'];
}
// Titles, posters etc.
if ($topics_csv = join(',', $topic_ids)) {
$topic_rowset = DB()->fetch_rowset("
$topic_rowset = Di::getInstance()->db->fetch_rowset("
SELECT
t.*, t.topic_poster AS first_user_id, u1.user_rank as first_user_rank,
IF(t.topic_poster = $anon, p1.post_username, u1.username) AS first_username,
p2.poster_id AS last_user_id, u2.user_rank as last_user_rank,
IF(p2.poster_id = $anon, p2.post_username, u2.username) AS last_username
$select_tor_sql
FROM " . BB_TOPICS . " t
FROM bb_topics t
LEFT JOIN " . BB_POSTS . " p1 ON(t.topic_first_post_id = p1.post_id)
LEFT JOIN " . BB_USERS . " u1 ON(t.topic_poster = u1.user_id)
LEFT JOIN bb_users u1 ON(t.topic_poster = u1.user_id)
LEFT JOIN " . BB_POSTS . " p2 ON(t.topic_last_post_id = p2.post_id)
LEFT JOIN " . BB_USERS . " u2 ON(p2.poster_id = u2.user_id)
LEFT JOIN bb_users u2 ON(p2.poster_id = u2.user_id)
$join_tor_sql
WHERE t.topic_id IN($topics_csv)
$where_tor_sql

View file

@ -23,6 +23,8 @@
* SOFTWARE.
*/
use \TorrentPier\Di;
define('BB_SCRIPT', 'topic');
define('BB_ROOT', './');
require(BB_ROOT . 'common.php');
@ -83,15 +85,15 @@ $tracking_forums = get_tracks('forum');
// Get forum/topic data
if ($topic_id) {
$sql = "SELECT t.*, f.*, tw.notify_status
FROM " . BB_TOPICS . " t
LEFT JOIN " . BB_FORUMS . " f USING(forum_id)
FROM bb_topics t
LEFT JOIN bb_forums f USING(forum_id)
LEFT JOIN " . BB_TOPICS_WATCH . " tw ON(tw.topic_id = t.topic_id AND tw.user_id = {$userdata['user_id']})
WHERE t.topic_id = $topic_id
";
} elseif ($post_id) {
$sql = "SELECT t.*, f.*, p.post_time, tw.notify_status
FROM " . BB_TOPICS . " t
LEFT JOIN " . BB_FORUMS . " f USING(forum_id)
FROM bb_topics t
LEFT JOIN bb_forums f USING(forum_id)
LEFT JOIN " . BB_POSTS . " p USING(topic_id)
LEFT JOIN " . BB_TOPICS_WATCH . " tw ON(tw.topic_id = t.topic_id AND tw.user_id = {$userdata['user_id']})
WHERE p.post_id = $post_id
@ -100,7 +102,7 @@ if ($topic_id) {
bb_die($lang['TOPIC_POST_NOT_EXIST']);
}
if (!$t_data = DB()->fetch_row($sql)) {
if (!$t_data = Di::getInstance()->db->fetch_row($sql)) {
meta_refresh('index.php', 10);
bb_die($lang['TOPIC_POST_NOT_EXIST']);
}
@ -132,7 +134,7 @@ if (isset($_GET['view']) && $_GET['view'] === 'newest' && !IS_GUEST && $topic_id
ORDER BY post_time ASC
LIMIT 1";
if ($row = DB()->fetch_row($sql)) {
if ($row = Di::getInstance()->db->fetch_row($sql)) {
$post_id = $newest = $row['post_id'];
$t_data['post_time'] = $row['post_time'];
}
@ -144,7 +146,7 @@ if ($post_id && !empty($t_data['post_time']) && ($t_data['topic_replies'] + 1) >
WHERE topic_id = $topic_id
AND post_time <= {$t_data['post_time']}";
if ($row = DB()->fetch_row($sql)) {
if ($row = Di::getInstance()->db->fetch_row($sql)) {
$t_data['prev_posts'] = $row['prev_posts'];
}
}
@ -225,21 +227,21 @@ if ($di->config->get('topic_notify_enabled')) {
if (isset($_GET['unwatch'])) {
if ($_GET['unwatch'] == 'topic') {
$is_watching_topic = 0;
DB()->query("DELETE FROM " . BB_TOPICS_WATCH . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']}");
Di::getInstance()->db->query("DELETE FROM " . BB_TOPICS_WATCH . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']}");
}
set_die_append_msg($forum_id, $topic_id);
bb_die($lang['NO_LONGER_WATCHING']);
} else {
$is_watching_topic = true;
if (!$t_data['notify_status']) {
DB()->query("UPDATE " . BB_TOPICS_WATCH . " SET notify_status = " . TOPIC_WATCH_NOTIFIED . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']}");
Di::getInstance()->db->query("UPDATE " . BB_TOPICS_WATCH . " SET notify_status = " . TOPIC_WATCH_NOTIFIED . " WHERE topic_id = $topic_id AND user_id = {$userdata['user_id']}");
}
}
} else {
if (isset($_GET['watch'])) {
if ($_GET['watch'] == 'topic') {
$is_watching_topic = true;
DB()->query("
Di::getInstance()->db->query("
INSERT INTO " . BB_TOPICS_WATCH . " (user_id, topic_id, notify_status)
VALUES (" . $userdata['user_id'] . ", $topic_id, " . TOPIC_WATCH_NOTIFIED . ")
");
@ -274,12 +276,12 @@ if (!empty($_REQUEST['postdays'])) {
$min_post_time = TIMENOW - ($post_days * 86400);
$sql = "SELECT COUNT(p.post_id) AS num_posts
FROM " . BB_TOPICS . " t, " . BB_POSTS . " p
FROM bb_topics t, " . BB_POSTS . " p
WHERE t.topic_id = $topic_id
AND p.topic_id = t.topic_id
AND p.post_time > $min_post_time";
$total_replies = ($row = DB()->fetch_row($sql)) ? $row['num_posts'] : 0;
$total_replies = ($row = Di::getInstance()->db->fetch_row($sql)) ? $row['num_posts'] : 0;
$limit_posts_time = "AND p.post_time >= $min_post_time ";
}
}
@ -293,7 +295,7 @@ $post_order = (isset($_POST['postorder']) && $_POST['postorder'] !== 'asc') ? 'd
// 1. Add first post of topic if it pinned and page of topic not first
$first_post = false;
if ($t_data['topic_show_first_post'] && $start) {
$first_post = DB()->fetch_rowset("
$first_post = Di::getInstance()->db->fetch_rowset("
SELECT
u.username, u.user_id, u.user_rank, u.user_posts, u.user_from,
u.user_regdate, u.user_sig,
@ -303,10 +305,10 @@ if ($t_data['topic_show_first_post'] && $start) {
u2.username as mc_username, u2.user_rank as mc_user_rank,
h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_USERS . " u ON(u.user_id = p.poster_id)
LEFT JOIN bb_users u ON(u.user_id = p.poster_id)
LEFT JOIN " . BB_POSTS_TEXT . " pt ON(pt.post_id = p.post_id)
LEFT JOIN " . BB_POSTS_HTML . " h ON(h.post_id = p.post_id)
LEFT JOIN " . BB_USERS . " u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN bb_users u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN " . BB_GROUPS . " g ON(g.group_id = p.poster_rg_id)
WHERE
p.post_id = {$t_data['topic_first_post_id']}
@ -324,10 +326,10 @@ $sql = "
u2.username as mc_username, u2.user_rank as mc_user_rank,
h.post_html, IF(h.post_html IS NULL, pt.post_text, NULL) AS post_text
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_USERS . " u ON(u.user_id = p.poster_id)
LEFT JOIN bb_users u ON(u.user_id = p.poster_id)
LEFT JOIN " . BB_POSTS_TEXT . " pt ON(pt.post_id = p.post_id)
LEFT JOIN " . BB_POSTS_HTML . " h ON(h.post_id = p.post_id)
LEFT JOIN " . BB_USERS . " u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN bb_users u2 ON(u2.user_id = p.mc_user_id)
LEFT JOIN " . BB_GROUPS . " g ON(g.group_id = p.poster_rg_id)
WHERE p.topic_id = $topic_id
$limit_posts_time
@ -336,7 +338,7 @@ $sql = "
LIMIT $start, $posts_per_page
";
if ($postrow = DB()->fetch_rowset($sql)) {
if ($postrow = Di::getInstance()->db->fetch_rowset($sql)) {
if ($first_post) {
$postrow = array_merge($first_post, $postrow);
}
@ -498,7 +500,7 @@ require(INC_DIR . 'torrent_show_dl_list.php');
// Update the topic view counter
//
$sql = "INSERT INTO " . BUF_TOPIC_VIEW . " (topic_id, topic_views) VALUES ($topic_id, 1) ON DUPLICATE KEY UPDATE topic_views = topic_views + 1";
if (!DB()->sql_query($sql)) {
if (!Di::getInstance()->db->sql_query($sql)) {
bb_die('Could not update topic views');
}