From 00ae2f6a99a3b4a123b8d1ac8640d3ab3cb04e8c Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 27 Jun 2010 13:13:41 +0000 Subject: [PATCH] provide log-in portlet git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3910 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/common.py | 6 +++++- browser/node.py | 17 +++++++++++++---- browser/node_macros.pt | 9 ++++++++- locales/de/LC_MESSAGES/loops.mo | Bin 11634 -> 11826 bytes locales/de/LC_MESSAGES/loops.po | 11 ++++++++++- security/common.py | 3 ++- 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/browser/common.py b/browser/common.py index 16c72e2..687e9b6 100644 --- a/browser/common.py +++ b/browser/common.py @@ -28,7 +28,7 @@ from urllib import urlencode from zope import component from zope.app.form.browser.interfaces import ITerms from zope.app.i18n.interfaces import ITranslationDomain -from zope.app.security.interfaces import IAuthentication +from zope.app.security.interfaces import IAuthentication, IUnauthenticatedPrincipal from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.security.interfaces import IUnauthenticatedPrincipal from zope.app.security.interfaces import PrincipalLookupError @@ -150,6 +150,10 @@ class BaseView(GenericView, I18NView): principal = self.request.principal return principal and principal.id or '' + @Lazy + def isAnonymous(self): + return IUnauthenticatedPrincipal.providedBy(self.request.principal) + def recordAccess(self, viewName, **kw): access.record(self.request, principal=self.principalId, view=viewName, **kw) diff --git a/browser/node.py b/browser/node.py index cb43ed1..3f55699 100644 --- a/browser/node.py +++ b/browser/node.py @@ -117,10 +117,19 @@ class NodeView(BaseView): # TODO: is this useful in any case? self.virtualTargetObject is not None and canWrite(self.virtualTargetObject, 'title')): - cm.register('portlet_right', 'actions', title=_(u'Actions'), - subMacro=node_macros.macros['actions'], - priority=100) - if not IUnauthenticatedPrincipal.providedBy(self.request.principal): + # check if there are any available actions; + # store list of actions in macro object (evaluate only once) + actions = [act for act in self.getActions('portlet') if act.condition] + if actions: + cm.register('portlet_right', 'actions', title=_(u'Actions'), + subMacro=node_macros.macros['actions'], + priority=100, actions=actions) + if self.isAnonymous and self.globalOptions('provideLogin'): + cm.register('portlet_right', 'login', title=_(u'Not logged in'), + subMacro=node_macros.macros['login'], + icon='cybertools.icons/user.png', + priority=10) + if not self.isAnonymous: mi = self.controller.memberInfo title = mi.title.value or _(u'Personal Informations') url=None diff --git a/browser/node_macros.pt b/browser/node_macros.pt index ece06a2..574785c 100644 --- a/browser/node_macros.pt +++ b/browser/node_macros.pt @@ -221,14 +221,21 @@ - + + +
Log in
+
+ +
Log out
diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index f8001a146edd1927b3a56bfbfd024c283397c667..94f5e33f8e0a50e780f8aa791942126232e74575 100644 GIT binary patch delta 4772 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 delta 4618 zcmYk;32;@_0f+HRNCJd?hbT!{Ljnm&0D%Zd1htrmgrx`uHB~5Ug(3(=d5yA)$`UCk zwI~9upa=v6X&W>(f`Ua6hK_c@X)6VFrnQ}^(n0!tc_-7};h*0*_nv#ta?g8@17%-L ziT$xn;--k>BXT`Cm>fl&8$?k_bI(T6zSdDR7WZQxOlT8DG>LMt5e~$LI1HO&5vJoE z*b3)j6I_PPa5dU~6Vg5wJsU3U#P(b`fF1AzI)*=?5BL)8_}|zVzYX<9ZR6)#U`x)o zM+epu$72rKz9RSpdc6|c(tos-0?&$GLp!QLM}7(&@gL9!Tt)}*Pqf_?WKp8TcJcNd zkW*16I*=Q~`C{Z>RK}l!?AJBzA zKCnM}Uop}ox(7Ssf>3`7yHMYb4){&&;aqZ3+$_Pe43>+ce8=7dYWBQ!h|8rGsSJBy4hx`>Ya zD%!p^(|3T~(0X6AgJI|jmW12CDFRp<=f z#w0w8uE59W06s(8{~cY4Z_wv`ivuu;_iMcnZC`};TO6a{Zk&wXSRR~?K5#aA!$WAh zW#|A_q62*rU6J+ZlI}nU`g*9pgRaQ$&~_I?{XfXqqF4$q-kEemN0f_Pi-w{jo``l- zhPJy89q63kd~{%o&?R1mJ#j6%a{I&en&5lr#Li%zpZ`xN*ip08_&aHf*HKSH8y2D+ zj6`QvjIO}l=*-H|cJt5)EJ63ms&M{!bOm>X`aX05Z(y>Y|7r@(tQLLXhoOD}9mp4G z2aTyX(AH?XPMD3E=q4S9K6n~Bz**=fn-}U!F^hTyCg2`S_Vd4&f;S#QZ#as+%UZPI zdCb9&k$+KRzNZ~f543#_+TmdI^FJJYW#hy7Nx`Y;9=IQURS#p#4wh4JiC3WmS%)s+ zGibxzXuHGV`cbs~F?0aO(E*(a*FQnqUqF}s&)65g#B@yM+sFYHc47T}&~Q%ppj*+I zlm;iEOFk8C_W(MeIcSGVa2h{WkKrile@o+Q7jx*vb~Dj-i_ljbLnpQtUC|fQWATr{ zX-+tzi|D)k9KG=h`feL$#FwrE^4$|WXCx!Df(E&YpX}(b*aNSj9rx%S z_a@}6#iA(`{K8p`?2l*zdgESn#3#@tzJR=q=wIj_X~$EYc`CXhU9lndLzlikx(9}$ zD>52gky5mM87BGppA|05Lr1<89qEQpe+8Xs4Z0%d!uc=Il}P9rA80{Njn2A$Xp zbOkHWy;X_cw_WK!I!wWto_`0;bf60{8CRnn ztwZu-k#InfwTq7OJ5>Yw5m>X*?649SYmpa|KAQ7O8# z3(~E^5`Y>)xH(3pAYrRF$zt%;4g{0GX=e|J$k+i`ru5oqg-?bh1eKJ zqYoa3DL4adw*VbT42R-I^iy>jef}l%xv_tQ!q>rT=q^rXeG;%cdPA>ZZtw=QgW+hq zQXGI2kU2$bFa@j7fmWlh;yC8x`^ZFM(Y0`)Mc?=h?a+6Zj?Oe6?O+7@ppodiEZejU1JwuS4jq7yod34Z>MQSgQuya7+5?<^rFzLXj04Slh0x1%!| z92_35j|!Hc6PSQaaXL1@6=V_FLOk4ekCgGpW%Q^b>EwB`i#Y4s$V+57SxpubkGF`w zbhnceAwMJ^SmF3B zaR>Q1y`LN*FOW&Z<7G03JWlQ*$H;Kvv58cW>2^Jf!eQc39H(wwZ=&p0^cYRvC0XP{ z;tPI{G$*dT$7WJMj+4n`8hMU*j3oWZ!z6?Jl)O*kQwLx4W8@6+c!iv*EB)`!IEuHB zA;iy&hhKYRNHsZ0){y@{enn*}=|7>r6OU|iXI+Ueek>(-h5BiHlsrJ5t~*EncT-3uE6I;YFH(QBr|?vLB{(4X z8g>cg^*EM1NP3bt$?GJIc>E+z-S786%FW2Do^xdT$SP7po+0_\n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -197,6 +197,15 @@ msgstr "Lesezeichen für aktuelles Objekt hinzufügen" msgid "Remove from favorites" msgstr "Lesezeichen entfernen" +msgid "Personal Informations" +msgstr "Persönliche Informationen" + +msgid "Not logged in" +msgstr "Nicht angemeldet" + +msgid "Log in" +msgstr "Anmelden" + msgid "Presence" msgstr "Anwesenheit" diff --git a/security/common.py b/security/common.py index 3a0cbde..86ae3f7 100644 --- a/security/common.py +++ b/security/common.py @@ -53,7 +53,8 @@ allRolesExceptOwner = ( allRolesExceptOwnerAndMaster = tuple(allRolesExceptOwner[:-1]) minorPrivilegedRoles = ('zope.Anonymous', 'zope.Member',) localRoles = ('zope.Anonymous', 'zope.Member', 'zope.ContentManager', - 'loops.Staff', 'loops.Member', 'loops.Master', 'loops.Owner') + 'loops.SiteManager', 'loops.Staff', 'loops.Member', 'loops.Master', + 'loops.Owner') localPermissions = ('zope.ManageContent', 'zope.View', 'loops.ManageWorkspaces', 'loops.ViewRestricted', 'loops.EditRestricted', 'loops.AssignAsParent',)