apply changes that lingered on the server
This commit is contained in:
parent
a4ee6680b9
commit
87cc32ab44
|
@ -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]
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
Reference in New Issue