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(); }
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; }