support for changing usernames
This commit is contained in:
		
							parent
							
								
									1907dc29bc
								
							
						
					
					
						commit
						feecdd4d13
					
				| @ -202,6 +202,20 @@ class User { | |||||||
| 		log_info("core-user", 'Set class for '.$this->name.' to '.$class); | 		log_info("core-user", 'Set class for '.$this->name.' to '.$class); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @param string $name | ||||||
|  | 	 */ | ||||||
|  | 	public function set_name(/*string*/ $name) { | ||||||
|  | 		global $database; | ||||||
|  | 		if(User::by_name($name)) { | ||||||
|  | 			throw new Exception("Desired username is already in use"); | ||||||
|  | 		} | ||||||
|  | 		$old_name = $this->name; | ||||||
|  | 		$this->name = $name; | ||||||
|  | 		$database->Execute("UPDATE users SET name=:name WHERE id=:id", array("name"=>$this->name, "id"=>$this->id)); | ||||||
|  | 		log_info("core-user", "Changed username for {$old_name} to {$this->name}"); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @param string $password | 	 * @param string $password | ||||||
| 	 */ | 	 */ | ||||||
|  | |||||||
| @ -90,6 +90,7 @@ new UserClass("base", null, array( | |||||||
| 	"view_ip" => False,         # view IP addresses associated with things
 | 	"view_ip" => False,         # view IP addresses associated with things
 | ||||||
| 	"ban_ip" => False, | 	"ban_ip" => False, | ||||||
| 
 | 
 | ||||||
|  | 	"edit_user_name" => False, | ||||||
| 	"edit_user_password" => False, | 	"edit_user_password" => False, | ||||||
| 	"edit_user_info" => False,  # email address, etc
 | 	"edit_user_info" => False,  # email address, etc
 | ||||||
| 	"edit_user_class" => False, | 	"edit_user_class" => False, | ||||||
| @ -155,6 +156,7 @@ new UserClass("admin", "base", array( | |||||||
| 	"edit_image_lock" => True, | 	"edit_image_lock" => True, | ||||||
| 	"view_ip" => True, | 	"view_ip" => True, | ||||||
| 	"ban_ip" => True, | 	"ban_ip" => True, | ||||||
|  | 	"edit_user_name" => True, | ||||||
| 	"edit_user_password" => True, | 	"edit_user_password" => True, | ||||||
| 	"edit_user_info" => True, | 	"edit_user_info" => True, | ||||||
| 	"edit_user_class" => True, | 	"edit_user_class" => True, | ||||||
|  | |||||||
| @ -189,6 +189,16 @@ class UserPage extends Extension { | |||||||
| 				return; | 				return; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
|  | 			else if($event->get_arg(0) == "change_name") { | ||||||
|  | 				if(isset($_POST['id']) && isset($_POST['name'])) { | ||||||
|  | 					$duser = User::by_id($_POST['id']); | ||||||
|  | 					if ( ! $duser instanceof User) { | ||||||
|  | 						throw new NullUserException("Error: the user id does not exist!"); | ||||||
|  | 					} | ||||||
|  | 					$name = $_POST['name']; | ||||||
|  | 					$this->change_name_wrapper($duser, $name); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			else if($event->get_arg(0) == "change_pass") { | 			else if($event->get_arg(0) == "change_pass") { | ||||||
| 				if(isset($_POST['id']) && isset($_POST['pass1']) && isset($_POST['pass2'])) { | 				if(isset($_POST['id']) && isset($_POST['pass1']) && isset($_POST['pass2'])) { | ||||||
| 					$duser = User::by_id($_POST['id']); | 					$duser = User::by_id($_POST['id']); | ||||||
| @ -527,6 +537,20 @@ class UserPage extends Extension { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private function change_name_wrapper(User $duser, $name) { | ||||||
|  | 		global $user; | ||||||
|  | 
 | ||||||
|  | 		if($user->can('edit_user_name') && $this->user_can_edit_user($user, $duser)) { | ||||||
|  | 			$duser->set_name($name); | ||||||
|  | 			flash_message("Username changed"); | ||||||
|  | 			// TODO: set login cookie if user changed themselves
 | ||||||
|  | 			$this->redirect_to_user($duser); | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			$this->theme->display_error(400, "Error", "Permission denied"); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @param User $duser | 	 * @param User $duser | ||||||
| 	 * @param string $pass1 | 	 * @param string $pass1 | ||||||
|  | |||||||
| @ -165,8 +165,21 @@ class UserPageTheme extends Themelet { | |||||||
| 		$html = ""; | 		$html = ""; | ||||||
| 		if($duser->id != $config->get_int('anon_id')){  //justa fool-admin protection so they dont mess around with anon users.
 | 		if($duser->id != $config->get_int('anon_id')){  //justa fool-admin protection so they dont mess around with anon users.
 | ||||||
| 		 | 		 | ||||||
|  | 			if($user->can('edit_user_name')) { | ||||||
| 				$html .= " | 				$html .= " | ||||||
| 			".make_form(make_link("user_admin/change_pass"))." | 				<p>".make_form(make_link("user_admin/change_name"))." | ||||||
|  | 					<input type='hidden' name='id' value='{$duser->id}'> | ||||||
|  | 					<table class='form'> | ||||||
|  | 						<thead><tr><th colspan='2'>Change Name</th></tr></thead> | ||||||
|  | 						<tbody><tr><th>New name</th><td><input type='text' name='name' value='".html_escape($duser->name)."'></td></tr></tbody> | ||||||
|  | 						<tfoot><tr><td colspan='2'><input type='Submit' value='Set'></td></tr></tfoot> | ||||||
|  | 					</table> | ||||||
|  | 				</form> | ||||||
|  | 				";
 | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			$html .= " | ||||||
|  | 			<p>".make_form(make_link("user_admin/change_pass"))." | ||||||
| 				<input type='hidden' name='id' value='{$duser->id}'> | 				<input type='hidden' name='id' value='{$duser->id}'> | ||||||
| 				<table class='form'> | 				<table class='form'> | ||||||
| 					<thead> | 					<thead> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user