%PDF- %PDF-
| Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Datastore/ |
| Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Datastore/Common.php |
<?php
/**
* TorrentPier – Bull-powered BitTorrent tracker engine
*
* @copyright Copyright (c) 2005-2018 TorrentPier (https://torrentpier.com)
* @link https://github.com/torrentpier/torrentpier for the canonical source repository
* @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License
*/
namespace TorrentPier\Legacy\Datastore;
/**
* Class Common
* @package TorrentPier\Legacy\Datastore
*/
class Common
{
/**
* Директория с builder-скриптами (внутри INC_DIR)
*/
public $ds_dir = 'datastore';
/**
* Готовая к употреблению data
* array('title' => data)
*/
public $data = [];
/**
* Список элементов, которые будут извлечены из хранилища при первом же запросе get()
* до этого момента они ставятся в очередь $queued_items для дальнейшего извлечения _fetch()'ем
* всех элементов одним запросом
* array('title1', 'title2'...)
*/
public $queued_items = [];
/**
* 'title' => 'builder script name' inside "includes/datastore" dir
*/
public $known_items = [
'cat_forums' => 'build_cat_forums.php',
'jumpbox' => 'build_cat_forums.php',
'viewtopic_forum_select' => 'build_cat_forums.php',
'latest_news' => 'build_cat_forums.php',
'network_news' => 'build_cat_forums.php',
'ads' => 'build_cat_forums.php',
'moderators' => 'build_moderators.php',
'stats' => 'build_stats.php',
'ranks' => 'build_ranks.php',
'attach_extensions' => 'build_attach_extensions.php',
'smile_replacements' => 'build_smilies.php',
];
/**
* @param array (item1_title, item2_title...) or single item's title
*/
public function enqueue($items)
{
foreach ((array)$items as $item) {
// игнор уже поставленного в очередь либо уже извлеченного
if (!\in_array($item, $this->queued_items) && !isset($this->data[$item])) {
$this->queued_items[] = $item;
}
}
}
public function &get($title)
{
if (!isset($this->data[$title])) {
$this->enqueue($title);
$this->_fetch();
}
return $this->data[$title];
}
public function store($item_name, $item_data)
{
}
public function rm($items)
{
foreach ((array)$items as $item) {
unset($this->data[$item]);
}
}
public function update($items)
{
if ($items == 'all') {
$items = array_keys(array_unique($this->known_items));
}
foreach ((array)$items as $item) {
$this->_build_item($item);
}
}
public function _fetch()
{
$this->_fetch_from_store();
foreach ($this->queued_items as $title) {
if (!isset($this->data[$title]) || $this->data[$title] === false) {
$this->_build_item($title);
}
}
$this->queued_items = [];
}
public function _fetch_from_store()
{
}
public function _build_item($title)
{
$file = INC_DIR . '/' . $this->ds_dir . '/' . $this->known_items[$title];
if (isset($this->known_items[$title]) && file_exists($file)) {
require $file;
} else {
trigger_error("Unknown datastore item: $title", E_USER_ERROR);
}
}
public $num_queries = 0;
public $sql_starttime = 0;
public $sql_inittime = 0;
public $sql_timetotal = 0;
public $cur_query_time = 0;
public $dbg = [];
public $dbg_id = 0;
public $dbg_enabled = false;
public $cur_query;
public function debug($mode, $cur_query = null)
{
if (!$this->dbg_enabled) {
return;
}
$id =& $this->dbg_id;
$dbg =& $this->dbg[$id];
if ($mode == 'start') {
$this->sql_starttime = utime();
$dbg['sql'] = isset($cur_query) ? short_query($cur_query) : short_query($this->cur_query);
$dbg['src'] = $this->debug_find_source();
$dbg['file'] = $this->debug_find_source('file');
$dbg['line'] = $this->debug_find_source('line');
$dbg['time'] = '';
} elseif ($mode == 'stop') {
$this->cur_query_time = utime() - $this->sql_starttime;
$this->sql_timetotal += $this->cur_query_time;
$dbg['time'] = $this->cur_query_time;
$id++;
}
}
public function debug_find_source($mode = '')
{
foreach (debug_backtrace() as $trace) {
if ($trace['file'] !== __FILE__) {
switch ($mode) {
case 'file':
return $trace['file'];
case 'line':
return $trace['line'];
default:
return hide_bb_path($trace['file']) . '(' . $trace['line'] . ')';
}
}
}
return 'src not found';
}
}