Перейти к контенту
  • 0

есть ли в 4 функция массового удаления пользователей


sasch

Вопрос

и сообщений. Например, требуется удалить все сообщения, темы и всех зарегистрированных пользователей с 1 января по 1 февраля, - это возможно? Или может есть подобная функция на предыдущих версиях?

 

Может есть мод для этих целей?

Изменено пользователем sasch
Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Задача только на первый взгляд выглядит банальной; на самом деле там весьма много подводных камней.

Давно писал функцию полного удаления пользователя со всем его имуществом. В принципе, никто не мешает сделать запрос по дате регистрации и в цикле по пользователям удалить всех.

Код удаления одного пользователя для 1.3, за прошедшие годы сильно переписанной, вот такой:

    function bioreactor()
    {
        global $std, $ibforums, $DB, $print, $INFO;
        
        if ( $ibforums->member['mgroup'] != $ibforums->vars['admin_group'] )
        {
            $this->mod_error('cp_no_perms');
            return;
        }
        $DB->query("SELECT * FROM ibf_members WHERE id = ".$ibforums->input['mid']);
        if( $row = $DB->fetch_row() )
        {
            if($row['mgroup'] == $ibforums->vars['admin_group'])
            {
                $this->mod_error('cp_no_perms');
                return;
            }
            if($ibforums->input['confirm'])
            {
                $live_time = implode(", ",$std->date_diff($row['joined']));
                if($row['posts'])$live_posts = ",<br>сообщений в форуме: ".$row['posts'].",";
                else $live_posts = ".";
                set_time_limit(0);
                $topic_idz = array();
                $postz = 0;
                $forumz = array();
                $topicz = 0;
                $ua = "";
                $DB->query("SELECT t.tid, t.posts, t.forum_id, p.pid, p.author_id, p.author_name, p.topic_id, p.user_agent_p
                FROM ibf_topics t, ibf_posts p
                WHERE p.topic_id = t.tid and p.author_id = '".intval($ibforums->input['mid'])."'
                ORDER BY t.tid");
                $ibf_stats_count = $DB->get_num_rows();
                if($ibf_stats_count)
                {
                    while($mem = $DB->fetch_row())
                    {
                        if( isset($topic_idz[ $mem['tid'] ]) )$topic_idz[ $mem['tid'] ][ $mem['posts'] ]++;
                        else $topic_idz[ $mem['tid'] ][ $mem['posts'] ] = 1;
                        $forumz[ $mem['forum_id'] ] = 1;
                        if($mem['user_agent_p'])$ua = $mem['user_agent_p'];
                    }
                    $DB->query("DELETE FROM ibf_posts WHERE author_id = ".intval($ibforums->input['mid']));
                    foreach($topic_idz as $tid=>$t_arr)
                    {
                        foreach($t_arr as $posts=>$del_posts)
                        {
                            $postz++;
                            if($posts < $del_posts)
                            {
                                $DB->query("DELETE FROM ibf_topics WHERE tid = ".$tid);
                                $DB->query("DELETE FROM ibf_posts_queries WHERE topic_id = ".$tid);
                                $topicz++;
                            }
                            else
                            {
                                $DB->query("SELECT COUNT(pid) AS posts FROM ibf_posts WHERE topic_id=".$tid." and queued <> 1");
                                $posts = $DB->fetch_row();
                                $posts = $posts['posts'] - 1;
                                
                                $DB->query("SELECT post_date, author_id, author_name FROM ibf_posts WHERE topic_id=".$tid." and queued <> 1 ORDER BY pid DESC");
                                $last_post = $DB->fetch_row();
                                
                                $DB->query("UPDATE ibf_topics SET last_post='"        .$last_post['post_date']   ."', ".
                                                                 "last_poster_id='"   .$last_post['author_id']   ."', ".
                                                                 "last_poster_name='" .$last_post['author_name'] ."', ".
                                                                 "posts=".$posts." WHERE tid=".$tid);
                            }
                        }
                    }
                    $DB->query("UPDATE ibf_stats SET TOTAL_REPLIES = (TOTAL_REPLIES - ".($postz - $topicz).")");
                    if($topicz)$DB->query("UPDATE ibf_stats SET TOTAL_TOPICS = (TOTAL_TOPICS - ".$topicz.")");
                    foreach($forumz as $forum=>$v)$std->recount_hide($forum);
                }
                $live_posts .= " удалено: ".$postz.".";
                $DB->query("DELETE FROM ibf_messages WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_tracker WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_forum_tracker WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_jposts WHERE journal_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_jcomments WHERE owner_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_moderators WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_calendar_events WHERE userid = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_contacts WHERE member_id='".intval($ibforums->input['mid'])."' or contact_id='".intval($ibforums->input['mid'])."'");
                $DB->query("DELETE from ibf_members WHERE id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_pfields_content WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_member_extra WHERE id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_validating WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("SELECT id, name, user_agent_mj FROM ibf_members ORDER BY joined DESC LIMIT 1");
                $memb = $DB->fetch_row();
                $DB->query("SELECT COUNT(id) as members from ibf_members");
                $r = $DB->fetch_row();
                $DB->query("UPDATE ibf_stats SET MEM_COUNT = '".$r['members']."', LAST_MEM_NAME = '".$memb['name']."', LAST_MEM_ID = '".$memb['id']."'");
                
                $ua = " <a href='".$ibforums->base_url."act=modcp&CODE=ua&incoming=".$ua."&incomingj=".$row['user_agent_mj']."&mid=".intval($ibforums->input['mid'])."&mname=".$row['name']."' target='_blank'><img src='".$ibforums->vars['img_url']."/atb_chat.gif' alt='Управление юзерагентом' width=17 height=15 border=0></a>";
                
                $std->Antibot_hard("<br><i>Модератор <a href='".$ibforums->vars['board_url']."/index.php?showuser=".$ibforums->member['id']."'>".$ibforums->member['name']."</a> вместе с удалением профиля <b>".$row['name']."</b></i>.<br>".$live_time." с момента регистрации на форуме".$live_posts.$ua,100,$row['ip_address']);
                
                $print->redirect_screen( "профиль пользователя полностью удален", "act=idx" );
            }
            else
            {
                $html = '<div align="center"><form action="index.php"><input type="hidden" name="act" value="modcp"><input type="hidden" name="CODE" value="bioreactor"><input type="hidden" name="mid" value="'.$ibforums->input['mid'].'"><input type="submit" name="go" value="'.str_replace("<%_user%>",$row['name'],$ibforums->lang['cp_confirm_bioreactor']).'"> <b>'.$ibforums->lang['yes'].':</b><input type="checkbox" name="confirm" value="1"></form></div>';
                $print = new display();
                $print->add_output($html);
            }
        }
        else
        {
            $this->mod_error('cp_no_user');
            return;
        }
    }
Изменено пользователем FatCat
Ссылка на комментарий
Поделиться на других сайтах

  • 0

спасибо, только даже если это был код к 2.3.6. то вряд ли я бы его реализовал потому вам в почту писал. кстати, то предложение все еще актуально.

 

 

Может есть мод для этих целей?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Я не слежу за модами. Последние лет 10 я сам пишу себе всё, что мне нужно.

Двушку знаю совсем плохо. Мод написать может быть и пару часов, да только перед этим понадобится установить себе двушку и разобраться в ней, что займет намного больше времени и сил. И главное, я не планирую дальше работать с двушкой, и не хочу забивать свои мозги не нужной мне информацией.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

 

Задача только на первый взгляд выглядит банальной; на самом деле там весьма много подводных камней.

Давно писал функцию полного удаления пользователя со всем его имуществом. В принципе, никто не мешает сделать запрос по дате регистрации и в цикле по пользователям удалить всех.

Код удаления одного пользователя для 1.3, за прошедшие годы сильно переписанной, вот такой:

    function bioreactor()
    {
        global $std, $ibforums, $DB, $print, $INFO;
        
        if ( $ibforums->member['mgroup'] != $ibforums->vars['admin_group'] )
        {
            $this->mod_error('cp_no_perms');
            return;
        }
        $DB->query("SELECT * FROM ibf_members WHERE id = ".$ibforums->input['mid']);
        if( $row = $DB->fetch_row() )
        {
            if($row['mgroup'] == $ibforums->vars['admin_group'])
            {
                $this->mod_error('cp_no_perms');
                return;
            }
            if($ibforums->input['confirm'])
            {
                $live_time = implode(", ",$std->date_diff($row['joined']));
                if($row['posts'])$live_posts = ",<br>сообщений в форуме: ".$row['posts'].",";
                else $live_posts = ".";
                set_time_limit(0);
                $topic_idz = array();
                $postz = 0;
                $forumz = array();
                $topicz = 0;
                $ua = "";
                $DB->query("SELECT t.tid, t.posts, t.forum_id, p.pid, p.author_id, p.author_name, p.topic_id, p.user_agent_p
                FROM ibf_topics t, ibf_posts p
                WHERE p.topic_id = t.tid and p.author_id = '".intval($ibforums->input['mid'])."'
                ORDER BY t.tid");
                $ibf_stats_count = $DB->get_num_rows();
                if($ibf_stats_count)
                {
                    while($mem = $DB->fetch_row())
                    {
                        if( isset($topic_idz[ $mem['tid'] ]) )$topic_idz[ $mem['tid'] ][ $mem['posts'] ]++;
                        else $topic_idz[ $mem['tid'] ][ $mem['posts'] ] = 1;
                        $forumz[ $mem['forum_id'] ] = 1;
                        if($mem['user_agent_p'])$ua = $mem['user_agent_p'];
                    }
                    $DB->query("DELETE FROM ibf_posts WHERE author_id = ".intval($ibforums->input['mid']));
                    foreach($topic_idz as $tid=>$t_arr)
                    {
                        foreach($t_arr as $posts=>$del_posts)
                        {
                            $postz++;
                            if($posts < $del_posts)
                            {
                                $DB->query("DELETE FROM ibf_topics WHERE tid = ".$tid);
                                $DB->query("DELETE FROM ibf_posts_queries WHERE topic_id = ".$tid);
                                $topicz++;
                            }
                            else
                            {
                                $DB->query("SELECT COUNT(pid) AS posts FROM ibf_posts WHERE topic_id=".$tid." and queued <> 1");
                                $posts = $DB->fetch_row();
                                $posts = $posts['posts'] - 1;
                                
                                $DB->query("SELECT post_date, author_id, author_name FROM ibf_posts WHERE topic_id=".$tid." and queued <> 1 ORDER BY pid DESC");
                                $last_post = $DB->fetch_row();
                                
                                $DB->query("UPDATE ibf_topics SET last_post='"        .$last_post['post_date']   ."', ".
                                                                 "last_poster_id='"   .$last_post['author_id']   ."', ".
                                                                 "last_poster_name='" .$last_post['author_name'] ."', ".
                                                                 "posts=".$posts." WHERE tid=".$tid);
                            }
                        }
                    }
                    $DB->query("UPDATE ibf_stats SET TOTAL_REPLIES = (TOTAL_REPLIES - ".($postz - $topicz).")");
                    if($topicz)$DB->query("UPDATE ibf_stats SET TOTAL_TOPICS = (TOTAL_TOPICS - ".$topicz.")");
                    foreach($forumz as $forum=>$v)$std->recount_hide($forum);
                }
                $live_posts .= " удалено: ".$postz.".";
                $DB->query("DELETE FROM ibf_messages WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_tracker WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_forum_tracker WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_jposts WHERE journal_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_jcomments WHERE owner_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_moderators WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE FROM ibf_calendar_events WHERE userid = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_contacts WHERE member_id='".intval($ibforums->input['mid'])."' or contact_id='".intval($ibforums->input['mid'])."'");
                $DB->query("DELETE from ibf_members WHERE id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_pfields_content WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_member_extra WHERE id = ".intval($ibforums->input['mid']));
                $DB->query("DELETE from ibf_validating WHERE member_id = ".intval($ibforums->input['mid']));
                $DB->query("SELECT id, name, user_agent_mj FROM ibf_members ORDER BY joined DESC LIMIT 1");
                $memb = $DB->fetch_row();
                $DB->query("SELECT COUNT(id) as members from ibf_members");
                $r = $DB->fetch_row();
                $DB->query("UPDATE ibf_stats SET MEM_COUNT = '".$r['members']."', LAST_MEM_NAME = '".$memb['name']."', LAST_MEM_ID = '".$memb['id']."'");
                
                $ua = " <a href='".$ibforums->base_url."act=modcp&CODE=ua&incoming=".$ua."&incomingj=".$row['user_agent_mj']."&mid=".intval($ibforums->input['mid'])."&mname=".$row['name']."' target='_blank'><img src='".$ibforums->vars['img_url']."/atb_chat.gif' alt='Управление юзерагентом' width=17 height=15 border=0></a>";
                
                $std->Antibot_hard("<br><i>Модератор <a href='".$ibforums->vars['board_url']."/index.php?showuser=".$ibforums->member['id']."'>".$ibforums->member['name']."</a> вместе с удалением профиля <b>".$row['name']."</b></i>.<br>".$live_time." с момента регистрации на форуме".$live_posts.$ua,100,$row['ip_address']);
                
                $print->redirect_screen( "профиль пользователя полностью удален", "act=idx" );
            }
            else
            {
                $html = '<div align="center"><form action="index.php"><input type="hidden" name="act" value="modcp"><input type="hidden" name="CODE" value="bioreactor"><input type="hidden" name="mid" value="'.$ibforums->input['mid'].'"><input type="submit" name="go" value="'.str_replace("<%_user%>",$row['name'],$ibforums->lang['cp_confirm_bioreactor']).'"> <b>'.$ibforums->lang['yes'].':</b><input type="checkbox" name="confirm" value="1"></form></div>';
                $print = new display();
                $print->add_output($html);
            }
        }
        else
        {
            $this->mod_error('cp_no_user');
            return;
        }
    }

Так а в чем подводные камни?

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.