» » » Account delete [DLE 9.x - 10.2]

Account delete [DLE 9.x - 10.2]

Название: Account delete
Автор: Qnut
CMS: DLE 9.x - 10.2
Версия: 0.2.1

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

Установка:
Выполнить запрос:
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 = "<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 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, с содержимым:

	<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>


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

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



Новость отредактировал: Qnut

Причина: Обновлена версия


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

Комментарии

4
У меня выдал ошибку в этом месте:

else 
			$stop .= "Удаление невозможно!";
		$tpl->set( '{user_delete}', $user_delete );
	} else {
		$tpl->set( '{user_delete}', "" );
	}


Parse error: syntax error, unexpected T_ELSE in /home/engine/modules/profile.php on line 687
4

Alexh2o345

Посетители 20 апреля 2014 08:58
Лучше сделать разрешение группам на удаление аккаунта через админ-панель.
Да и к тому же желательно давать срок в 30 дней на полное удаление аккаунта.
4
Не забываем ставить редирект, если такого пользователя нету. Или он удалился, и в обще запретить индекс профилей.
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4
Поторопился...
4
Цитата: Alexh2o345
Лучше сделать разрешение группам на удаление аккаунта через админ-панель.
Да и к тому же желательно давать срок в 30 дней на полное удаление аккаунта.

Сделаем) Аля ВК будет wink
4
Разьясните плиз по следующей сетуёвене.
Юзер оставил на сайте новости и комменты и удалился. Потом на сайте регается совершенно другой/новый юзер под его логином. Все старые комменты и новости будут принадлежать этому юзеру или как?
Из под хайда нечего не даю, а на попрошаек стучу админу.
4
Цитата: Pepsi
Разьясните плиз по следующей сетуёвене.
Юзер оставил на сайте новости и комменты и удалился. Потом на сайте регается совершенно другой/новый юзер под его логином. Все старые комменты и новости будут принадлежать этому юзеру или как?

Забавно, но да) Сделаю чтобы после удаления посты переводились на призрачного юзера
4
Цитата: Alexh2o345
Лучше сделать разрешение группам на удаление аккаунта через админ-панель.

И зачем им лезть в админ панель то? Если можно с профиля? wtf!?
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4
Хак обновил, теперь есть срок на удаление страницы, по истечению которого аккаунт будет удален полностью
4
Думаю лучше после удаления не переводить на призрачного юзера новости и коменты удаленого пользователя - а попросту добавлять этот логин в список не розрешеных на регистрацию - и загвоздки не будет.
Из под хайда ничего не даю! Не проси - ибо подобное игнорю!
4
Цитата: severnake
Думаю лучше после удаления не переводить на призрачного юзера новости и коменты удаленого пользователя - а попросту добавлять этот логин в список не розрешеных на регистрацию - и загвоздки не будет.

Все куда проще, и уже работает, даже если кто то зарегистрируется под его прежним ником, но не заберет себе посты и комментарии прежнего человека, так как там идет привязка не по имени а по ID, а при регистрации, пускай и с тем же ником, ID будет другой
4

Kota

Посетители 20 апреля 2014 19:53
Молодец Ромка!
Полезный хак =)
4

JacobClyne

Посетители 21 апреля 2014 06:24
Спасибо за хак. Можно сделать хак, чтобы пользователь смог сменить свой логин?
4

Alexh2o345

Посетители 22 апреля 2014 20:53
Цитата: Gameer
Цитата: Alexh2o345
Лучше сделать разрешение группам на удаление аккаунта через админ-панель.

И зачем им лезть в админ панель то? Если можно с профиля? wtf!?


В смысле пункт на разрешение какой-либо группе удалять свои аккаунты в админ-панели добавить)

Цитата: Qnut
Цитата: severnake
Думаю лучше после удаления не переводить на призрачного юзера новости и коменты удаленого пользователя - а попросту добавлять этот логин в список не розрешеных на регистрацию - и загвоздки не будет.

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


Еще проще - не полностью удалять аккаунты, а оставлять их в базе.
В удаленном аккаунте менять аватар на специализированный для удаленного, а при просмотре профиля удалившегося вместо userinfo выводить шаблон для удаленного профиля.
4
Цитата: Alexh2o345
Цитата: Gameer
Цитата: Alexh2o345
Лучше сделать разрешение группам на удаление аккаунта через админ-панель.

И зачем им лезть в админ панель то? Если можно с профиля? wtf!?


В смысле пункт на разрешение какой-либо группе удалять свои аккаунты в админ-панели добавить)

Цитата: Qnut
Цитата: severnake
Думаю лучше после удаления не переводить на призрачного юзера новости и коменты удаленого пользователя - а попросту добавлять этот логин в список не розрешеных на регистрацию - и загвоздки не будет.

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


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

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

KorsarSL

Посетители 23 апреля 2014 17:47
Вообще супер, спасибо большое! Все работает на DLE 9.8
4

GooFY

Посетители 27 апреля 2014 10:26
Good Joob +1
4

julius123

Посетители 23 июля 2014 16:29
У меня такой баг на ДЛЕ 10.2 :
Когда пользователь просматривает свою удаленную страницу то показывается страница которая находится в user_delete.tpl, а вот если профиль просматривает другой пользователь или гость то ничего не выводится просто пусто. В чем проблема ?
4

Starcom

Посетители 7 июля 2017 23:20
30 дней считается если не авторизоваться на сайте это время? После каждой авторизации 30 дней будут обновятся с момента последнего входа? Я правильно понимаю*

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.