Example #1
0
    def renderHTTP(self, ctx):
        """Handle HTTP requests."""
        srv = IService(ctx)
        request = IRequest(ctx)

        current = must_user(ctx)
        user = srv.validate_challenge(  # pylint: disable-msg=E1101
            self.challenge, current.session)

        if user:
            message(ctx, u'Bienvenue, %s' % (user.email, ))
            request.redirect("/")
            request.finish()
            return ''

        # Some people simply reuse invitations: don't complain if they
        # are already connected, just redirect them to the main page.
        avatar = maybe_user(ctx)
        if avatar.identified:
            request.redirect("/")
            request.finish()
            return ''

        # pylint: disable-msg=E1101
        self.contentTags = [
            T.h1[u"Cette clé n'est pas valable"],
            T.p[u"Vous pouvez obtenir une nouvelle clé par e-mail.",
                T.div(_class="editable bl")[T.div(_class="br")[T.div(
                    _class="tl")[T.div(_class="tr")[T.div(
                        _class="edcontent")[login.LoginFragment(
                            original=login.LoginInfo(
                                force_reconnect=True))], ]]]]]
        ]

        return BasePage.renderHTTP(self, ctx)
Example #2
0
    def data_listContent(self, ctx, _):
        """Return the list's content (ie the items)."""
        avatar = maybe_user(ctx)
        editable = manages_list(ctx, avatar, self.list)

        needs_reservation = not editable or self.list.showres

        srv = IService(ctx)

        # pylint: disable-msg=E1101
        items = srv.itemsForList(self.list, needs_reservation)

        # The list admin needs to see all the items, for other users,
        # discard items reserved by someone else
        if not editable:
            # Simple users have the "reserved" tag, but cannot see by
            # whom
            if avatar.anonymous:
                user = None
            else:
                user = avatar.user.id

            items = [
                item for item in items
                if item.res is None or item.res[0] == user
            ]

            # discard the info about who reserved
            for i in items:
                if i.res:
                    i.res = (i.res[0], i.res[1], None)
        return items
Example #3
0
    def render_userbox(self, ctx, data):
        """Render the box containing the user's login status."""
        avatar = maybe_user(ctx)
        srv = IService(ctx)

        warn = ''

        if avatar.anonymous:
            email = None
        else:
            email = avatar.user.email
            if not email:
                email = srv.pretendedEmail(avatar.user)
                warn = T.span(
                    id="activate")[u"Vous devez encore ",
                                   T.a(href="/")[u"activer votre compte"]]

        if email:
            greetings = T.div(
                _class="userinfo")[warn,
                                   T.span(style="padding-right:3em")[email],
                                   T.a(href="/")[u"Réservations"], u' :: ',
                                   T.a(href="/logout")[u"Quitter"], ]

        else:
            info = login.LoginInfo(warnings=False, force_reconnect=True)
            greetings = T.div(_class="userinfo")[login.LoginFragment(
                original=info)]

        return ctx.tag[T.a(href="/")[T.img(src="/images/mes-souhaits.png",
                                           align="left",
                                           alt="Mes souhaits",
                                           width=203,
                                           height=36)], greetings]
Example #4
0
 def beforeRender(self, ctx):
     """Called before the page is actually rendered."""
     # If we are connected, we can put this list in our "friends" list
     avatar = maybe_user(ctx)
     if not avatar.identified or owns_list(avatar, self.list):
         return
     # pylint: disable-msg=E1101
     IService(ctx).addToFriend(avatar.user, self.list)
Example #5
0
    def render_emailValue(self, ctx, _):
        """Render the 'email' field."""
        srv = IService(ctx)
        user = maybe_user(ctx).user

        email = srv.pretendedEmail(user)  # pylint: disable-msg=E1101

        return ctx.tag(value=email)
Example #6
0
    def render_listbox(self, ctx, data):
        """Render the box with the list of wishlists."""
        user = maybe_user(ctx)

        if not user.anonymous:
            tag = ctx.tag.clear()
            return tag[loaders.xmlfile(templateDir=TEMPLATE_DIR,
                                       template='listbox.xml')]
        else:
            return ctx.tag[T.em[u"Vous n'êtes pas connecté"]]
Example #7
0
    def render_content(self, ctx, _):
        """Render the body of the main page."""
        avatar = maybe_user(ctx)

        if avatar.identified:
            tmpl = 'welcome_again.xml'
        elif avatar.pending:
            tmpl = 'welcome_pending.xml'
        else:
            tmpl = 'welcome.xml'

        return loaders.xmlfile(templateDir=TEMPLATE_DIR, template=tmpl)
Example #8
0
    def data_listResa(self, ctx, _):
        """Return the user's reservations."""
        user = maybe_user(ctx).user
        srv = IService(ctx)

        # pylint: disable-msg=E1101
        items = [
            item for item in srv.getUserReservations(user)
            if item.res[1] == 'R'
        ]

        for i in items:
            i.res = (i.res[0], i.res[1], None)

        return items
Example #9
0
    def render_possibleActions(self, ctx, data):
        """Render the buttons under am item."""
        # pylint: disable-msg=E1101
        avatar = maybe_user(ctx)
        if manages_list(ctx, avatar, self.list):
            child = url.here.child(str(data.key))

            modify = T.div(_class="listaction")[
                u'» ',
                T.a(href=child)[u'Modifier'], ' :: ',
                T.a(href=child.child('delete'))[u'Effacer']]

        else:
            if not data.res:
                # the object is not yet reserved, so it can be for us
                k = str(data.key)
                modify = T.form(action=url.here.child(k).child('get'),
                                id='item-' + k,
                                _class='item-op',
                                method='POST')[T.input(
                                    type='submit',
                                    name='get',
                                    value=u'Réserver cette idée')]
            else:
                if avatar.anonymous:
                    user = None
                else:
                    user = avatar.user.id

                if data.res[0] == user:
                    k = str(data.key)
                    donated = T.a(href=url.here.child(k).child('donated'),
                                  style="margin-left:2em"
                                  )[u"»\xa0Vous avez donné le cadeau\xa0?"]
                    modify = T.form(
                        action=url.here.child(k).child('giveup'),
                        id='item-' + k,
                        _class='item-op',
                        method='POST')[T.input(type='submit',
                                               name='giveup',
                                               value=u'Abandonner cette idée'),
                                       donated]
                else:
                    modify = ''

        return ctx.tag[modify]
Example #10
0
    def render_listDesc(self, ctx, _):
        """Render the list's description."""
        avatar = maybe_user(ctx)
        editable = manages_list(ctx, avatar, self.list)

        # pylint: disable-msg=E1101
        desc = self.list.desc or T.em['(pas de description)']

        if editable:
            invite = url.URL.fromString("/invite")
            invite = invite.add('lst', str(self.list.id))

            srv = IService(ctx)
            name = self.list.name or 'ma liste'

            action = """
            url=encodeURIComponent(location.href);location.href='%s?url='+url+'&title='+encodeURIComponent(document.title)+'&back='+url
            """ % (srv.base_url + '/' + self.list.url)
            action = re.sub('\s+', ' ', action.strip())
            desc = [
                desc,
                T.div(_class="listaction")[
                    u'» ', T.b[T.a(href=invite)[u'Inviter']], ' :: ',
                    T.a(href=url.here.child('edit'))[u'Modifier'], ' :: ',
                    T.a(href=url.here.child('destroy'))[u'Détruire'], ],
                T.div(_class="listaction")[
                    T.em[u'Glisse moi dans tes bookmarks\xa0! '],
                    T.a(href='javascript:' + action)[u'» %s' % name]]
            ]
        elif avatar.identified:
            desc = [
                desc,
                T.div(_class="listaction")[
                    u'» ',
                    T.a(href=url.here.child('unsubscribe'))[u'Ignorer'], ]
            ]

        return ctx.tag[desc]
Example #11
0
    def render_maybeAdd(self, ctx, _):
        """Render the 'new item' form if the user can change the list."""
        avatar = maybe_user(ctx)

        if manages_list(ctx, avatar, self.list):
            req = IRequest(ctx)
            if ctx.arg('back'):
                back = u'Ajouter ce souhait et revenir au site précédent'
            else:
                back = u'Ajouter ce souhait'
            # pylint: disable-msg=E1101
            return T.div(_class="editable bl")[T.div(_class="br")[T.div(
                _class="tl"
            )[T.div(_class="tr")[T.div(_class="edcontent")[
                u'Ajouter un souhait\xa0:',
                T.form(name='add',
                       action=url.here.child('add'),
                       method='POST',
                       _class="edititem")
                [T.input(type='text',
                         name='title',
                         _class='inputfield',
                         value=arg(req, 'title', self.defaultValues['title'])),
                 T.br,
                 T.textarea(name='description', _class='inputfield', rows='5'
                            )[self.defaultValues['description']], T.br,
                 T.input(type='text',
                         name='url',
                         _class='inputfield',
                         value=arg(req, 'url', self.defaultValues['url'])),
                 T.br,
                 T.
                 input(type='hidden', name='back', value=arg(req, 'back', '')),
                 T.input(type='submit', name='add', value=back)]]]]]]
        else:
            return ''
Example #12
0
    def render_form(self, ctx, _):
        """Render the 'new list' form."""
        req = IRequest(ctx)
        avatar = maybe_user(ctx)

        warnings = []

        # pylint: disable-msg=E1101
        if req.method == 'POST':
            name = arg(req, 'list')
            if not name:
                warnings.append(u"Vous n'avez pas donné de nom à la liste.")

            if avatar.identified:
                email = avatar.user.email
                clean_email = email
            else:
                email = arg(req, 'email')
                if not email:
                    warnings.append(u"Vous n'avez pas donné d'adresse email.")

                clean_email = validate_email(email)
                if not clean_email:
                    warnings.append(u"Votre adresse email est invalide.")

            if name and clean_email:
                self._create_list(ctx, name, clean_email)
                return ''
        else:
            name = ''
            email = ''

        if avatar.identified:
            email_form = ''

        else:
            email_form = T.tr[
                T.td[T.b[u'Votre adresse e-mail\xa0:']], T.td[T.input(
                    type="text", name="email", id="listemail", value=email)],
                T.td[T.em[u'\xa0(elle est utilisée pour vous'
                          ' identifier sur ce site)']]],

        if warnings:
            warnings = T.div(_class="warning")[' '.join(warnings)]

        return ctx.tag(
            _class="editable", render=self.render_rounded_box
        )[warnings,
          T.form(style="padding: 1ex",
                 name="newlist",
                 action="/newlist",
                 method="POST")
          [T.table[T.tr[
              T.td[T.b[u'Nom de la liste\xa0: ']],
              T.td[T.input(type="text", id="listname", name="list", value=name
                           )], T.td[u'\xa0(par exemple\xa0: ',
                                    T.em[u'Le Noël de Pierre'], u')']],
                   email_form, ],
           T.input(type="submit",
                   value=u'Créer cette liste',
                   style='margin-top: 0.5ex')]]
Example #13
0
 def render_newUser(self, ctx, _):
     """Render the 'I'm a new user' fragment."""
     if maybe_user(ctx).pending:
         return ''
     return ctx.tag
Example #14
0
 def data_friend_lists(self, ctx, data):
     """Returned the list of the wishlists watched by the user."""
     return IService(ctx).getFriendLists(maybe_user(ctx).user)
Example #15
0
 def data_my_lists(self, ctx, data):
     """Returned the list of the wishlists owned by the user."""
     return IService(ctx).getListsOwnedBy(maybe_user(ctx).user)