class GetData3(DataTemplate): """This first class registration box is to get the username, password and birthday """ def __init__(self, age): DataTemplate.__init__(self) box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) email = get_cached_data("email") secondary_email = get_cached_data("secondary_data") self.t_and_cs = TermsAndConditions() self.t_and_cs.checkbutton.connect("clicked", self.widgets_full) self.t_and_cs.connect("t-and-cs-clicked", self.show_terms_and_conditions) marketing_container = self._create_marketing_checkbox() marketing_enabled = get_cached_data("marketing_enabled") if marketing_enabled is not None: self.marketing_checkbutton.set_active(marketing_enabled) else: self.marketing_checkbutton.set_active(True) # If the user is younger than 14, ask for both Guardian and # user email, but the guardian email is compulsory if age <= 13: self.email_entry = LabelledEntry(_("Parent's Email (required)"), email) self.email_entry.connect("key-release-event", self.widgets_full) self.secondary_email_entry = LabelledEntry(_("Your Email (optional)"), secondary_email) self.secondary_email_entry.connect("key-release-event", self.widgets_full) box.pack_start(self.email_entry, False, False, 5) box.pack_start(self.secondary_email_entry, False, False, 5) # Otherwise, there is only one compulsory email else: self.email_entry = LabelledEntry(_("Your Email (required)"), email) self.email_entry.connect("key-release-event", self.widgets_full) self.secondary_email_entry = None box.pack_start(self.email_entry, False, False, 5) self.entries = [self.email_entry] box.pack_start(self.t_and_cs, False, False, 10) box.pack_start(marketing_container, False, False, 0) box.set_margin_top(20) self.add(box) def _create_marketing_checkbox(self): self.marketing_checkbutton = Gtk.CheckButton() self.marketing_checkbutton.get_style_context().add_class("get_data_checkbutton") self.marketing_checkbutton.set_margin_left(30) marketing_label = Gtk.Label(_("Email me cool stuff to do with my Kano")) marketing_label.set_max_width_chars(20) marketing_label.set_line_wrap(True) marketing_container = Gtk.Box() marketing_container.pack_start(self.marketing_checkbutton, False, False, 0) marketing_container.get_style_context().add_class("get_data_checkbutton") marketing_container.pack_start(marketing_label, False, False, 0) return marketing_container def disable_all(self): self.email_entry.set_sensitive(False) if self.secondary_email_entry: self.secondary_email_entry.set_sensitive(False) self.t_and_cs.disable_all() self.marketing_checkbutton.set_sensitive(False) def enable_all(self): self.email_entry.set_sensitive(True) if self.secondary_email_entry: self.secondary_email_entry.set_sensitive(True) self.t_and_cs.enable_all() self.marketing_checkbutton.set_sensitive(True) def get_email_entry_data(self): """This is the data that is sent to the main window and the registration """ data = {} data["email"] = self.email_entry.get_text() if self.secondary_email_entry: data["secondary_email"] = self.secondary_email_entry.get_text() else: data["secondary_email"] = "" data["marketing_enabled"] = self.marketing_checkbutton.get_active() # Cache emails if they are retrieved cache_emails(data["email"], data["secondary_email"], data["marketing_enabled"]) return data def cache_emails(self): data = self.get_email_entry_data() cache_emails(data["email"], data["secondary_email"]) def cache_marketing_choice(self): data = self.marketing_checkbutton.get_active() cache_data("marketing_enabled", data) def widgets_full(self, widget=None, event=None): full = True for entry in self.entries: text = entry.get_text() if not text: full = False elif entry == self.email_entry or entry == self.guardian_email_entry: full = is_email(text) if not self.t_and_cs.is_checked(): full = False if full: self.emit("widgets-filled") else: self.emit("widgets-empty") def show_terms_and_conditions(self, widget): """This is the dialog containing the terms and conditions - same as shown before creating an account """ window = widget.get_toplevel() # TODO: Figure out how/whether the legal text will be translated legal_text = "" for file in os.listdir(legal_dir): with open(legal_dir + file, "r") as f: legal_text = legal_text + f.read() + "\n\n\n" kdialog = KanoDialog(_("Terms and conditions"), "", scrolled_text=legal_text, parent_window=window) kdialog.run()