function fetch($annee = NULL) { if (!$this->activite) { return array('activites' => $this->unite->findActivites($annee)); } else { $this->controller->assert(null, $this->activite, 'envoyer-photo', "Vous n'avez pas le droit d'envoyer de photo de " . $this->activite->getIntituleComplet() . "."); } $m = new Wtk_Form_Model('envoyer'); $i = $m->addString('titre', 'Titre'); $m->addConstraintRequired($i); $m->addFile('photo', "Photo"); $m->addString('commentaire', 'Votre commentaire'); $m->addBool('envoyer', "J'ai d'autres photos à envoyer", true); $m->addNewSubmission('envoyer', "Envoyer"); $t = new Photos(); if ($m->validate()) { $p = new Photo(); $p->titre = $m->titre; $p->slug = $t->createSlug(wtk_strtoid($m->titre)); $p->activite = $this->activite->id; $action = $m->envoyer ? 'envoyer' : 'consulter'; $c = new Commentaire(); $c->auteur = Zend_Registry::get('individu')->id; $c->message = $m->commentaire; $db = $t->getAdapter(); $db->beginTransaction(); try { $c->save(); $p->commentaires = $c->id; $p->save(); $i = $m->getInstance('photo'); if ($i->isUploaded()) { $tmp = $i->getTempFilename(); $p->storeFile($tmp); } $url = $this->controller->_helper->Url('voir', 'photos', null, array('photo' => $p->slug), true); $this->controller->logger->info("Photo envoyée", $url); foreach ($this->activite->findUnitesParticipantesExplicites() as $u) { $ident = new Identification(); $ident->photo = $p->id; $ident->unite = $u->id; $ident->save(); $this->controller->logger->info("Unité identifiée sur une photo", $url); } $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->controller->_helper->Flash->info("Photo envoyée"); $this->controller->redirectSimple($action, null, null, array('album' => $this->activite->slug)); } $photos = $this->activite->findPhotos($t->select()->order('date')); return array('unite' => $this->unite, 'annee' => $annee, 'model' => $m, 'activite' => $this->activite, 'photos' => $photos); }
function fetch($annee = NULL) { $ta = new Activites(); $as = $ta->findByAnnee($annee); $activite = null; if ($as->count() == 1) { $activite = $as->current(); $this->controller->_helper->Album->setBranche($activite); } $m = new Wtk_Form_Model('editer'); $i = $m->addString('titre', 'Titre', $this->photo->titre); $m->addConstraintRequired($i); $enum = array(); foreach ($as as $a) { if ($this->controller->assert(null, $a, 'editer-photo')) { $enum[$a->id] = $a->getIntituleComplet(); } } if ($enum) { $m->addEnum('activite', "Activité", $this->photo->activite, $enum); } $m->addFile('photo', "Photo"); $m->addBool('promouvoir', "Promouvoir en page d'accueil", $this->photo->promotion); $m->addNewSubmission('enregistrer', "Enregistrer"); if ($m->validate()) { $t = $this->photo->getTable(); $db = $t->getAdapter(); $db->beginTransaction(); try { $i = $m->getInstance('photo'); if ($i->isUploaded()) { $tmp = $i->getTempFilename(); $this->photo->storeFile($tmp); } try { $this->photo->activite = $m->activite; } catch (Exception $e) { } $this->photo->titre = $m->titre; $this->photo->slug = $t->createSlug($m->titre, $this->photo->slug); $this->photo->promotion = (int) $m->promouvoir; $this->photo->save(); $this->controller->_helper->Flash->info("Photo éditée"); $this->controller->logger->info("Photo éditée", $this->controller->_helper->Url('voir', null, null, array('photo' => $this->photo->slug))); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->controller->redirectSimple('voir', null, null, array('photo' => $this->photo->slug)); } return array('unite' => $this->unite, 'annee' => $annee, 'form_model' => $m, 'activite' => $activite, 'photo' => $this->photo); }
function envoyerAction() { if ($this->_getParam('article')) { $a = $this->_helper->Article(); $j = $a->findParentJournaux(); $c = $a->findParentCommentaires(); try { $d = $a->findDocument(); } catch (Strass_Db_Table_NotFound $e) { $this->redirectSimple('ecrire'); } $message = "Article édité"; } else { $a = null; $j = $this->_helper->Journal(); $message = "Article envoyé"; } $this->metas(array('DC.Title' => "Envoyer")); $this->branche->append(); if ($a) { $this->assert(null, $a, null, "Vous n'avez pas le droit d'éditer " . $a); } else { $this->assert(null, $j, null, "Vous n'avez pas le droit d'envoyer un PDF dans " . $j); } $this->view->unite = $u = $j->findParentUnites(); $publier = $this->assert(null, $j, 'publier'); $this->view->model = $m = new Wtk_Form_Model('envoyer'); $me = Zend_Registry::get('individu'); if ($publier) { $i = $m->addEnum('auteur', "Auteur"); /* on inclus les membres de sous-unité : le scout peuvent écrire dans la gazette de troupe */ foreach ($u->findInscrits(null, 1) as $individu) { $i->addItem($individu->id, $individu->getFullname(false)); } if (!count($i)) { throw new Strass_Controller_Action_Exception_Notice("L'auteur de l'article doit être un membre, mais cette unité n'a aucun membre !"); } if ($a) { $i->set($a->findAuteur()->id); } else { $i->set($me->id); } } else { $i = $m->addInteger('auteur', "Auteur", $me->id, true); } $i = $m->addInstance('File', 'fichier', "Fichier"); if (!$a) { $m->addConstraintRequired($i); } $i = $m->addString('titre', "Titre", $a ? $a->titre : null); $m->addConstraintRequired($i); $m->addDate('date', 'Date', $a ? $c->date : null); if ($publier) { $m->addEnum('public', 'Publication', $a ? $a->public : null, array(0 => 'Brouillon', 1 => 'Publier')); } $m->addNewSubmission('envoyer', "Envoyer"); if ($m->validate()) { $td = new Documents(); $db = $td->getAdapter(); $db->beginTransaction(); try { $da = (bool) $a; if (!$a) { $a = new Article(); $c = new Commentaire(); $d = new Document(); } $d->slug = $td->createSlug($j->slug . '-' . $m->titre, $d->slug); $d->titre = $m->titre; $d->date = $m->date; $i = $m->getInstance('fichier'); if ($i->isUploaded()) { $d->suffixe = strtolower(end(explode('.', $m->fichier['name']))); $d->storeFile($i->getTempFilename()); } $d->save(); $c->auteur = $m->auteur; $c->date = $m->date; $c->save(); $a->slug = $a->getTable()->createSlug($m->titre, $a->slug); $a->journal = $j->id; $a->titre = $m->titre; $a->article = '!document'; try { $a->public = (int) $m->public; } catch (Exception $e) { } $a->commentaires = $c->id; $a->save(); if (!$da) { $da = new DocArticle(); $da->article = $a->id; $da->document = $d->id; $da->save(); } $this->logger->info($message, $this->_helper->url('consulter', 'journaux', null, array('article' => $a->slug), true)); if (!$this->assert(null, $j, 'publier')) { $mail = new Strass_Mail_Article($a); $mail->send(); } $this->_helper->Flash->info($message); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('consulter', 'journaux', null, array('article' => $a->slug), true); } }
function editerAction() { $this->view->activite = $a = $this->_helper->Activite(); $this->assert(null, $a, 'editer', "Vous n'avez pas le droit d'éditer cettes activités"); $this->metas(array('DC.Title' => 'Éditer ' . $a->getIntitule())); $this->view->model = $m = new Wtk_Form_Model('activite'); $t = new Unites(); $explicites = $a->findUnitesParticipantesExplicites(); $enum = array(); foreach ($t->fetchAll() as $unite) { if ($this->assert(null, $unite, 'prevoir')) { $enum[$unite->id] = $unite->getFullname(); } } $values = array(); foreach ($explicites as $unite) { $values[] = $unite->id; } $i = $m->addEnum('unites', 'Unités participantes', $values, $enum, true); // multiple $m->addConstraintRequired($i); $m->addString('intitule', 'Intitulé explicite', $a->intitule); $m->addString('lieu', 'Lieu', $a->lieu); $m->addDate('debut', 'Début', $a->debut, '%Y-%m-%d %H:%M'); $m->addDate('fin', 'Fin', $a->fin, '%Y-%m-%d %H:%M'); $m->addString('description', 'Description', $a->description); $enum = array(null => 'Nouveau document'); foreach ($explicites->rewind()->current()->findDocuments() as $doc) { $enum[$doc->id] = $doc->titre; } $t = $m->addTable('documents', "Pièces-jointes", array('document' => array('Enum', "Document", $enum), 'fichier' => array('File', "Fichier"), 'titre' => array('String', "Titre"), 'origin' => array('Integer')), false); foreach ($a->findPiecesJointes() as $pj) { $doc = $pj->findParentDocuments(); $titre = $doc->countLiaisons() > 1 ? null : $doc->titre; $t->addRow($pj->document, null, $titre, $pj->id); } $t->addRow(); $m->addNewSubmission('enregistrer', 'Enregistrer'); if ($m->validate()) { $t = new Activites(); $tu = new Unites(); $tpj = new PiecesJointes(); $td = new Documents(); $unites = call_user_func_array(array($tu, 'find'), (array) $m->unites); $db = $a->getTable()->getAdapter(); $db->beginTransaction(); try { $champs = array('debut', 'fin', 'lieu', 'description'); foreach ($champs as $champ) { $a->{$champ} = $m->{$champ}; } $a->updateUnites($unites); $a->intitule = $m->intitule; $a->slug = $t->createSlug($a->getIntituleComplet(), $a->slug); $a->save(); $old = $a->findPiecesJointes(); $new = array(); /* création et mise à jour de pièce jointe */ foreach ($m->getInstance('documents') as $row) { $d = null; if ($row->document) { $d = $td->findOne($row->document); } if ($row->origin) { $pj = $tpj->findOne($row->origin); if (!$d) { $d = $pj->findParentDocuments(); } } else { $pj = new PieceJointe(); $pj->activite = $a->id; if (!$d) { $d = new Document(); } } /* On ne met à jour que les pièces jointes exclusives */ if (!$row->document) { /* requérir un titre pour les documents exclusifs */ $if = $row->getChild('fichier'); if (!$row->titre && ($if->isUploaded() || $row->origin)) { throw new Wtk_Form_Model_Exception("Titre obligatoire", $row->getChild('titre')); } $d->slug = $d->getTable()->createSlug($row->titre); $d->titre = $row->titre; if ($if->isUploaded()) { $d->suffixe = end(explode('.', $row->fichier['name'])); $d->storeFile($if->getTempFilename()); } elseif (!$row->origin) { continue; } /* ligne vide */ $d->save(); } $pj->document = $d->id; $pj->save(); $new[] = $pj->id; } // Nettoyage des documents supprimés foreach ($old as $opj) { if (in_array($opj->id, $new)) { continue; } $opj->delete(); } $this->logger->info("Activité mise-à-jour", $this->_helper->Url('consulter', null, null, array('activite' => $a->slug))); $db->commit(); $this->redirectSimple('consulter', null, null, array('activite' => $a->slug)); } catch (Wtk_Form_Model_Exception $e) { $db->rollBack(); $m->errors[] = $e; } catch (Exception $e) { $db->rollBack(); throw $e; } } }
function parametresAction() { $moi = Zend_Registry::get('user'); $this->view->user = $user = $this->_helper->Membre($moi); $this->view->individu = $individu = $user->findParentIndividus(); $this->assert($moi, $user, 'parametres', "Vous n'avez pas le droit de modifier les paramètres de cet utilisateur."); $this->metas(array('DC.Title' => "Éditer l'utilisateur " . $user->username)); $autoedit = $moi->id == $user->id; $db = Zend_Registry::get('db'); /* Migration de l'identifiant */ if ($autoedit && $user->username != $individu->adelec) { $this->view->migrate = $m = new Wtk_Form_Model('migrate'); $m->addConstraintRequired($m->addString('motdepasse', 'Mot de passe')); $m->addNewSubmission('migrer', 'Migrer'); if ($m->validate()) { $db->beginTransaction(); try { if (!$user->testPassword($m->get('motdepasse'))) { throw new Wtk_Form_Model_Exception('Mot de passe erroné', $m->getInstance('motdepasse')); } $user->username = $individu->adelec; $user->setPassword($m->get('motdepasse')); $user->save(); $this->logger->info("Migration du compte", $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug))); $db->commit(); $auth = Zend_Auth::getInstance(); $id = $auth->getIdentity(); $id['username'] = $user->username; $auth->getStorage()->write($id); } catch (Wtk_Form_Model_Exception $e) { $db->rollBack(); $m->errors[] = $e; } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug), true); } } /* Changement d'adélec */ if ($autoedit) { $this->view->adelec = $m = new Wtk_Form_Model('adelec'); $i = $m->addString('adelec', 'Adelec', $individu->adelec); $m->addConstraintRequired($i); $m->addConstraintEMail($i); $m->addConstraintRequired($m->addString('motdepasse', 'Mot de passe')); $m->addNewSubmission('enregistrer', 'Enregistrer'); if ($m->validate()) { $db->beginTransaction(); try { if (!$user->testPassword($m->get('motdepasse'))) { throw new Wtk_Form_Model_Exception('Mot de passe erroné', $m->getInstance('motdepasse')); } if ($user->username == $individu->adelec) { $user->username = $m->get('adelec'); $user->setPassword($m->get('motdepasse')); $user->save(); $auth = Zend_Auth::getInstance(); $id = $auth->getIdentity(); $id['username'] = $user->username; $auth->getStorage()->write($id); } $individu->adelec = $m->get('adelec'); $individu->save(); $this->logger->info("Changement d'adélec", $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug))); $db->commit(); } catch (Wtk_Form_Model_Exception $e) { $db->rollBack(); $m->errors[] = $e; } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug), true); } } /* Changement de mot de passe */ $this->view->change = $m = new Wtk_Form_Model('chpass'); $g = $m->addGroup('mdp', "Change le mot de passe"); if (!$this->assert(null) || $autoedit) { $m->addConstraintRequired($g->addString('ancien', 'Ancien')); } $m->addConstraintRequired($g->addString('nouveau', 'Nouveau')); $m->addConstraintRequired($g->addString('confirmation', "Confirmation")); $m->addNewSubmission('valider', 'Valider'); if ($m->validate()) { $db->beginTransaction(); try { $mdp = $m->get('mdp'); if (array_key_exists('ancien', $mdp)) { if (!$user->testPassword($mdp['ancien'])) { throw new Wtk_Form_Model_Exception("Ancien mot de passe erroné.", $m->getInstance('mdp/ancien')); } } if ($mdp['nouveau'] != $mdp['confirmation']) { throw new Wtk_Form_Model_Exception("Le mot de passe de confirmation n'est pas identique " . "au nouveau."); } $user->setPassword($mdp['nouveau']); $user->save(); $this->logger->info("Mot de passe changé", $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug))); $db->commit(); } catch (Wtk_Form_Model_Exception $e) { $db->rollBack(); $m->errors[] = $e; } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug), true); } /* Notifications */ $this->view->notifications = $m = new Wtk_Form_Model('notifications'); $m->addBool('send_mail', "Recevoir des notifications par mail", $user->send_mail); $m->addNewSubmission('valider', 'Valider'); if ($m->validate()) { $db->beginTransaction(); try { $user->send_mail = (bool) $m->get('send_mail'); $user->save(); $db->commit(); if ($user->send_mail) { $msg = "Notifications activées"; } else { $msg = "Notifications désactivées"; } $this->logger->info($msg, $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug))); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug), true); } /* Promotion à l'administration */ if ($this->assert($moi, $user, 'admin') && !$autoedit) { $this->view->admin = $m = new Wtk_Form_Model('admin'); $m->addBool('admin', "Accorder tous les privilèges sur le site à " . $user->findParentIndividus()->getFullName(), $user->admin); $m->addNewSubmission('valider', 'Valider'); if ($m->validate()) { $db->beginTransaction(); try { $user->admin = $m->get('admin'); $user->save(); $db->commit(); $msg = $user->admin ? "Privilèges accordés" : "Privilèges refusés"; $this->logger->warn($msg, $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug))); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug), true); } } }
function editerAction() { $this->view->unite = $u = $this->_helper->Unite(); $this->assert(null, $u, null, "Vous n'avez pas le droit de modifier cette unité"); $this->metas(array('DC.Title' => 'Éditer ' . $u->getFullname())); $this->view->model = $m = new Wtk_Form_Model('editer'); $enum = array(null => 'Orpheline'); foreach ($u->findParenteCandidates() as $c) { $enum[$c->id] = $c->getFullname(); } $m->addEnum('parente', "Unité parente", $u->parent, $enum); $m->addString('nom', "Nom", $u->nom); $m->addString('extra', $u->findParentTypesUnite()->extra, $u->extra); $m->addFile('image', "Nouvelle"); $m->addBool('supprimer_image', "Supprimer l'image"); $m->addNewSubmission('enregistrer', "Enregistrer"); if ($m->validate()) { $t = $u->getTable(); $db = $t->getAdapter(); $db->beginTransaction(); try { $u->parent = $m->parente ? $m->parente : null; $u->nom = $m->nom; $u->slug = $t->createSlug(wtk_strtoid($u->getFullname()), $u->slug); $u->extra = $m->extra; $u->save(); $i = $m->getInstance('image'); if ($i->isUploaded()) { $u->storeImage($i->getTempFilename()); } elseif ($m->supprimer_image) { $u->supprimerImage(); } $this->logger->info("Édition de " . $u->getFullname(), array('controller' => 'unites', 'action' => 'index', 'unite' => $u->slug)); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('index', 'unites', null, array('unite' => $u->slug)); } }
function inscrireAction() { $this->view->individu = $individu = $this->_helper->Individu(); $this->metas(array('DC.Title' => 'Éditer le CV')); $this->branche->append(); $this->assert(null, $individu, 'inscrire', "Vous n'avez pas le droit d'inscrire cet individu dans une unité."); $this->view->apps = $individu->findAppartenances(); /* CV scout */ $apps = $individu->findInscriptionsActives(); $unites = $individu->findUnitesCandidates(); $m = new Wtk_Form_Model('inscrire'); $g = $m->addGroup('actuel'); $g->addDate('date', "Date d'inscription"); $gg = $g->addGroup('apps'); $default_next = null; if ($apps->count()) { $default_next = $apps->rewind()->current()->unite; foreach ($apps as $app) { $gg->addBool($app->id, "N'est plus " . $app->getShortDescription(), true); } } if ($unites->count()) { $i0 = $g->addBool('inscrire', "Inscrire dans une autre unité ou promouvoir", true)->setReadonly((bool) $apps->count() == 0); $i1 = $g->addEnum('unite', "Unité", $default_next); foreach ($unites as $u) { $i1->addItem($u->id, $u->getFullname()); } if ($apps->count()) { $m->addConstraintDepends($i1, $i0); } } else { $message = "Aucune unité pour " . $individu->getFullname() . " !"; $aide = "Les contraintes d'âge et de sexe ne permettent pas " . "d'inscrire {$individu->getFullname()} dans une unité."; throw new Strass_Controller_Action_Exception_Notice($message, 500, $aide); } $g = $m->addGroup('role'); $g->addEnum('role', 'Rôle'); $i0 = $g->addBool('clore', "Ne l'est plus depuis", $apps->count() > 0); $i1 = $g->addDate('fin', "Date de fin", $m->get('actuel/date')); $m->addConstraintDepends($i1, $i0); $this->view->model = $pm = new Wtk_Pages_Model_Form($m); $tu = new Unites(); $tr = new Roles(); $page = $pm->partialValidate(); if ($pm->pageCmp($page, 'role') == 0 && !$m->get('actuel/inscrire')) { $page = $pm->gotoEnd(); } /* si on veut inscrire, et qu'on connait l'unité */ if ($pm->pageCmp($page, 'role') >= 0 && $m->get('actuel/inscrire')) { $g = $m->getInstance('role'); /* Sélections des rôles ou on peut l'inscrire */ $unite = $tu->findOne($m->get('actuel/unite')); $roles = $unite->findParentTypesUnite()->findRoles(); $i = $g->getChild('role'); foreach ($roles as $role) { $i->addItem($role->id . '__', $role->titre); foreach ($role->findTitres() as $titre) { $i->addItem($role->id . '__' . $titre->nom, $titre->nom); } } } /* Ne préremplir le role que si la page role va etre affichée */ if ($pm->pageCmp($page, 'role') == 0) { $g = $m->getInstance('role'); $i = $g->getChild('role'); /* Préselection du role */ $candidats = $individu->findRolesCandidats($unite); if ($candidats->count()) { $i->set($candidats->current()->id); } /* Présélection de la date */ $annee = intval(strtok($m->get('actuel/date'), '/')); if ($app = $individu->findInscriptionSuivante($annee)) { /* on a trouvé un successeur, donc potentiellement on clot */ $m->getInstance('role/clore')->set(TRUE); $m->getInstance('role/fin')->set($app->debut); } else { $i = $m->getInstance('actuel/date'); $fin = $i->getDateArray(); $fin['year'] += 1; $future = $fin['year'] > date('%Y'); $m->getInstance('role/clore')->set(!$future); $m->getInstance('role/fin')->set($fin); } } if ($pm->validate()) { $t = new Appartenances(); $db = $t->getAdapter(); $db->beginTransaction(); try { foreach ($m->get('actuel/apps') as $k => $clore) { if (!$clore) { continue; } $app = $t->findOne($k); $app->fin = $m->get('actuel/date'); $app->save(); } if ($m->get('actuel/inscrire')) { $app = new Appartient(); $app->individu = $individu->id; $app->unite = $m->get('actuel/unite'); list($role, $titre) = explode('__', $m->get('role/role')); $app->role = intval($role); $app->titre = $titre; $app->debut = $m->get('actuel/date'); if ($m->get('role/clore')) { $app->fin = $m->get('role/fin'); } $app->save(); } $this->logger->info("Inscription éditée", $this->_helper->Url('fiche')); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche'); } }
function fetch($annee = NULL) { $u = $this->unite; $a = $annee; $m = new Wtk_Form_Model('prevoir'); $t = new Unites(); $enum = array(); foreach ($t->fetchAll() as $unite) { if ($this->controller->assert(null, $unite, 'prevoir')) { $enum[$unite->id] = $unite->getFullname(); } } if (!$enum) { throw new Strass_Controller_Action_Exception_Notice("Vous ne pouvez pas enregistrer une activité"); } $i = $m->addEnum('unites', 'Unités participantes', $u->id, $enum, true); // multiple $m->addConstraintRequired($i); $annee = $this->controller->_helper->Annee(false); /* On cherche la date probable de l'activité qu'on veut prévoir. Soit * aucune activité n'est prévue cette année, alors on propose une date * près de la rentrée. Soit le calendrier est déjà remplis, alors on * propose comme date 4 semaines après la dernière activité * prévue. Comme ça on enchaîne l'enregistrement des activités. */ $repere = $u->findLastDate($annee); if (!$repere) { $repere = Strass_Controller_Action_Helper_Annee::dateDebut($annee); } else { $debut = strftime('%Y-%m-%d', strtotime($repere . ' next saturday +4 weeks')); $fin = strftime('%Y-%m-%d', strtotime($repere . ' next sunday +4 weeks')); } $m->addDate('debut', 'Début', $debut . ' 14:30', '%Y-%m-%d %H:%M'); $m->addDate('fin', 'Fin', $fin . '17:00', '%Y-%m-%d %H:%M'); $m->addString('intitule', 'Intitulé explicite', ""); $m->addBool('prevoir', "J'ai d'autres activités à prévoir", true); $m->addNewSubmission('ajouter', 'Ajouter'); $m->addConstraintRequired($m->getInstance('unites')); if ($m->validate()) { $t = new Activites(); $tu = new Unites(); $td = new Documents(); $a = new Activite(); $a->debut = $m->debut; $a->fin = $m->fin; $unites = call_user_func(array($tu, 'find'), (array) $m->unites); // génération de l'intitulé $type = $unites->current()->findParentTypesUnite(); $a->intitule = $m->intitule; $intitule = $type->getIntituleCompletActivite($a); $a->slug = $slug = $t->createSlug($intitule); $db = $t->getAdapter(); $db->beginTransaction(); try { $a->save(); $a->updateUnites($unites); $this->controller->_helper->Flash->info("Activité enregistrée"); $this->controller->logger->info("Nouvelle activite", $this->controller->_helper->Url('consulter', null, null, array('activite' => $a->slug))); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } if ($m->get('prevoir')) { $this->controller->redirectSimple('prevoir'); } else { $this->controller->redirectSimple('consulter', null, null, array('activite' => $slug)); } } return array('model' => $m, 'calendrier' => $u->findActivites($this->current)); }