Каждый раз проверяем, объявлена ли $std, и если не объявлена, объявляем.
Topics.php
Только у тех, у кого стоит oska мод фиксации первого поста:
После
// start oska modified
if ($first > 0 and $this->topic['firstpost'] == 1) {
$DB->query( "SELECT p.*,
m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_
name,m.icq_number,
m.signature, m.website,m.yahoo,m.title,m.hide_email,m.msnname,m.dices,
g.g_id, g.g_title, g.g_icon
FROM ibf_posts p
LEFT JOIN ibf_members m ON (p.author_id=m.id)
LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
WHERE p.topic_id='".$this->topic['tid']."' and p.queued !='1'
ORDER BY p.pid LIMIT 0, 1");
$cached_members0 = array();
while ( $row0 = $DB->fetch_row() ) {
добавить
if( strlen($row0['post'])<3 or ( stristr($row0['post'], "#TOPIC#") and strlen($row0['post'])<26 ) or ( stristr($row0['post'], "#POST#") and strlen($row0['post'])<26 ) )$row0['post'] = $std->extract_archived_post($row0['pid'], "arc");
Для всех:
После
$cached_members = array();
//-------------------------------------
// Format and print out the topic list
//-------------------------------------
$post_count = 0; // Use this as our master bater, er... I mean counter.
while ( $row = $DB->fetch_row() )
{
добавить:
if( strlen($row['post'])<3 or ( stristr($row['post'], "#TOPIC#") and strlen($row['post'])<26 ) or ( stristr($row['post'], "#POST#") and strlen($row['post'])<26 ) )$row['post'] .= $std->extract_archived_post($row['pid'], "arc");
Post.php
После
//--------------------------------------------------------------
// Get the posts
// This section will probably change at some point
//--------------------------------------------------------------
$post_query = $DB->query("SELECT post, pid, post_date, author_id, author_name FROM ibf_posts WHERE topic_id=$topic_id and queued <> 1 ORDER BY pid DESC LIMIT 0,10");
while ( $row = $DB->fetch_row($post_query) )
{
$row['author'] = $row['author_name'];
$row['date'] = $std->get_date( $row['post_date'], 'LONG' );
добавить
if ( strlen($row['post']) < 3 )$row['post'] = $std->extract_archived_post($row['pid'], "arc");
Profile.php (тем, у кого стоит мод последних сообщений в профиле)
После
$DB->query("SELECT p.pid, p.post, t.tid, t.title, f.name, f.id
FROM ibf_posts AS p LEFT JOIN ibf_topics AS t ON (p.topic_id=t.tid) LEFT JOIN ibf_forums AS f ON(t.forum_id=f.id)
WHERE author_id=".$member['id']." AND f.id IN ($forums)
ORDER BY p.post_date DESC LIMIT 0,".$INFO[latest_amount]);
while($row = $DB->fetch_row()) {
Добавить:
if ( strlen($row['post']) < 3 )$row['post'] = $std->extract_archived_post($row['pid'], "arc");
Search.php
После
$DB->query("SELECT t.*, p.pid, p.author_id, p.author_name, p.hide_post, p.post_date, p.post, f.id as forum_id, f.name as forum_name, f.use_html, g.g_dohtml
FROM ibf_posts p
LEFT JOIN ibf_topics t ON (t.tid=p.topic_id)
LEFT JOIN ibf_forums f ON (f.id=p.forum_id)
LEFT JOIN ibf_members m ON (m.id=p.author_id)
LEFT JOIN ibf_groups g ON (m.mgroup=g.g_id)
WHERE hide_post=0 AND p.pid IN(0{$posts}0)
ORDER BY p.post_date DESC
LIMIT ".$this->first.",25");
while ( $row = $DB->fetch_row() )
{
добавить
if ( strlen($row['post']) < 3 )$row['post'] = $std->extract_archived_post($row['pid'], "arc");
modfunctions.php
После
while ( $r = $DB->fetch_row() )
{
if($r['attach_id'] != "")
{
if (is_file($this->upload_dir."/".$r['attach_id']))
{
@unlink ($this->upload_dir."/".$r['attach_id']);
}
}
добавить
if( strlen($r['post']) < 3 or stristr($r['post'], "#TOPIC#") or stristr($r['post'], "#POST#") )$std->create_archived_post($r['pid'], "arc", "");
post_edit_post.php
После
//-------------------------------------------------
// Load the old post
//-------------------------------------------------
$DB->query("SELECT * FROM ibf_posts WHERE pid=".intval($ibforums->input['p']));
$this->orig_post = $DB->fetch_row();
if (! $this->orig_post['pid'])
{
$std->Error( array( LEVEL => 1, MSG => 'missing_files') );
}
//-------------------------------------------------
// Unqueue the post if we're starting a new topic
//-------------------------------------------------
if ( $class->obj['moderate'] == 3 )
{
$this->post['queued'] = 0;
}
// +FatCat Проверка размера сообщения: большие сразу архивируем.
$arc_poct_str = "";
if(strlen($this->post['post']) > 4000)
{
$arc_poct_str = $this->post['post'];
$this->post['post'] = " ";
}
// -FatCat
$db_string = $DB->compile_db_insert_string( $this->post );
$DB->query("INSERT INTO ibf_posts (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
$this->post['pid'] = $DB->get_insert_id();
// +FatCat: архивируем большие сообщения: пишем файл.
if($arc_poct_str != "")$std->create_archived_post($this->post['pid'], "arc", $arc_poct_str);
// -FatCat
post_q_reply_post.php
После
//-------------------------------------------------
// Get the old post
//-------------------------------------------------
$DB->query("SELECT post, author_id, author_name, post_date, pid FROM ibf_posts WHERE pid='".$ibforums->input['p']."'");
$this->quoted_post = $DB->fetch_row();
$DB->query("SELECT p.*, me.j_public, me.id, m.name
FROM ibf_jposts p
LEFT JOIN ibf_member_extra me ON (me.id=p.journal_id)
LEFT JOIN ibf_members m ON (m.id=p.journal_id)
WHERE p.post_date > '".$db_start_date."'
AND p.post_date < '".$db_end_date."'".$q_extra."
ORDER BY p.post_date DESC LIMIT ".$first.",15");
if ($DB->get_num_rows())
{
$old_date = "";
$start_post = true;
while ($r = $DB->fetch_row())
{
// Output comments for this post
$DB->query("SELECT * FROM ibf_jcomments WHERE post_id='".$post['pid']."' ORDER BY post_date ASC LIMIT $first,".$journal->users['j_comment_page']);
if (!$DB->get_num_rows())
{
$journal->out_data['pages'] .= $this->html->j_info($ibforums->lang['j_err_no_comments'])."<br />";
}
else
{
$journal->out_data['pages'] .= $this->html->j_post_top();
while ($row = $DB->fetch_row())
{
// Get post
$DB->query("SELECT c.*, p.post_date as p_date
FROM ibf_jcomments c, ibf_jposts p
WHERE c.cid='".$ibforums->input['comm']."' AND p.pid = c.post_id");
if (!$DB->get_num_rows())
{
$journal->err_journal($ibforums->lang['j_err_data']);
}
$row = $DB->fetch_row();
// make post array
$rpost = $this->compile_post();
// If upload presets delete old attach and add new to post array
if ($rpost['attach_id'] != "")
{
$DB->query("SELECT attach_id FROM ibf_jposts WHERE pid='".$ibforums->input['pid']."'");
$row = $DB->fetch_row();
$journal->del_uploaded($row['attach_id']);
}
// If select "delete attach", delete file and clear post attach array
elseif ($ibforums->input['DEL_ATTACH'] == "yes")
{
$DB->query("SELECT attach_id FROM ibf_jposts WHERE pid='".$ibforums->input['pid']."'");
$row = $DB->fetch_row();
$journal->del_uploaded($row['attach_id']);
$rpost['attach_id'] = "";
}
// +FatCat большие - в кеш
if( strlen($rpost['post']) > 4000 )
{
$cached_post = $rpost['post'];
$rpost['post'] = " ";
}
else
{
$cached_post = "";
}
$std->create_archived_post($ibforums->input['pid'], "jpc", $cached_post);
// -FatCat
// Update database
После
// Delete post and comments attachments
if ($row['attach_id'])
{
$journal->del_uploaded($row['attach_id']);
}
$DB->query("SELECT * FROM ibf_jcomments WHERE post_id='".$ibforums->input['pid']."'");
while ($row = $DB->fetch_row())
{
// Delete post and comments
$DB->query("DELETE FROM ibf_jcomments WHERE post_id='".$ibforums->input['pid']."'");
$DB->query("DELETE FROM ibf_jposts WHERE pid='".$ibforums->input['pid']."' AND journal_id='".$journal->users['id']."'");
// Output comments for this post
$DB->query("SELECT * FROM ibf_jcomments WHERE post_id='".$post['pid']."' ORDER BY post_date ASC LIMIT 0,200");
if (!$DB->get_num_rows())
{
$out_data .= $this->html->j_info($ibforums->lang['j_err_no_comments'])."<br />";
}
else
{
$out_data .= $this->html->j_post_top();
while ($row = $DB->fetch_row())
{
$DB->query("SELECT p.* , m.id, m.signature
FROM ibf_posts p, ibf_members m
WHERE topic_id={$id} AND queued <> 1 AND m.id = p.author_id
ORDER BY pid
LIMIT {$st}, {$ibforums->vars['display_max_posts']}");
while( $r = $DB->fetch_row() )
{
добавить
if ( strlen($r['post']) < 3 )$r['post'] = $std->extract_archived_post($r['pid'], "arc");
Не помню, было ли в исходном коде удаление пользователя вместе со всеми сообщениями, но если было - собственно, вот тут добавилось:
В админцентре в глобальных настройках выставить желаемый лимит размера сообщений, желательно не выше 1000 Кб, иначе могут "Войну и мир" в один пост упихнуть.
Что недоделано: Удаление файлов сообщений и комментариев журнала при удалении пользователей через админку.
Я не часто удаляю активно пишущих пользователей, поэтому пока не заморачивался.
Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.
Вопрос
FatCat
Достали тормоза при разрастании таблиц ibf_posts, ibf_jposts и ibf_jcomments; достал лимит sql, не позволяющий создавать сообщения свыше 64 Кб.
Мод распределяет сообщения: Сообщения свыше 4000 байт сохраняются в файл, сообщения мЕньшего веса - в sql-таблицы.
В корне форума создать директорию /arc, права доступа не ниже 0666.
functions.php
Добавились 2 функции:
Теперь разносим вызовы этих функций.
Каждый раз проверяем, объявлена ли $std, и если не объявлена, объявляем.
Topics.php
Только у тех, у кого стоит oska мод фиксации первого поста:
После
добавить
Для всех:
После
добавить:
Post.php
После
добавить
Profile.php (тем, у кого стоит мод последних сообщений в профиле)
После
Добавить:
Search.php
После
добавить
modfunctions.php
После
добавить
post_edit_post.php
После
добавить
После
добавить
post_new_post.php
Здесь я добавленный код пометил комментариями:
post_q_reply_post.php
После
добавить
post_reply_post.php
Мои добавления помечены комментариями:
print_page.php
После
добавить
journal\calendar.php
После
добавить
После
добавить
comment.php
После
добавить
После
добавить
Здесь мои вставки промечены комментариями:
После
добавить
Здесь мои вставки промечены комментариями:
После
добавить
journal\posts.php
Перед
добавить
Здесь мои добавки размечены комментариями:
После
добавить
Здесь мои вставки размечены комментариями:
После
добавить
После
добавить
prints.php
После
добавить
После
добавить
txt\index.php
После
добавить
Не помню, было ли в исходном коде удаление пользователя вместе со всеми сообщениями, но если было - собственно, вот тут добавилось:
ad_member.php
Перед
добавить
В админцентре в глобальных настройках выставить желаемый лимит размера сообщений, желательно не выше 1000 Кб, иначе могут "Войну и мир" в один пост упихнуть.
Что недоделано: Удаление файлов сообщений и комментариев журнала при удалении пользователей через админку.
Я не часто удаляю активно пишущих пользователей, поэтому пока не заморачивался.
Ссылка на комментарий
Поделиться на других сайтах
5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.