04/24 Added import website in bulk

This commit is contained in:
2026-04-24 13:57:49 -04:00
parent 5f2a4e4749
commit 88b5e85c5b
7 changed files with 567 additions and 33 deletions
+22 -7
View File
@@ -44,9 +44,9 @@ class AdminUsersView(ttk.Frame):
command=self._reset_password).pack(side="right", padx=(0, 8))
# Treeview
cols = ("ID", "Username", "Full Name", "Role", "Active", "Created")
cols = ("ID", "Username", "Full Name", "Email", "Role", "Active", "Created")
self.tree = ttk.Treeview(self, columns=cols, show="headings", selectmode="browse")
widths = [40, 140, 180, 80, 60, 160]
widths = [40, 130, 160, 180, 80, 60, 140]
for col, w in zip(cols, widths):
self.tree.heading(col, text=col)
self.tree.column(col, width=w, anchor="center" if w < 120 else "w")
@@ -68,8 +68,8 @@ class AdminUsersView(ttk.Frame):
created = str(u["created_at"])[:16] if u["created_at"] else ""
self.tree.insert("", "end", iid=str(u["id"]),
values=(u["id"], u["username"],
u["full_name"] or "", u["role"],
active, created))
u["full_name"] or "", u["email"] or "",
u["role"], active, created))
except Exception as e:
show_error(f"Failed to load users:\n{e}")
@@ -134,6 +134,7 @@ class AdminUsersView(ttk.Frame):
user_data["full_name"],
user_data["is_active"],
password=pwd,
email=user_data.get("email"),
)
log_action(
self.current_user["id"], "RESET_PASSWORD", "users", uid,
@@ -202,7 +203,7 @@ class UserDialog(tk.Toplevel):
def _centre(self):
self.update_idletasks()
w, h = 420, 420
w, h = 440, 490
x = (self.winfo_screenwidth() - w) // 2
y = (self.winfo_screenheight() - h) // 2
self.geometry(f"{w}x{h}+{x}+{y}")
@@ -245,12 +246,21 @@ class UserDialog(tk.Toplevel):
ttk.Checkbutton(form, variable=self.active_var).grid(row=5, column=1,
sticky="w", pady=6)
ttk.Label(form, text="Email (optional)").grid(row=6, column=0, sticky="w",
padx=(0, 10), pady=6)
self.email_var = tk.StringVar()
ttk.Entry(form, textvariable=self.email_var).grid(
row=6, column=1, sticky="ew", pady=6)
ttk.Label(form, text="Used for system reminders and notifications.",
style="Dim.TLabel").grid(row=7, column=1, sticky="w")
if self.is_edit:
d = self.user_data
self.full_name_var.set(d.get("full_name") or "")
self.username_var.set(d.get("username") or "")
self.role_var.set(d.get("role") or "user")
self.active_var.set(bool(d.get("is_active", 1)))
self.email_var.set(d.get("email") or "")
btn_frame = ttk.Frame(self)
btn_frame.pack(fill="x", padx=24, pady=(16, 20))
@@ -264,6 +274,7 @@ class UserDialog(tk.Toplevel):
password = self.password_var.get()
role = self.role_var.get()
is_active = int(self.active_var.get())
email = self.email_var.get().strip() or None
if not username:
show_error("Username is required.")
@@ -271,6 +282,9 @@ class UserDialog(tk.Toplevel):
if not self.is_edit and not password:
show_error("Password is required for new users.")
return
if email and "@" not in email:
show_error("Please enter a valid email address.")
return
try:
if self.is_edit:
@@ -278,12 +292,13 @@ class UserDialog(tk.Toplevel):
update_user(self.current_user["id"],
self.user_data["id"],
username, role, full_name, is_active,
password if password else None)
password if password else None,
email=email)
logger.info(f"User id={self.user_data['id']} updated by admin.")
show_info("User updated successfully.")
else:
from models import create_user
create_user(self.current_user["id"], username, password, role, full_name)
create_user(self.current_user["id"], username, password, role, full_name, email=email)
logger.info(f"New user '{username}' created by admin.")
show_info("User created successfully.")
self.on_save()