Account delete для DLE 9.x — 10.2 » Techno-Co — Всё для вебмастера, для создание сайтов с нуля. {title}

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

Установка:

Выполнить запрос:

ALTER TABLE dle_users ADD `user_act` int(6) DEFAULT '0' NOT NULL

Открыть engine/modules/profile.php, найти:

$tpl->set( '{ip}', $_IP );

Выше вставить:

// user delete by qnut
        if( $member_id['user_id'] == $row['user_id'] and $row['user_group'] >= 4) {
                $user_delete = " Удалить аккаунт";
                $id = $row['user_id'];
                if($_POST['user_delete'] == "yes") {
                        $db->query("UPDATE " . USERPREFIX . "_users SET user_act='1' WHERE user_id = '{$id}'");
                        header( "Location: {$_SERVER['REQUEST_URI']}" );
                } else
                        $stop .= "Удаление невозможно!";
                if($row['user_act'] == "1" ) {
                        $tpl->load_template( 'user_delete.tpl' );
                        $allow_active_news = false;
                        @header( "HTTP/1.0 404 Not Found" );
                        if( $allow_userinfo and $doaction == "upduserinfo" ) {
                                $stop = false;
                                if( !$is_logged OR $_POST['dle_allow_hash'] == "" OR $_POST['dle_allow_hash'] != $dle_login_hash OR !$id) die( "Hacking attempt! User ID not valid" );
                                if ( $member_id['user_id'] != $id AND $member_id['user_group'] != 1 ) die( "Hacking attempt!" );
                                if($_POST['user_save'] == "yes") {
                                        $db->query("UPDATE " . USERPREFIX . "_users SET user_act='0' WHERE user_id = '{$id}'");
                                        header( "Location: {$_SERVER['REQUEST_URI']}" );
                                }
                        }
                        msgbox( $lang['all_err_1'], "В течении месяца ваш аккаунт будет полностью удален!" );
                        $tpl->copy_template = "" . $tpl->copy_template . "



                ";
                        $tpl->compile( 'content' );
                        $tpl->clear();
                        $lastd = round( ( time() - $GLOBALS['row']['lastdate']) / 86400);
                        $lastd_month = floor($lastd / 31);
                        if($lastd_month >= 1) {
                                if( $_REQUEST['dle_allow_hash'] == "" or $_REQUEST['dle_allow_hash'] != $dle_login_hash ) die( "Hacking attempt! User not found" );
                                if( !$id ) die( $lang['user_nouser'] );
                                if( ! $row['user_id'] ) die( "User not found" );
                                if (($member_id['user_group'] != 1 AND $row['user_group'] == 1 ) || ($is_login)) die( $lang['user_undel'] );
                                $db->query( "DELETE FROM " . USERPREFIX . "_pm WHERE user_from = '{$row['name']}' AND folder = 'outbox'" );
                                @unlink( ROOT_DIR . "/uploads/fotos/" . $row['foto'] );
                                $db->query( "delete FROM " . USERPREFIX . "_users WHERE user_id='$id'" );
                                $db->query( "delete FROM " . USERPREFIX . "_banned WHERE users_id='$id'" );
                                $db->query( "delete FROM " . USERPREFIX . "_pm WHERE user='$id'" );
                                $db->query( "INSERT INTO " . USERPREFIX . "_admin_logs (name, date, ip, action, extras) values ('".$db->safesql($member_id['name'])."', '{$_TIME}', '{$_IP}', '65', '{$row['name']}')" );
                                clear_cache();
                                header( "Location: {$_SERVER['REQUEST_URI']}" );
                        } else
                                $stop .= "Удаление невозможно!";
                }
                $tpl->set( '{user_delete}', $user_delete );
        } else {
                $tpl->set( '{user_delete}', "" );
        }
        // user delete by qnut

Найти:

$tpl->compile( 'content' );

Выше добавить:

if(($user_found == TRUE) AND ($member_id['user_id'] != $row['user_id']) AND $row['user_act'] == "1" ) {
                $allow_active_news = false;
                @header( "HTTP/1.0 404 Not Found" );
                msgbox( $lang['all_err_1'], "Пользователь санкционировал удаление своей анкеты, если в течении месяца он ее не восстановит, она будет полностью удалена!" );
                $tpl->clear();
        }

Открыть templates/THEME/userinfo.tpl, найти:

[/not-logged]

Перед ним вставить:

{user_delete}

Создать файл user_delete.tpl, с содержимым:

    Восстановить аккаунт

                Восстановить

        

Дополнительно:

Пользователь может удалить себя только в том случае, если он не находится в группе 1, 2 или 3

Обновления:

Теперь после удаления, пользователю дается 30 календарных дней, в течении которых он может отменить полное удаление анкеты и моментально восстановить ее работу.

ДЕМО во вкладке ВИДЕО

Название: Account delete

Автор: Qnut
CMS: DLE 9.x — 10.2