function editerAction() { $t = new Liens(); $this->assert(null, $t, 'editer', "Vous n'avez pas le droit d'éditer de liens"); $this->metas(array('DC.Title' => 'Éditer les liens')); $this->view->model = $m = new Wtk_Form_Model('liens'); $i = $m->addTable('liens', "Liens", array('url' => array('String', "URL"), 'nom' => array('String', 'Nom'), 'description' => array('String', 'Description'))); $lns = $t->fetchAll(); foreach ($lns as $lien) { $i->addRow($lien->toArray()); } $i->addRow(); $m->addNewSubmission('enregistrer', "Enregistrer"); if ($m->validate()) { $db = $t->getAdapter(); $db->beginTransaction(); try { $listes = $m->get('liens'); $db->query('DELETE FROM `lien`;'); foreach ($listes as $data) { if ($data['url']) { $t->insert($data); } } $this->logger->info("Liens édités"); $db->commit(); $this->redirectSimple('index', 'liens'); } catch (Exception $e) { $db->rollBack(); throw $e; } } }
function ecrireAction() { if ($this->_getParam('article')) { $a = $this->_helper->Article(); $j = $a->findParentJournaux(); try { $a->findDocument(); $this->redirectSimple('envoyer'); } catch (Strass_Db_Table_NotFound $e) { } } else { $a = null; $j = $this->_helper->Journal(); } $this->view->unite = $u = $j->findParentUnites(); $this->metas(array('DC.Title' => "Écrire un article")); $this->assert(null, $j, 'ecrire', "Vous n'avez pas le droit d'écrire un nouvel article dans ce journal"); $publier = $this->assert(null, $j, 'publier'); $this->view->model = $m = new Wtk_Form_Model('ecrire'); $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->addString('titre', "Titre", $a ? $a->titre : null); $m->addConstraintRequired($i); if ($publier) { $m->addEnum('public', 'Publication', $a ? $a->public : null, array(0 => 'Brouillon', 1 => 'Publier')); } $m->addString('boulet', "Boulet", $a ? $a->boulet : null); $i = $m->addString('article', "Article", $a ? $a->article : null); $m->addConstraintRequired($i); $t = $m->addTable('images', "Images", array('image' => array('File', "Image"), 'nom' => array('String', "Renommer en"), 'origin' => array('String')), false); if ($a) { foreach ($a->getImages() as $image) { $t->addRow(null, $image, $image); } } $t->addRow(); $m->addNewSubmission('poster', "Poster"); if ($m->validate()) { $t = new Articles(); $db = $t->getAdapter(); $db->beginTransaction(); try { if ($a) { $a->slug = $t->createSlug(wtk_strtoid($m->titre), $a->slug); $c = $a->findParentCommentaires(); $message = "Article édité"; } else { $c = new Commentaire(); $a = new Article(); $a->slug = $t->createSlug(wtk_strtoid($m->titre)); $message = "Nouvel article"; } $c->auteur = $m->auteur; $c->save(); $a->journal = $j->id; $a->titre = $m->titre; $a->boulet = $m->boulet; $a->article = $m->article; try { $a->public = (int) $m->public; } catch (Exception $e) { } $a->commentaires = $c->id; $a->save(); $oldImages = $a->getImages(); $newImages = array(); $table = $m->getInstance('images'); foreach ($table as $row) { if ($row->origin && $row->origin != $row->nom) { $a->renameImage($row->origin, $row->nom); array_push($newImages, $row->nom); } else { $if = $row->getChild('image'); if ($if->isUploaded()) { $nom = $row->nom ? $row->nom : $if->getBasename(); $a->storeImage($if->getTempFilename(), $nom); array_push($newImages, $nom); } else { array_push($newImages, $row->nom); } } } $oldImages = array_unique($oldImages); $newImages = array_filter($newImages); /* Nettoyage des images */ foreach ($oldImages as $image) { if (!in_array($image, $newImages)) { $a->deleteImage($image); } } $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(); } $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() { static $blocs = array('branches' => 'Les branches', 'unites' => 'Les unités', 'photos' => 'Photos aléatoires', 'activites' => 'Activités marquantes', 'documents' => 'Documents'); $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' => 'Paramètres ' . $u->getFullname())); $this->view->model = $m = new Wtk_Form_Model('parametres'); $w = $u->getWiki(null, false); $m->addString('presentation', "Message d'accueil", is_readable($w) ? file_get_contents($w) : ''); $config = new Strass_Config_Php($u->slug); $t = $m->addTable('blocs', "Blocs de la page d'accueil", array('id' => array('String'), 'nom' => array('String', 'Bloc', true), 'enable' => array('Bool', 'Actif')), true, false); $enabled = $config->blocs; if ($enabled) { $enabled = $enabled->toArray(); } else { $enabled = array(); } foreach ($enabled as $k) { $r = $t->addRow($k, $blocs[$k], true); } /* nouveau blocs */ foreach ($blocs as $k => $v) { if (!in_array($k, $enabled)) { $r = $t->addRow($k, $v, false); } } $m->addNewSubmission('enregistrer', "Enregistrer"); if ($m->validate()) { $u->storePresentation($m->presentation); $blocs = array(); foreach ($m->blocs as $row) { if ($row['enable']) { array_push($blocs, $row['id']); } } $config->blocs = $blocs; $config->write(); $this->logger->info("Configuration de page d'accueil"); $this->redirectSimple('index', 'unites', null, array('unite' => $u->slug)); } }
function adminAction() { $this->view->individu = $individu = $this->_helper->Individu(); $this->assert(null, $individu, 'admin', "Vous n'avez pas le droit d'administrer " . "l'inscription de cet individu."); $this->metas(array('DC.Title' => 'Administrer ' . $individu->getFullname())); $this->actions->append("Éditer la fiche", array('controller' => 'individus', 'action' => 'editer'), array(null, $individu)); $as = $individu->findAppartenances(null, 'debut DESC'); if (!$as->count()) { $this->view->apps = null; } else { $this->view->apps = $m = new Wtk_Form_Model('apps'); $tu = new Unites(); $us = $tu->fetchAll(null); $eu = array(); foreach ($us as $u) { $eu[$u->id] = mb_substr($u->getFullName(), 0, 32); } $tr = new Roles(); $rs = $tr->fetchAll(null, 'ordre'); $er = array(); foreach ($rs as $r) { $er[$r->id] = substr($r->slug, 0, 7); } $i = $m->addTable('appartenances', "Appartenances", array('unite' => array('Enum', 'Unité', $eu), 'role' => array('Enum', 'Role', $er), 'titre' => array('String', 'Titre'), 'debut' => array('Date', 'Début'), 'clore' => array('Bool', 'Clore', false), 'fin' => array('Date', 'Fin'))); foreach ($as as $a) { $i->addRow($a->unite, $a->role, $a->titre, $a->debut, (bool) $a->fin, $a->fin); } $m->addNewSubmission('enregistrer', 'Enregistrer'); if ($m->validate()) { $t = new Appartenances(); $db = $t->getAdapter(); $db->beginTransaction(); try { foreach ($as as $a) { $a->delete(); } foreach ($i as $row) { $data = array('individu' => $individu->id, 'unite' => $row->unite, 'role' => $row->role, 'titre' => $row->titre, 'debut' => $row->debut); if ($row->clore) { $data['fin'] = $row->fin; } else { $data['fin'] = null; } $t->insert($data); } $this->logger->info("Inscription éditée", $this->_helper->Url('fiche', 'individus', null, array('individu' => $individu->slug), true)); $db->commit(); } catch (Exception $e) { $db->rollBack(); throw $e; } $this->redirectSimple('fiche', 'individus', null, array('individu' => $individu->slug)); } } }