示例#1
0
 function findTypeUnite()
 {
     $t = new TypesUnite();
     $s = $t->select()->setIntegrityCheck(false)->distinct()->from('unite_type')->join('unite', 'unite.type = unite_type.id', array())->join('participation', 'participation.unite = unite.id', array())->where('participation.activite = ?', $this->id)->order('unite_type.ordre')->limit(1);
     return $t->fetchAll($s)->current();
 }
示例#2
0
 function fonderAction()
 {
     $this->view->parente = $unite = $this->_helper->Unite(false);
     $this->assert(null, $unite, 'fonder', "Pas le droit de fonder une sous-unité !");
     /* on crée une sous unité si le parent est explicitement désignée */
     $this->view->sousunite = $sousunite = $this->_getParam('unite');
     $ttu = new TypesUnite();
     // sous types possibles
     if ($this->view->sousunite) {
         $soustypes = $unite->getSousTypes();
     } else {
         $soustypes = $ttu->fetchAll($ttu->select()->where('virtuelle = 0'));
     }
     $st = $soustypes->count() > 1 ? 'sous-unité' : $soustypes->rewind()->current();
     if ($sousunite) {
         $this->metas(array('DC.Title' => 'Fonder une ' . $st . ' de ' . $unite->getFullname()));
     } else {
         $this->metas(array('DC.Title' => 'Fonder une unité'));
     }
     $m = new Wtk_Form_Model('fonder');
     /* Parente */
     $i = $m->addEnum('parente', 'Unité parente');
     if ($sousunite) {
         $i->set($unite->id);
     } else {
         $t = new Unites();
         $i->addItem(null, 'Orpheline');
         foreach ($t->findSuperUnites() as $u) {
             $i->addItem($u->id, $u->getFullname());
         }
     }
     /* Types */
     $ens = array();
     $enum = array();
     foreach ($soustypes as $type) {
         $en = $type->extra;
         if ($en) {
             array_push($ens, $en);
         }
         $label = $type->nom;
         /* en cas de nom doublon (ex: équipe, sizaine), inclure le nom du type parent */
         $homonymes = $ttu->countRows($ttu->select()->where('nom = ?', $type->nom)) > 1;
         if (!$unite && $homonymes) {
             $label .= ' (' . $type->findParentTypesUnite()->nom . ')';
         }
         $enum[$type->id] = $label;
     }
     $ens = array_unique($ens);
     $types = $enum;
     $m->addEnum('type', 'Type', key($enum), $enum);
     if (key($enum) == 'sizloup') {
         // préselectionner les couleurs des loups.
         $couleurs = array('Noir', 'Gris', 'Brun', 'Blanc', 'Fauve', 'Tacheté');
         $enum = array();
         foreach ($couleurs as $couleur) {
             // ne pas permettre de recréer une sizaine.
             $ex = $unite->findUnites("unites.nom = '" . $couleur . "'")->current();
             if (!$ex) {
                 $enum[wtk_strtoid($couleur)] = $couleur;
             }
         }
         $m->addEnum('nom', 'Nom', null, $enum);
     } else {
         $m->addString('nom', "Nom");
     }
     $m->addString('extra', current($ens));
     $m->addNewSubmission('fonder', 'Fonder');
     if ($m->validate()) {
         $t = new Unites();
         $db = $t->getAdapter();
         $db->beginTransaction();
         try {
             $u = new Unite();
             $u->slug = $t->createSlug(wtk_strtoid($types[$m->type] . '-' . $m->nom));
             $u->nom = $m->nom;
             $u->type = $m->type;
             $u->extra = $m->extra;
             $u->parent = $m->parente ? $m->parente : null;
             $u->save();
             $this->logger->info("Fondation de " . $u->getFullname(), $this->_helper->Url('index', 'unites', null, array('unite' => $u->slug), true));
             $db->commit();
         } catch (Exception $e) {
             $db->rollBack();
             throw $e;
         }
         $this->redirectSimple('index', 'unites', null, array('unite' => $u->slug), true);
     }
     $this->view->model = $m;
 }