apply changes that lingered on the server

This commit is contained in:
Frédéric Péters 2012-10-30 16:19:07 +01:00
parent a4ee6680b9
commit 87cc32ab44
3 changed files with 62 additions and 18 deletions

View File

@ -17,17 +17,19 @@ from Acquisition import aq_base
schema = BaseSchema
def get_sn(x):
return getattr(x, 'sn')
def get_sort_key(x):
return (getattr(x, 'sn') + getattr(x, 'givenName')).lower()
class PcfAnnuaireEntry:
def __init__(self, ldap_dn, ldap_entry):
def __init__(self, directory, ldap_dn, ldap_entry):
def get_attr(x):
try:
return ldap_entry.get(x)[0].strip()
except (IndexError, TypeError):
return None
self.directory = directory
self._debug_entry = ldap_entry
self.debug_entry = ldap_entry
self.dn = ldap_dn
self.cn = get_attr('cn')
self.sn = get_attr('sn')
@ -42,13 +44,24 @@ class PcfAnnuaireEntry:
self.service = get_attr('department')
self.building = get_attr('destinationIndicator')
self.floor = get_attr('extensionAttribute1')
self.plan_filename = 'unknown.jpg'
if self.building and self.floor:
if self.building == 'Hôtel de Ligne':
bld = 'hdl'
elif self.building == 'Hôtel du Greffe':
bld = 'hdg'
else:
bld = 'unknown'
self.plan_filename = '%s%s.jpg' % (bld, self.floor)
self.office = get_attr('physicalDeliveryOfficeName')
self.fax = get_attr('facsimileTelephoneNumber')
self.email = get_attr('mail')
self.division = get_attr('division')
self.title = get_attr('title')
self.company = get_attr('company')
self.samaccountname = get_attr('sAMAccountName')
self.manager = get_attr('manager')
self.manager_name = None
if self.manager:
self.manager_url = urllib.quote(self.manager)
self.manager_name = self.manager.split('=')[1].split(',')[0]
@ -56,6 +69,17 @@ class PcfAnnuaireEntry:
def __str__(self):
return urllib.quote(self.dn)
def has_a_chief(self):
if not self.manager:
return False
if self.service == 'Service du Greffier':
return True
sec_gen = self.directory.getSecretaireGeneral()
if self.manager == sec_gen.dn:
return False
return True
has_a_chief = property(has_a_chief)
class PcfAnnuaireService:
pass
@ -92,12 +116,14 @@ class PcfAnnuaire(BaseContent):
ldap_conn = self.get_ldap_conn()
result = ldap_conn.search_s(self.get_users_base(),
ldap.SCOPE_SUBTREE, 'objectClass=person')
return [PcfAnnuaireEntry(*x) for x in result]
return [PcfAnnuaireEntry(self, *x) for x in result]
@cache(cache_key)
def getEntries(self):
return [x for x in self.getObjectEntries() if \
t = [x for x in self.getObjectEntries() if \
x.givenName and x.company == 'Parlement de la Communauté française de Belgique']
t.sort(key=get_sort_key)
return t
def getServices(self):
entries = self.getObjectEntries()
@ -113,15 +139,13 @@ class PcfAnnuaire(BaseContent):
service = services.get(entry.division)
service.agents.append(entry)
def get_name(x): return getattr(x, 'name')
def get_sn(x): return getattr(x, 'sn')
services = sorted([x for x in services.values()], key=get_name)
for service in services:
services.agents.sort(key=get_sn)
services.agents.sort(key=get_sort_key)
return services
def getEntriesWithPhone(self):
def get_sn(x): return getattr(x, 'sn')
return sorted([x for x in self.getEntries() if x.telephoneNumbers], key=get_sn)
return sorted([x for x in self.getEntries() if x.telephoneNumbers], key=get_sort_key)
def getSecretaireGeneral(self):
try:
@ -149,7 +173,7 @@ class PcfAnnuaire(BaseContent):
service_manager = self.getServiceManager(service)
entries = [x for x in self.getEntries() if \
x.service == service and x.manager == service_manager.dn and x.division in (None, ' ')]
return sorted(entries, key=get_sn)
return sorted(entries, key=get_sort_key)
def getCellules(self, service):
service_manager = self.getServiceManager(service)
@ -165,13 +189,13 @@ class PcfAnnuaire(BaseContent):
service_manager = self.getServiceManager(service)
entries = [x for x in self.getEntries() if \
x.service == service and x.division == cellule and x.manager == service_manager.dn]
return sorted(entries, key=get_sn)
return sorted(entries, key=get_sort_key)
def getCellulePeople(self, service, cellule):
cellule_managers = [x.dn for x in self.getCelluleManagers(service, cellule)]
entries = [x for x in self.getEntries() if \
x.service == service and x.division == cellule and x.dn not in cellule_managers]
return sorted(entries, key=get_sn)
return sorted(entries, key=get_sort_key)
def getPerson(self, dn):
person = [x for x in self.getEntries() if x.dn == dn][0]

View File

@ -37,8 +37,9 @@
<div id="photos">
<div tal:repeat="entry python: context.getEntries()" class="photo">
<img src="pcfannuaire_icon.gif" width="130" height="117" />
<span><span tal:replace="entry/displayName">displayName</span></span>
<a tal:attributes="href string:?person=${entry}">
<img tal:attributes="src string:/intranet/static/photos/${entry/samaccountname}.jpg" width="130" height="117" />
<span><span tal:replace="entry/displayName">displayName</span></span></a>
</div>
</div>

View File

@ -63,6 +63,8 @@
<a tal:attributes="href string:?person=${entry}">
<span tal:replace="entry/displayName">displayName</span>
</a>
<span tal:replace="entry/shortTelephoneNumber">000</span>
<span tal:condition="entry/mobile">, <span tal:replace="entry/mobile">mobile</span></span>
</li>
</ul>
@ -75,6 +77,9 @@
<a tal:attributes="href string:?person=${entry}">
<span tal:replace="entry/displayName">displayName</span>
</a>
<span tal:replace="entry/shortTelephoneNumber">000</span>
<span tal:condition="entry/mobile">, <span tal:replace="entry/mobile">mobile</span></span>
</li>
</ul>
</div>
@ -87,6 +92,9 @@
<a tal:attributes="href string:?person=${entry}">
<span tal:replace="entry/displayName">displayName</span>
</a>
<span tal:replace="entry/shortTelephoneNumber">000</span>
<span tal:condition="entry/mobile">, <span tal:replace="entry/mobile">mobile</span></span>
</li>
</ul>
@ -95,14 +103,24 @@
<a tal:attributes="href string:?person=${entry}">
<span tal:replace="entry/displayName">displayName</span>
</a>
<span tal:replace="entry/shortTelephoneNumber">000</span>
<span tal:condition="entry/mobile">, <span tal:replace="entry/mobile">mobile</span></span>
</li>
</ul>
</div>
<div tal:condition="python: person">
<div tal:define="entry python: context.getPerson(person)">
<style type="text/css">
img.photo {
float: right;
padding: 5px;
border: 1px solid black;
}
</style>
<h2><span tal:replace="entry/displayName">displayName</span></h2>
<img tal:attributes="src string:/intranet/static/photos/${entry/givenName}.${entry/sn}.jpg"/>
<img class="photo" tal:attributes="src string:/intranet/static/photos/${entry/samaccountname}.jpg"/>
<ul>
<li>Téléphone(s) : <span tal:repeat="telephoneNumber entry/telephoneNumbers">
<span tal:replace="telephoneNumber">phoneNumber</span>
@ -110,13 +128,14 @@
<li tal:condition="entry/shortTelephoneNumber">Téléphone (abrégé) : <span tal:replace="entry/shortTelephoneNumber"></span></li>
<li tal:condition="entry/mobile">GSM : <span tal:replace="entry/mobile"></span></li>
<li tal:condition="entry/building">Bâtiment : <span tal:replace="entry/building"></span></li>
<li tal:condition="entry/floor">Étage : <span tal:replace="entry/floor"></span></li>
<li tal:condition="entry/floor">Étage : <span tal:replace="entry/floor"></span> (<a tal:attributes="href string:/intranet/static/photos/${entry/plan_filename}">plan</a>)</li>
<li tal:condition="entry/office">Bureau : <span tal:replace="entry/office"></span></li>
<li tal:condition="entry/fax">Fax : <span tal:replace="entry/fax"></span></li>
<li tal:condition="entry/title">Titre : <span tal:replace="entry/title"></span></li>
<li tal:condition="entry/email">Courriel : <a tal:attributes="href string:mailto:${entry/email}" tal:content="entry/email"></a></li>
<li tal:condition="entry/service">Service : <span tal:replace="entry/service"></span></li>
<li tal:condition="entry/manager">Chef de service : <a tal:attributes="href string:?person=${entry/manager_url}" tal:content="entry/manager_name"></a></li>
<li tal:condition="entry/service">Service : <a tal:attributes="href string:?service=${entry/service}"><span tal:replace="entry/service"></span></a></li>
<li tal:condition="entry/division">Cellule : <a tal:attributes="href string:?service=${entry/service}&cellule=${entry/division}"><span tal:replace="entry/division"></span></a></li>
<li tal:condition="entry/has_a_chief">Responsable : <a tal:attributes="href string:?person=${entry/manager_url}" tal:content="entry/manager_name"></a></li>
</ul>
</div>
</div>