Данный материал является артефактом прошлого. Он был найден в старых работах и телепортирован сюда для сохранения в истории.
Очередной артефакт прошлого. Когда то была очень крутая модификация для #IPB 2.3. Эта модификация позволяла преобразовывать обычные ссылки на темы внутри форума в читабельный формат с текстом. Золотое время было…
- Автор: GiV.
- Тестирование (маленькое :)): KaiKimera.
- Исправление ошибок и неточностей: Sannis.
Открыть файл ./sources/classes/bbcode/class_bbcode_core.php
, найти:
Добавить после:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| if (strpos($show, $this->ipsclass->base_url) !== false) {
$match = array();
if (preg_match("/showtopic=(\d+)/", $show, $match) or preg_match("/&t=(\d+)/", $show, $match)) {
$show = $this->_getUrlLocalName('topics', $match[1]);
}
if (preg_match("/showforum=(\d+)/", $show, $match)) {
$show = $this->_getUrlLocalName('forums', $match[1]);
}
if (preg_match("/showuser=(\d+)/", $show, $match)) {
$show = $this->_getUrlLocalName('members', $match[1]);
}
if (!$show) {
$show = $url['show'];
}
} else
|
Найти:
1
2
3
| /*-------------------------------------------------------------------------*/
// Remove sessions in a nice way
/*-------------------------------------------------------------------------*/
|
Добавить перед:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| function _getUrlLocalName($from = '', $for = '')
{
// Сколько раз разбирали ссылки.
static $parsedUrls;
// Проверка на лимит разбора ссылок, чем больше число, тем больше
// вероятность, что злоумышленник может создать нагрузку на БД.
if (++$parsedUrls >= 10) return false;
if (!$from or !$for) return false;
// Оптимизация для ссылок на форумы/разделы. Берем имя не через запрос
// к базе, а из кэша форумов. Спасибо улетает к SAT.
if ($from == 'forums') {
return $this->ipsclass->cache['forum_cache'][$for]['name'];
}
// 'pk' - имя первичного ключа (id'ентификатора) в таблице.
// 'fieldName' - имя поля в таблице, в котором хранится возвращаемое имя.
$pk = 'id'; // В большинстве случаев имя первичного ключа - 'id'.
$fieldName = 'name'; // Имя поля - 'name'.
// Однако в случае с темами у нас другие 'pk' и 'fieldName'.
if ($from == 'topics') {
$pk = 'tid'; // Имя первичного ключа - 'tid'.
$fieldName = 'title'; // Имя поля с названием - 'title'.
}
// Однако в случае с пользователями у нас другое 'fieldName'.
if ($from == 'members') {
$fieldName = 'members_display_name'; // Имя поля с названием - 'members_display_name'.
}
$this->ipsclass->DB->simple_select($fieldName, $from, $pk . "= '" . $for . "'");
$ci = $this->ipsclass->DB->exec_query();
$row = $this->ipsclass->DB->fetch_row($ci);
if ($fieldValue = $row[$fieldName]) {
return $fieldValue;
}
return false;
}
|