Пример #1
0
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()