Ejemplo n.º 1
0
 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;
         }
     }
 }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
 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;
         }
     }
 }
Ejemplo n.º 4
0
 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));
     }
 }
Ejemplo n.º 5
0
 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));
         }
     }
 }