Exemple #1
0
 /**
  * Ritorna il dominio di competenza massima nei confronti di un'attivita'
  *
  * es. 1: se sono delegato area provinciale e l'attivita' e' locale, ottengo comitato locale
  * es. 2: se non sono nulla, ritorno false
  * es. 3: se sono referente attivita, ritorno comitato organizzatore (NON estensione)
  * @param Attivita $attivita        L'attivita in questione
  * @return GeoPolitica|bool(false)  Il dominio risultante o false se non ho superpoteri
  */
 public function dominioCompetenzaAttivita(Attivita $attivita)
 {
     if (!$attivita->modificabileDa($this)) {
         return false;
     }
     $pool = [];
     $organizzatore = $attivita->comitato();
     // Referente attivita?
     if ($attivita->referente == $this->id) {
         $pool[] = $organizzatore;
     }
     // Delegato d'area?
     foreach ($this->areeDiCompetenza() as $a) {
         $ac = $a->comitato();
         if ($ac->contiene($organizzatore)) {
             $pool[] = $ac;
         }
     }
     // Comitati di competenza
     foreach ($this->comitatiDiCompetenza() as $a) {
         if ($a->contiene($organizzatore)) {
             $pool[] = $a;
         }
     }
     // Ottiene comitato piu' grande nel pool
     $massimo = array_reduce($pool, function ($a, $b) {
         if ($a === null) {
             return $b;
         }
         if ($a::$_ESTENSIONE > $b::$_ESTENSIONE) {
             return $a;
         } else {
             return $b;
         }
     }, null);
     // Il risultato e' il dominio comune tra la visibilita' dell'attivita'
     // ed il mio potere piu' grande...
     return $attivita->visibilita()->dominioComune($massimo);
 }