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)
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
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]
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)
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)
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é"]]
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)
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
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]
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]
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 ''
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')]]
def render_newUser(self, ctx, _): """Render the 'I'm a new user' fragment.""" if maybe_user(ctx).pending: return '' return ctx.tag
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)
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)