Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class UserOrgPage(tkinter.Frame,SquadBot):
- def __init__(self,parent,controller):
- tkinter.Frame.__init__(self,parent)
- self.createImages() # creates array of images
- self.configure(bg=self.palette["bgblue"])
- colourbar = tkinter.Frame(self,background=self.palette["darkblue"])
- colourbar.place(x=0,y=0,width=700,height=90,anchor="nw")
- logoutbutton = tkinter.Button(colourbar,background=self.palette["darkblue"],text="Log Out",
- fg="#ffffff",font=("TkDefaultFont","10","bold"),command = lambda: controller.logout())
- logoutbutton.place(height=50,width=100,x=680,y=45,anchor="e")
- mainscreenbutton = tkinter.Button(colourbar,background=self.palette["darkblue"],text="Back",
- fg="#ffffff",font=("TkDefaultFont","10","bold"),command = lambda: controller.showPage(MainPage,UserOrgPage))
- mainscreenbutton.place(height=50,width=100,x=560,y=45,anchor="e")
- crestlbl = tkinter.Label(self,image=self.images["smallcrest"],background=self.palette["darkblue"])
- crestlbl.place(x=0,y=0,anchor="nw",width=99,height=135)
- pagelbl = tkinter.Label(colourbar,text="User Management",font=("Arial Black","20","bold"),foreground="white",background=self.palette["darkblue"])
- pagelbl.place(y=45,x=100,anchor="w")
- # above code is the same setup as other pages
- useraddframe = tkinter.Frame(self,background = self.palette["afb"])
- useraddframe.place(x=10,y=145,anchor="nw",width=375,height=300)
- # creates frame to add new user
- newubutton = tkinter.Button(useraddframe,text="Add new user",command=lambda: self.addnewuser(controller))
- newubutton.place(x=187.5,y=260,height=25,width=80,anchor="n")
- forenamelbl = tkinter.Label(useraddframe,text="Forename:",bg=self.palette["afb"])
- forenamelbl.place(x=25,y=15,anchor="nw")
- self.forenamevar = tkinter.StringVar()
- self.forenamevar.trace_add("write", lambda x,y,z: self.change_text(var=self.forenamevar))
- self.forenameentry = tkinter.Entry(useraddframe,text=self.forenamevar)
- self.forenameentry.place(x=100,y=40,anchor="n",width=150)
- self.usernamevar = tkinter.StringVar()
- self.usernamevar.trace_add("write", lambda x,y,z: self.change_text(var=self.usernamevar))
- usernamelbl = tkinter.Label(useraddframe,text="Username:",bg=self.palette["afb"])
- usernamelbl.place(x=200,y=15,anchor="nw")
- self.usernameentry = tkinter.Entry(useraddframe,text = self.usernamevar)
- self.usernameentry.place(x=275,y=40,anchor="n",width=150)
- surnamelbl = tkinter.Label(useraddframe,text="Surname:",bg=self.palette["afb"])
- surnamelbl.place(x=25,y=65,anchor="nw")
- self.surnamevar = tkinter.StringVar()
- self.surnamevar.trace_add("write", lambda x,y,z: self.change_text(var=self.surnamevar))
- self.surnameentry = tkinter.Entry(useraddframe,text=self.surnamevar)
- self.surnameentry.place(x=100,y=90,width=150,anchor="n")
- passwordlbl = tkinter.Label(useraddframe,text="Password:",bg=self.palette["afb"])
- passwordlbl.place(x=200,y=65,anchor="nw")
- self.passwordvar = tkinter.StringVar()
- self.passwordvar.trace_add("write", lambda x,y,z: self.change_text(var=self.passwordvar))
- self.passwordentry = tkinter.Entry(useraddframe,text=self.passwordvar)
- self.passwordentry.place(x=275,y=90,anchor="n",width=150)
- self.pwordcheckvar = tkinter.StringVar()
- self.pwordcheckvar.trace_add("write", lambda x,y,z: self.change_text(var=self.pwordcheckvar))
- passwordchecklbl = tkinter.Label(useraddframe,text="Confirm Password:",bg=self.palette["afb"])
- passwordchecklbl.place(x=200,y=115,anchor="nw")
- self.passwordcheck = tkinter.Entry(useraddframe,text=self.pwordcheckvar)
- self.passwordcheck.place(x=275,y=140,anchor="n",width=150)
- self.gender = tkinter.StringVar()
- genderlabel = tkinter.Label(useraddframe,text="Gender:",bg=self.palette["afb"])
- genderlabel.place(x=25,y=120,anchor="nw")
- genderentry = tkinter.OptionMenu(useraddframe,self.gender,"Male","Female")
- genderentry.configure(highlightbackground=self.palette["afb"])
- genderentry.place(x=100,y=115,anchor="nw",width=75)
- self.flight = tkinter.StringVar()
- flightlabel = tkinter.Label(useraddframe,text="Flight:",bg=self.palette["afb"])
- flightlabel.place(x=25,y=155,anchor="nw")
- flightentry = tkinter.OptionMenu(useraddframe,self.flight,"A","B","T")
- flightentry.configure(highlightbackground=self.palette["afb"])
- flightentry.place(x=100,y=150,anchor="nw",width=75)
- self.rank = tkinter.StringVar()
- ranklabel = tkinter.Label(useraddframe,text="Rank:",bg=self.palette["afb"])
- ranklabel.place(x=25,y=190,anchor="nw")
- rankentry = tkinter.OptionMenu(useraddframe,self.rank,"Cdt","Cpl","Sgt","FS","CWO")
- rankentry.configure(highlightbackground=self.palette["afb"])
- rankentry.place(x=100,y=185,anchor="nw",width=75)
- def changerankoptions(): # changes the rank options if the user is a staff member, as staff have different ranks to cadets
- print("rankchanging")
- cadet = staff.get()
- print(cadet)
- staff_ranks = ("CI","SI","Sgt (ATC)","FS (ATC)","WO (ATC)","Plt Off","Fg Off","Flt Lt","Sqn Ldr","Wg Cdr","Gp Capt")
- cadet_ranks = ("Cdt","Cpl","Sgt","FS","CWO")
- rankentry["menu"].delete(0,"end")
- flightentry["menu"].delete(0,"end")
- if cadet:
- for i in staff_ranks:
- rankentry["menu"].add_command(label=i,command=tkinter._setit(self.rank, i))
- flightentry["menu"].add_command(label="S",command=tkinter._setit(self.flight,"S"))
- self.flight.set("S")
- self.rank.set("CI")
- else:
- for i in cadet_ranks:
- rankentry["menu"].add_command(label=i,command=tkinter._setit(self.rank, i))
- for i in ("A","B","T"):
- flightentry["menu"].add_command(label=i,command=tkinter._setit(self.flight, i))
- self.flight.set("A")
- self.rank.set("Cdt")
- stafflbl = tkinter.Label(useraddframe,text="Staff? :",bg=self.palette["afb"])
- stafflbl.place(x=200,y=190)
- staff = tkinter.BooleanVar()
- staff.set(False)
- staffbtn = tkinter.Checkbutton(useraddframe,variable=staff,command=lambda:changerankoptions())
- staffbtn.place(x=275,y=190)
- doblabel = tkinter.Label(useraddframe,text="D.O.B:",bg=self.palette["afb"])
- doblabel.place(x=25,y=225,anchor="nw")
- self.month = tkinter.StringVar()
- self.month.set("Jan")
- self.dayentry = tkinter.Spinbox(useraddframe,from_=1,to=31)
- self.dayentry.place(x=103,y=220,width=50,height=25)
- self.monthdict = {"Jan":1,"Feb":2,"Mar":3,"Apr":4,"May":5,"Jun":6,"Jul":7,"Aug":8,"Sep":9,"Oct":10,"Nov":11,"Dec":12}
- monthentry = tkinter.OptionMenu(useraddframe,self.month,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
- monthentry.configure(highlightbackground=self.palette["afb"],indicatoron=False)
- monthentry.place(x=188,y=218,width=60,height=30,anchor="n")
- self.year = tkinter.StringVar()
- self.year.set("2000")
- self.yearentry = tkinter.Spinbox(useraddframe,from_=1930,to=int(datetime.datetime.today().strftime("%Y"))-11,textvariable=self.year)
- self.yearentry.place(x=223,y=220,width=50,height=25)
- # above code creates buttons and boxes to allows entry of a new user
- manageuserbtn = tkinter.Button(self,text="Manage Users",command=lambda:self.manageusers(controller),font=("Arial Black",14))
- manageuserbtn.place(x=420,y=185,width=250,height=50,anchor="w")
- controller.conn.send("rr".encode())
- response = controller.conn.recv(1024).decode()
- data = json.loads(response)
- officernumber = staffnumber = nconumber = cadetnumber = 0
- for i in data:
- rank = i[0]
- if rank in ("Plt Off","Fg Off","Flt Lt","Sqn Ldr","Wg Cdr","Gp Capt"):
- officernumber+=1
- elif rank in ("CI","SI","Sgt (ATC)","FS (ATC)","WO (ATC)"):
- staffnumber+=1
- elif rank in ("Cpl","Sgt","FS","CWO"):
- nconumber+=1
- elif rank == "Cdt":
- cadetnumber+=1
- # counts total number of users to display how many of each type there are
- usernoframe = tkinter.Frame(self,background = self.palette["afb"])
- usernoframe.place(x=420,y=245,anchor="nw",width=250,height=200)
- usernotitle = tkinter.Label(usernoframe,text="Users",background=self.palette["afb"],foreground="white",font=("Arial Black","15","underline"))
- noofusers = tkinter.Label(usernoframe,text="""
- Officers: {offno}
- Other Staff: {staffno}
- NCOs: {ncono}
- Cadets: {cadetno}""".format(offno=officernumber,staffno=staffnumber,ncono=nconumber,cadetno=cadetnumber)
- ,background = self.palette["afb"],foreground="white",font=("Arial Black","12"),justify="left")
- usernotitle.place(x=125,y=10,anchor="n")
- noofusers.place(x=125,y=50,anchor="n")
- # displays number of users
- def manageusers(self,parent):
- parent.conn.send("d".encode())
- # client wishes to change details of a user
- endofdata = False
- data=""
- while not endofdata:
- received = parent.conn.recv(1024)
- decoded = received.decode()
- print("received:",decoded)
- data = data.join(decoded)
- if data[-1] == ">":
- endofdata = True
- jsondata = data[1:-1]
- data = json.loads(jsondata)
- # above code receives data and decodes it to usable format
- for i in data:
- print(i)
- self.managementwindow = tkinter.Toplevel()
- self.managementwindow.geometry("400x200+200+200")
- self.managementwindow.tk.call('wm', 'iconbitmap', self.managementwindow._w, "resources/crest.ico")
- self.managementwindow.configure(bg=self.palette["bgblue"])
- self.managementwindow.grab_set()
- # creates extra window to select users to edit
- def scrollfunc(event):
- can.configure(scrollregion=can.bbox("all"),width=383,height=200)
- canvasframe = tkinter.Frame(self.managementwindow,relief="groove",width=383,height=200)
- canvasframe.place(x=0,y=0)
- can = tkinter.Canvas(canvasframe)
- frame = tkinter.Frame(can)
- scrollbar = tkinter.Scrollbar(canvasframe,orient="vertical",command=can.yview)
- can.configure(yscrollcommand=scrollbar.set)
- scrollbar.pack(side="right",fill="y")
- can.pack(side="left")
- can.create_window((0,0),window=frame,anchor="nw")
- frame.bind("<Configure>",scrollfunc)
- a=0
- print(data)
- controller = parent
- def selectuser(uid,parent,num):
- option = self.selection[num-1].get()
- print(option,uid)
- if option == "Delete User": # this code allows a user to be deleted
- checking = tkinter.messagebox.askquestion("Delete User","Are you sure you want to delete this user? It cannot be undone")
- if checking == "yes":
- parent.conn.send("px{userid}".format(userid=uid).encode())
- response = parent.conn.recv(1024).decode()
- if response == "UFD":
- tkinter.messagebox.showinfo("Success","User Successfully Deleted")
- self.managementwindow.destroy()
- else:
- tkinter.messagebox.showerror("Error","An error occured. Try again")
- elif option == "Reset Password": # this code resets a user's password and receoves a randomly-generated one
- checking = tkinter.messagebox.askquestion("Reset Password","Are you sure you want to reset this user's password?")
- if checking == "yes":
- parent.conn.send("pp{userid}".format(userid=uid).encode())
- npw = parent.conn.recv(1024).decode()
- print(npw)
- print(npw[:3])
- if npw[:3] == "npw":
- tkinter.messagebox.showinfo("New Password","The new password for this user is: {pw}\nIt is strongly advised they write this down.".format(pw=npw[3:]))
- elif option == "Edit User":
- usereditwindow = tkinter.Toplevel(parent)
- # creates a separate window to the main program
- usereditwindow.grab_set()
- # makes it so that the main window cannot be interacted with unil this window has been closed
- usereditwindow.geometry("200x140")
- # setting size of window
- usereditwindow.resizable(0,0)
- # preventing the window from being resized
- userlbl = tkinter.Label(usereditwindow,text="Which attribute would \nyou like to change?")
- userlbl.place(x=100,y=0,anchor="n")
- attribute = tkinter.StringVar()
- newval = tkinter.StringVar()
- newval.trace_add("write", lambda x,y,z: self.change_text(var=newval,limit="alpha"))
- attribute.set("Forename")
- attributebox = tkinter.OptionMenu(usereditwindow,attribute,"Forename","Surname","Gender","Rank","Flight","Username")
- attributebox.place(x=100,y=40,anchor="n")
- self.entrywidg = []
- entrybox = tkinter.Entry(usereditwindow,text=newval)
- entrybox.place(x=100,y=70,anchor="n")
- submit = tkinter.Button(usereditwindow,text="Submit Changes",command = lambda: submitdata())
- submit.place(x=100,y=100,anchor="n")
- def submitdata():
- print("helllllllo")
- ranks = ("Cdt","Cpl","Sgt","FS","CWO","CI","SI","Sgt (ATC)","FS (ATC)","WO (ATC)","Plt Off","Fg Off","Flt Lt","Sqn Ldr","Wg Cdr","Gp Capt")
- varchanging = attribute.get()
- newdata = entrybox.get()
- if varchanging == "Gender" and len(newdata)!=1:
- tkinter.messagebox.showerror("Error","Gender must be 1 character")
- return 0
- elif varchanging == "Rank" and newdata not in ranks:
- tkinter.messagebox.showerror("Error","Not a valid rank. Valid ranks are:\n Cdt, Cpl, Sgt, FS, CWO,\n CI, SI, Sgt (ATC), WO (ATC), Plt Off,\n Fg Off, Flt Lt, Sqn Ldr, Wg Cdr, Gp Capt")
- return 0
- elif newdata == "":
- tkinter.messagebox.showerror("Error","Data field cannot be empty")
- return 0
- parent.conn.send("pd{cid}+{typ}+{dat}".format(typ=varchanging,dat=newdata,cid=uid).encode())
- response = parent.conn.recv(1024).decode()
- if response == "DCS":
- tkinter.messagebox.showinfo("Success","Details successfully changed")
- usereditwindow.destroy()
- elif response == "UAE":
- tkinter.messagebox.showerror("Error","That username already exists")
- self.selection = []
- tkinter.Label(frame,text="Rank").grid(row=a,column=0)
- tkinter.Label(frame,text="Name").grid(row=a,column=1)
- tkinter.Label(frame,text="Option").grid(row=a,column=3)
- self.buttons = []
- for i in data:
- a+=1
- tkinter.Label(frame,text=i[0]).grid(row=a,column=0)
- tkinter.Label(frame,text=i[1]).grid(row=a,column=1)
- tkinter.Label(frame,text=i[2]).grid(row=a,column=2)
- name = i[0]+" "+i[1]+" "+i[2]
- self.selection.append(tkinter.StringVar())
- self.selection[-1].set("Edit User")
- tkinter.OptionMenu(frame,self.selection[-1],"Edit User","Reset Password","Delete User").grid(row=a,column=3)
- print("button",i,":",i[3])
- self.buttons.append(tkinter.Button(frame,command = lambda x=i[3],y=a: selectuser(x,parent,y),text="Select"))
- self.buttons[-1].grid(row=a,column=4)
- def addnewuser(self,parent):
- forename = self.forenameentry.get()
- surname = self.surnameentry.get()
- username = self.usernameentry.get()
- password = self.passwordentry.get()
- password2 = self.passwordcheck.get()
- flight = self.flight.get()
- rank = self.rank.get()
- gender = self.gender.get()
- if gender == "Male":
- gender = "M"
- else:
- gender = "F"
- dob = self.getdob()
- if password == password2:
- if len(password)>=8:
- userdata = (forename,surname,rank,flight,gender,dob,username,password)
- jsondata = json.dumps(userdata)
- sendingdata = "su" + jsondata
- parent.conn.send(sendingdata.encode())
- response = parent.conn.recv(1024).decode()
- if response == "UAS":
- self.forenameentry.delete(0,"end")
- self.surnameentry.delete(0,"end")
- self.usernameentry.delete(0,"end")
- self.passwordentry.delete(0,"end")
- self.passwordcheck.delete(0,"end")
- tkinter.messagebox.showinfo("Success","User successfully added")
- elif response == "UAE":
- tkinter.messagebox.showerror("Error","That username is taken")
- else:
- tkinter.messagebox.showerror("Error","Password must be 8 characters or longer")
- else:
- tkinter.messagebox.showerror("Error","Passwords do not match")
- def checkcontent(string):
- pattern = ""
- def getdob(self):
- day = self.dayentry.get()
- month = self.month.get()
- monthnum = self.monthdict[month]
- try:
- print(str(monthnum)[1])
- monthnum = str(monthnum)
- except:
- monthnum = "0"+str(monthnum)
- year = self.yearentry.get()
- datestr = str(year)+"-"+str(monthnum)+"-"+str(day)
- print(datestr)
- return datestr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement