aleksandrhristich 107 Опубликовано: 28 сентября 2021 Рассказать Опубликовано: 28 сентября 2021 (изменено) Решение ЭТОГО моего запроса,т.е возможность удаления своего аккаунта на сайте. Решение не мое,честно признаюсь,нашел на просторах инета и создано было еще для DLE 9-х,но в последней версии тоже работает. Итак,что нам дает это решение: Возможность пользователям удалять свой аккаунт по какой либо причине,при этом их новости и комментарии остаются не тронутыми,т.е не удаляются. Также пользователям дается 30 календарных дней, в течении которых они могут отменить удаление аккаунта и моментально его восстановить.Пользователи могут удалить себя если они не находятся в группе 1, 2 или 3. Поехали? Установка В БД сделать запрос ALTER TABLE dle_users ADD `user_act` int(6) DEFAULT '0' NOT NULL В engine/modules/profile.php, найти: $tpl->set( '{ip}', $_IP ); Выше вставить: // user delete account if( $member_id['user_id'] == $row['user_id'] and $row['user_group'] >= 4) { $user_delete = "<input type=\"checkbox\" name=\"user_delete\" id=\"user_delete\" value=\"yes\"> <label for=\"user_delete\">Удалить аккаунт</label>"; $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 = "<form method=\"post\" name=\"userinfo\" id=\"userinfo\" enctype=\"multipart/form-data\" action=\"{$link_profile}\">" . $tpl->copy_template . " <input type=\"hidden\" name=\"doaction\" value=\"upduserinfo\" /> <input type=\"hidden\" name=\"id\" value=\"{$row['user_id']}\" /> <input type=\"hidden\" name=\"dle_allow_hash\" value=\"{$dle_login_hash}\" /> </form>"; $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 account Перед $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 и в нем прописываем <div class="field-simple-checkbox"><input type="checkbox" name="user_save" id="user_save" value="yes"> <label for="user_save">Восстановить аккаунт</label></div> <div class="buttons"> <button type="submit" class="button" name="submit">Восстановить</button> <input name="submit" type="hidden" id="submit" value="submit" /> </div> На этом все,спасибо за внимание. Изменено 28 сентября 2021 пользователем aleksandrhristich 2 Цитата Ссылка на сообщение Поделиться на других сайтах
MSK 289 Опубликовано: 28 сентября 2021 Рассказать Опубликовано: 28 сентября 2021 Все конечно прикольно, но достаточно зарегацца новому пользователю с таким же Login - и он получает доступ ко всем новостям, комментам, файлам и т.п. "удаленного" :) Необходимо менять автора, например, на "Инкогнито" и добавлять этот логин в исключения или чистить данные пользователя (оставить только логин) и оставлять его в базе или.... 2 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.