Перейти к содержимому


Фотография

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

Форумы IBResource

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5
sasch
  • Участники
  • Cообщений: 70

Отправлено

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

 

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


Сообщение отредактировал sasch: 02 Февраль 2017 - 14:33


FatCat
  • Клиенты
  • Cообщений: 3 343
  • http://pharm-forum.ru
  • Город:Москва

Отправлено

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

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

Код удаления одного пользователя для 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&amp;CODE=ua&amp;incoming=".$ua."&amp;incomingj=".$row['user_agent_mj']."&amp;mid=".intval($ibforums->input['mid'])."&amp;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']).'">&nbsp;<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: 02 Февраль 2017 - 03:30


sasch
  • Участники
  • Cообщений: 70

Отправлено

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

 

 

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



FatCat
  • Клиенты
  • Cообщений: 3 343
  • http://pharm-forum.ru
  • Город:Москва

Отправлено

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

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



samosud2017
  • Участники
  • Cообщений: 1
  • http://tsk-terra.ru/

Отправлено

 

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

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

Код удаления одного пользователя для 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&amp;CODE=ua&amp;incoming=".$ua."&amp;incomingj=".$row['user_agent_mj']."&amp;mid=".intval($ibforums->input['mid'])."&amp;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']).'">&nbsp;<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
  • Клиенты
  • Cообщений: 3 343
  • http://pharm-forum.ru
  • Город:Москва

Отправлено

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

Я же привел код. Прочитать его словами?






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных