Ejemplo n.º 1
0
 /**
  * Verifica se un altro utente ha permessi in scrittura su me
  * @return bool modifica o non modifica
  * @param $altroUtente il modificatore
  */
 public function modificabileDa(Utente $altroUtente)
 {
     if (!$altroUtente) {
         return false;
     }
     if ($altroUtente->admin()) {
         return true;
     }
     $comitatiGestiti = array_merge($altroUtente->comitatiDelegazioni(APP_PRESIDENTE, false, false), $altroUtente->comitatiDelegazioni(APP_SOCI, false, false));
     $comitatiGestiti = array_unique($comitatiGestiti);
     // se sei persona o aspirante devo capire meglio da dove vieni
     if ($this->stato == PERSONA || $this->stato == ASPIRANTE) {
         // la funzione dimesso mi dice il tipo di dimissione (int)
         // in ogni caso se hai dimissioni voglio prendere l'ultimo comitato buono
         $d = $this->dimesso();
         // il secondo check è perchè MEMBRO_DIMESSO è 0
         if ($d || $d === MEMBRO_DIMESSO) {
             $c = $this->ultimaAppartenenza($d)->comitato();
         } else {
             // altrimenti se un ordinario
             $c = $this->unComitato(MEMBRO_ORDINARIO);
         }
     } else {
         // altrimenti hai stato VOLONTARIO e devo capire se sei pendente o no
         $c = $this->unComitato();
         if (!$c) {
             // se non è zuppa è pan bagnato (si spera)
             $c = $this->unComitato(MEMBRO_PENDENTE);
         }
     }
     // se alla fine dello spaghetti code qua sopra risulti essere qualcosa
     // allora verifico se ti posso toccacciare
     if ($c) {
         if ($c instanceof Comitato && contiene($c->locale(), $comitatiGestiti) || contiene($c, $comitatiGestiti)) {
             return true;
         }
         /* Il foreach seguente serve per risolvere 
          * temporaneamente i problemi di permessi
          * fino alla corretta implementazione di copernico
          * #970
          */
         foreach ($comitatiGestiti as $com) {
             if ($c instanceof Comitato && $c->locale()->nome == $com->nome) {
                 return true;
             }
             if ($c->nome == $com->nome) {
                 return true;
             }
         }
     }
     // Dipendente
     if ($this->dipendenteComitato && in_array($this->dipendenteComitato, $altroUtente->comitatiApp([APP_PRESIDENTE, APP_SOCI], false))) {
         return true;
     }
     // se non sei niente
     return false;
 }