Package ldaptor :: Package apps :: Package webui :: Module delete
[hide private]
[frames] | no frames]

Source Code for Module ldaptor.apps.webui.delete

  1  from zope.interface import implements 
  2  from webut.skin import iskin 
  3  from ldaptor.protocols.ldap import ldapsyntax, distinguishedname 
  4  from ldaptor.apps.webui.uriquote import uriUnquote 
  5  from ldaptor.apps.webui.i18n import _ 
  6  from ldaptor.apps.webui import i18n, iwebui 
  7  from ldaptor import weave 
  8   
  9  import os 
 10  from nevow import rend, inevow, loaders, url, tags 
 11  from formless import annotate, webform, iformless 
 12   
13 -class ErrorWrapper:
14 - def __init__(self, value):
15 self.value = value
16
17 -class ConfirmDelete(rend.Page):
18 implements(iskin.ISkinnable) 19 20 title = _('Ldaptor Delete Page') 21 22 docFactory = loaders.xmlfile( 23 'delete.xhtml', 24 templateDir=os.path.split(os.path.abspath(__file__))[0]) 25
26 - def __init__(self, dn):
27 super(ConfirmDelete, self).__init__() 28 self.dn = dn
29
30 - def getBindingNames(self, ctx):
31 return ['delete']
32
33 - def bind_delete(self, ctx):
34 return annotate.MethodBinding( 35 'delete', 36 annotate.Method(arguments=[ 37 annotate.Argument('ctx', annotate.Context()), 38 ], 39 label=_('Confirm delete')), 40 action=_('Delete'))
41
42 - def delete(self, ctx):
43 request = inevow.IRequest(ctx) 44 user = request.getSession().getLoggedInRoot().loggedIn 45 e=ldapsyntax.LDAPEntry(client=user.client, 46 dn=self.dn) 47 d=e.delete() 48 def cb(dummy): 49 basedn = iwebui.ICurrentDN(ctx) 50 while (basedn != '' 51 and self.dn.contains(basedn)): 52 basedn = basedn.up() 53 u=url.URL.fromContext(ctx) 54 u=u.parentdir().parentdir() 55 if basedn != '': 56 u=u.child(basedn).child('search') 57 request.setComponent(iformless.IRedirectAfterPost, u) 58 return _("Deleted %s.") % self.dn
59 def eb(fail): 60 return _("Failed: %s.") % fail.getErrorMessage()
61 d.addCallbacks(cb, eb) 62 return d 63
64 - def data_status(self, ctx, data):
65 try: 66 return ctx.locate(inevow.IStatusMessage) 67 except KeyError: 68 return None
69
70 - def render_if(self, context, data):
71 r=context.tag.allPatterns(str(bool(data))) 72 return context.tag.clear()[r]
73
74 - def data_entry(self, context, data):
75 user = context.locate(inevow.ISession).getLoggedInRoot().loggedIn 76 assert user 77 78 entry = ldapsyntax.LDAPEntry(client=user.client, dn=self.dn) 79 d = entry.fetch() 80 d.addErrback(ErrorWrapper) 81 return d
82
83 - def render_error_or_pass(self, context, data):
84 if isinstance(data, ErrorWrapper): 85 return context.tag.clear() \ 86 [ tags.strong(style="color: red;") \ 87 [ _('An error occurred: '), 88 data.value.getErrorMessage(), 89 ] 90 ] 91 else: 92 return context.tag
93
94 - def data_dn(self, context, data):
95 return self.dn
96
97 - def render_form(self, context, data):
98 return webform.renderForms()
99
100 - def render_passthrough(self, context, data):
101 return context.tag.clear()[data]
102
103 - def data_header(self, ctx, data):
104 u=url.URL.fromContext(ctx).up().clear() 105 l=[] 106 l.append(tags.a(href=u.sibling("search"))[_("Search")]) 107 l.append(tags.a(href=u.sibling("add"))[_("add new entry")]) 108 l.append(tags.a(href=u.sibling("edit").child(str(self.dn)))[_("edit")]) 109 return l
110
111 - def render_keyvalue(self, context, data):
112 return weave.keyvalue(context, data)
113
114 - def render_keyvalue_item(self, context, data):
115 return weave.keyvalue_item(context, data)
116 117 render_i18n = i18n.render() 118
119 -class GetDN(rend.Page):
120 implements(iskin.ISkinnable) 121 122 title = _('Ldaptor Delete Page') 123 124 addSlash = True 125 126 docFactory = loaders.xmlfile( 127 'delete-nodn.xhtml', 128 templateDir=os.path.split(os.path.abspath(__file__))[0]) 129
130 - def render_url(self, context, data):
131 u = url.URL.fromContext(context) 132 return context.tag(href=u.parentdir().child('search'))
133
134 - def childFactory(self, context, name):
135 unquoted=uriUnquote(name) 136 try: 137 dn = distinguishedname.DistinguishedName(stringValue=unquoted) 138 except distinguishedname.InvalidRelativeDistinguishedName, e: 139 # TODO There's no way to throw a FormException at this stage. 140 return None 141 r=ConfirmDelete(dn=dn) 142 return r
143 144 render_i18n = i18n.render()
145
146 -def getResource():
147 return GetDN()
148