diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index b1379b1f..2f640527 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -245,7 +245,8 @@ class crans_ldap: 'mac': 'macAddress', 'ip': 'ipHostNumber', 'telephone': 'tel', - 'position': 'positionBorne' } + 'position': 'positionBorne', + 'lieu': 'lieuBorne' } # Les différentes classes LDAP de machines ldap_machines_classes = ['machineFixe', 'machineWifi', 'machineCrans', 'borneWifi'] @@ -280,7 +281,7 @@ class crans_ldap: 'machineFixe': non_auto_search_machines_champs, 'machineCrans': non_auto_search_machines_champs + ['prise'], 'borneWifi': non_auto_search_machines_champs + \ - ['prise', 'puissance', 'canal', 'hotspot', 'positionBorne'], + ['prise', 'puissance', 'canal', 'hotspot', 'positionBorne', 'lieuBorne', 'nvram'], 'machineWifi': non_auto_search_machines_champs + ['ipsec'] } # tous les champs de recherche @@ -1037,7 +1038,7 @@ class base_classes_crans(crans_ldap): # Formate les entrées de l'historique de la forme champ (ancien -> nouveau) # On suppose que le champ apparaît forcément dans l'enregistrement - for champ in ['chbre', 'nom', 'prenom', 'mail', 'tel', + for champ in ['chbre', 'nom', 'prenom', 'mail', 'tel', 'lieu', 'puissance', 'canal', 'prise', 'responsable', 'contourneGreylist', 'macAddress', 'ipHostNumber', 'host']: if champ in self.modifs: @@ -1055,7 +1056,7 @@ class base_classes_crans(crans_ldap): # Formate les entrées de l'historique de la forme champ+diff-diff for champ in ['droits', 'controle', 'paiement', 'carteEtudiant', - 'mailAlias', 'hostAlias', 'exempt']: + 'mailAlias', 'hostAlias', 'exempt', 'nvram']: if champ in self.modifs: if champ == 'controle': # Ce n'est pas pareil que self._init_data.get('controle', ['']) @@ -1183,7 +1184,7 @@ class base_classes_crans(crans_ldap): pass def _set(self, champ, val, comment=None): - """ Met à jour les données de data et modifie modifs si besoin """ + """ Met à jour les données de data et modifie modifs si besoin """ if (not self._data.has_key(champ) and val != []) \ or (self._data.has_key(champ) and self._data[champ]!=val): self._data[champ]=val @@ -2822,6 +2823,72 @@ class BorneWifi(Machine): self._set('positionBorne', ' '.join(new)) return new + def lieu(self, new=False): + """ + Définit et renvoie le lieu d'une borne wifi. + new peut être False (renvoie la valeur actuelle), None + (suppression du champ), ou une chaîne définissant + la nouvelle valeur. Renvoie dans tous les cas la + nouvelle valeur. + """ + if new == False: + return (self._data.get('lieuBorne') or [''])[0] or None + + elif new == None: + self._set('lieuBorne', []) + return None + + else: + self._set('lieuBorne', new) + return new + + def nvram(self, champ=None, new=False): + """ + Définit et renvoie un champ nvram d'une borne wifi. + Si champ=None, renvoie sous forme de liste key=value tous + les champs. On peut aussi définir tous les champs en + passant dans new la liste. + Sinon, définit et renvoie la valeur du champ indiqué. + Le champ est juste retourné, supprimé ou modifié selon + que new vaut False, None ou autre chose. + """ + current = self._data.get('nvram', [])[:] + + if champ == None: + if type(new) is list: + self.set('nvram', new) + return new + else: + return current + + # Recherche l'index du champ + index = None + for i in range(len(current)): + current_champ = current[i] + if current_champ.startswith(champ): + sep_index = current_champ.find('=') + 1 + if sep_index > 0: + current_champ = current_champ[sep_index:] + index = i + break + + if new == False: + return index != None and current_champ or None + + elif new == None: + if index != None: + del current[index] + self._set('nvram', current) + return None + + else: + if index == None: + current.append("%s=%s" % (champ, new)) + else: + current[index] = "%s=%s" % (champ, new) + self._set('nvram', current) + return new + class _fake_proprio(crans_ldap): """ Définitions de base d'un propriétaire virtuel """