MCMS
[ class tree: MCMS ] [ index: MCMS ] [ all elements ]

Source for file Dispatcher.php

Documentation is available at Dispatcher.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4: */
  3. // +----------------------------------------------------------------------+
  4. // | MCMS: a PHP Content Management System for creating accessible sites. |
  5. // | Copyright (C) 2005  Silvio Moioli                                    |
  6. // |                                                                      |
  7. // | This program is free software; you can redistribute it and/or modify |
  8. // | it under the terms of the GNU General Public License as published by |
  9. // | the Free Software Foundation; either version 2 of the License, or    |
  10. // | (at your option) any later version.                                  |
  11. // |                                                                      |
  12. // | This program is distributed in the hope that it will be useful,      |
  13. // | but WITHOUT ANY WARRANTY; without even the implied warranty of       |
  14. // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        |
  15. // | GNU General Public License for more details.                         |
  16. // |                                                                      |
  17. // | You should have received a copy of the GNU General Public License    |
  18. // | along with this program; if not, write to the Free Software          |
  19. // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
  20. // +----------------------------------------------------------------------+
  21. // | Authors: Silvio Moioli <silvio at moioli dot net> www.moioli.net     |
  22. // +----------------------------------------------------------------------+
  23. //
  24. //$Id:
  25.  
  26. /** Carica la classe base di MCMS per l'interfacciamento al Database */
  27. require_once $_SERVER["DOCUMENT_ROOT"]."/admin/lib/model/Engine.php";
  28. /** Carica  il componente per l'aggiornamento di View e Model */
  29. require_once $_SERVER["DOCUMENT_ROOT"]."/admin/lib/controller/Committer.php";
  30. /** Carica le pagine della vista Admin */
  31. require_once $_SERVER["DOCUMENT_ROOT"]."/admin/lib/view/alladmin.inc";
  32.  
  33. /**
  34.  * Gestisce eventi scatenando le opportune azioni su View e Model.
  35.  *
  36.  * @package MCMS
  37.  * @author Silvio Moioli
  38.  * @version 2
  39.  */
  40. class Dispatcher extends PEAR
  41. {
  42.     /** @var Engine l'oggetto per la comunicazione al Database */
  43.     var $engine = null;
  44.     /** @var Compiler il compilatore di interfacce XHTML */
  45.     var $compiler = null;
  46.     /** @var Committer il componente per l'aggiornamento di View e Model */
  47.     var $committer = null;
  48.  
  49.     //Piccolo hack per evitare un click tra la creazione di un nuovo sito
  50.     //e la sua modifica
  51.         var $newSite = null;
  52.     //Piccolo hack per evitare di far rifare il login a un autore appena registato
  53.         var $newAuthor = null;
  54.     
  55.     /**
  56.      * Costruttore standard.
  57.      *
  58.      * @param Engine $this->engine l'oggetto per la comunicazione al DB in uso
  59.      */
  60.     function Dispatcher($engine$authManager)
  61.     {
  62.         $this->engine=$engine;
  63.         $this->compiler = new Compiler();
  64.         $this->committer = new Committer($engine$authManager);
  65.     }
  66.     
  67.     /**
  68.      * Gestisce un evento.
  69.      *
  70.      * @return 
  71.      */
  72.     function dispatch($event)
  73.     {
  74.         $javascript true;
  75.         if ($event->getParameter("javascript")=="off"{
  76.             $javascript false;
  77.         }
  78.         if(is_a($event,"ActionEvent")){
  79.             switch ($event->getAction()){
  80.                 case "addArticle":
  81.                     $this->committer->addArticle($event->getSite(),
  82.                         $event->getAuthor(),
  83.                         $event->getParameter("contents"),
  84.                         $event->getParameter("title"),
  85.                         $event->getParameter("keywords"),
  86.                         $event->getCategory(),
  87.                         $event->getParameter("description"),
  88.                         $event->getArticles());
  89.                     break;
  90.                 case "editArticle":
  91.                     $this->committer->editArticle($event->getSite(),
  92.                         $event->getArticle(),
  93.                         $event->getParameter("contents"),
  94.                         $event->getParameter("title"),
  95.                         $event->getParameter("keywords"),
  96.                         $event->getCategory(),
  97.                         $event->getParameter("description"),
  98.                         $event->getArticles());
  99.                     break;
  100.                 case "dropArticle":
  101.                     $this->committer->dropArticle($event->getSite(),
  102.                         $event->getArticle());
  103.                     break;
  104.                 case "addAuthor":
  105.                     $this->newAuthor = $this->committer->addAuthor($event->getParameter("name"),
  106.                         $event->getParameter("surname"),
  107.                         $event->getParameter("nick"),
  108.                         $event->getParameter("email"),
  109.                         $event->getParameter("password"));
  110.                     break;
  111.                 case "editAuthor":
  112.                     $this->committer->editAuthor($event->getAuthor(),
  113.                         $event->getParameter("name"),
  114.                         $event->getParameter("surname"),
  115.                         $event->getParameter("nick"),
  116.                         $event->getParameter("email"));
  117.                     break;
  118.                 case "dropAuthor":
  119.                     $this->committer->dropAuthor($event->getAuthor());
  120.                     break;
  121.                 case "addNews":
  122.                     $this->committer->addNews($event->getSite(),
  123.                         $event->getAuthor(),
  124.                         $event->getParameter("contents"),
  125.                         $event->getParameter("title"),
  126.                         $event->getParameter("keywords"),
  127.                         $event->getParameter("source"),
  128.                         $event->getArticles());
  129.                     break;
  130.                 case "editNews":
  131.                     $this->committer->editNews($event->getSite(),
  132.                         $event->getNews(),
  133.                         $event->getParameter("contents"),
  134.                         $event->getParameter("title"),
  135.                         $event->getParameter("keywords"),
  136.                         $event->getParameter("source"),
  137.                         $event->getArticles());
  138.                     break;
  139.                 case "dropNews":
  140.                     $this->committer->dropNews($event->getSite(),
  141.                         $event->getNews());
  142.                     break;
  143.                 case "addCategory":
  144.                     $this->committer->addCategory($event->getSite(),
  145.                         $event->getParameter("name"),
  146.                         $event->getParameter("description"));
  147.                     break;
  148.                 case "editCategory":
  149.                     $this->committer->editCategory($event->getSite(),
  150.                         $event->getCategory(),
  151.                         $event->getParameter("name"),
  152.                         $event->getParameter("description"));
  153.                     break;
  154.                 case "dropCategory":
  155.                     $this->committer->dropCategory($event->getSite(),
  156.                         $event->getCategory());
  157.                     break;
  158.                 case "addSite":
  159.                     $this->newSite = $this->committer->addSite($event->getAuthor(),
  160.                         $event->getParameter("name"),
  161.                         $event->getParameter("slogan"),
  162.                         $event->getParameter("keywords"));
  163.                     break;
  164.                 case "dropSite":
  165.                     $this->committer->dropSite($event->getSite());
  166.                     break;
  167.                 case "editComponents":
  168.                     $this->committer->editComponents($event->getSite(),
  169.                         $event->getComponents());
  170.                     break;
  171.                 case "editHomepage":
  172.                     $this->committer->editHomepage($event->getSite(),
  173.                         $event->getParameter("contents"),
  174.                         $event->getParameter("slogan"),
  175.                         $event->getParameter("keywords"));
  176.                     break;
  177.                 case null:
  178.                     break;
  179.                 default:
  180.                     print "do.php: unrecognized action ".$event->getParameter("action")." <br />";
  181.                     break;
  182.             }
  183.         }
  184.         elseif(is_a($event,"GoToEvent")){
  185.             switch ($event->getPage()) {
  186.                 case "AdminIndex":
  187.                     $this->compiler->display(new AdminIndex($this->engine));
  188.                     break;
  189.                 case "AdminAddAuthor":
  190.                     $page new AdminAddAuthor();
  191.                     if ($event->getParameter("defaults"== "true"{
  192.                         $page->setDefaultName($event->getParameter("name"));
  193.                         $page->setDefaultSurname($event->getParameter("surname"));
  194.                         $page->setDefaultNick($event->getParameter("nick"));
  195.                         $page->setDefaultEmail($event->getParameter("email"));
  196.                     }
  197.                     $this->compiler->display($page);
  198.                     break;
  199.                 case "AdminMain":
  200.                     $page null;
  201.                     //Se sono al primo login dopo la registrazione...
  202.                     if ($this->newAuthor != null{
  203.                         $page new AdminMain($this->newAuthor);
  204.                     }
  205.                     else {
  206.                         //Se ĆØ un login ordinario
  207.                         $page new AdminMain($event->getAuthor());
  208.                     }
  209.                     $this->compiler->display($page);
  210.                     break;
  211.                 case "AdminManageSite":
  212.                     $page null;
  213.                     //sito appena creato
  214.                     if ($this->newSite != null{
  215.                         $page new AdminManageSite($event->getAuthor()$this->newSite);
  216.                     }
  217.                     else {
  218.                         //sito giĆ  creato
  219.                         $page new AdminManageSite($event->getAuthor()$event->getSite());
  220.                     }
  221.                     $this->compiler->display($page);
  222.                     break;        
  223.                     
  224.                 case "AdminAddSite":
  225.                     $this->compiler->display(new AdminAddSite($event->getAuthor()));
  226.                     break;
  227.                 case "AdminEditAuthor":
  228.                     $author $event->getAuthor();
  229.                     $page new AdminEditAuthor($author);
  230.                     if ($event->getParameter("defaults"== "true"{
  231.                         $page->setDefaultName($event->getParameter("name"));
  232.                         $page->setDefaultSurname($event->getParameter("surname"));
  233.                         $page->setDefaultNickname($event->getParameter("nick"));
  234.                         $page->setDefaultEmail($event->getParameter("email"));
  235.                     }
  236.                     $this->compiler->display($page);
  237.                     break;
  238.                 case "AdminDropAuthor":
  239.                     $this->compiler->display(new AdminDropAuthor($event->getAuthor()));
  240.                     break;
  241.                     
  242.                 case "AdminDropSite":
  243.                     $this->compiler->display(new AdminDropSite($event->getAuthor(),
  244.                         $event->getSite()));
  245.                     break;
  246.                 case "AdminEditNews":
  247.                     $page null;
  248.                     $news null;
  249.                     if ($event->getParameter("mode"== "new"{
  250.                         //Nuova notizia
  251.                         $page new AdminEditNews($event->getAuthor()$event->getSite(),
  252.                                 null"new"$javascript);
  253.                     }
  254.                     elseif ($event->getParameter("mode"== "edit"{
  255.                         //Modifica notizia
  256.                         $news $event->getNews();
  257.                         $page new AdminEditNews($event->getAuthor()$event->getSite(),
  258.                                 $news"edit"$javascript);
  259.                     }
  260.                     //Se sono specificati valori di default per la pagina, settali
  261.                     if ($event->getParameter("defaults"== "true"{
  262.                         $page->setDefaultTitle($event->getParameter("title"));
  263.                         $page->setDefaultKeywords($event->getParameter("keywords"));
  264.                         $page->setDefaultSource($event->getParameter("source"));
  265.                         $page->setDefaultContents($event->getParameter("contents"));
  266.                         $page->setDefaultCorrelatedArticles($event->getArticles());
  267.                     }
  268.                     $this->compiler->display($page);
  269.                     break;
  270.                 case "AdminListNews":
  271.                     $page new AdminListNews($event->getAuthor()$event->getSite());
  272.                     $this->compiler->display($page);
  273.                     break;
  274.                 case "AdminEditArticle":
  275.                     //Controlla i permessi e inizializza la pagina
  276.                     $page null;
  277.                     $article null;
  278.                     if ($event->getParameter("mode"== "new"{
  279.                         $page new AdminEditArticle($event->getAuthor(),$event->getSite(),
  280.                             $article,"new",$javascript);
  281.                     }
  282.                     elseif ($event->getParameter("mode"== "edit"{
  283.                         $article $event->getArticle();
  284.                         $page new AdminEditArticle($event->getAuthor(),$event->getSite(),
  285.                             $article,"edit",$javascript);
  286.                     }
  287.                     //Se sono specificati valori di default per la pagina, settali
  288.                     if ($event->getParameter("defaults"== "true"{
  289.                         $page->setDefaultTitle($event->getParameter("title"));
  290.                         $page->setDefaultKeywords($event->getParameter("keywords"));
  291.                         $page->setDefaultDescription($event->getParameter("description"));
  292.                         $page->setDefaultContents($event->getParameter("contents"));
  293.                         $page->setDefaultCorrelatedArticles($event->getArticles());
  294.                         $page->setDefaultCategory($event->getCategory());
  295.                     }
  296.                     //Visualizza la pagina
  297.                     $this->compiler->display($page);
  298.                     break;
  299.                 case "AdminListArticles":
  300.                     $page new AdminListArticles($event->getAuthor()$event->getSite());
  301.                     $this->compiler->display($page);
  302.                     break;
  303.                 case "AdminListCategories":
  304.                     $this->compiler->display(new AdminListCategories($event->getAuthor(),
  305.                         $event->getSite()));
  306.                     break;
  307.                 case "AdminEditCategory":
  308.                     //Modifica sezione
  309.                     $page null;
  310.                     $category null;
  311.                     if ($event->getParameter("mode"== "new"{
  312.                         $page new AdminEditCategory($event->getAuthor()$event->getSite(),
  313.                             null,"new");
  314.                     }
  315.                     elseif ($event->getParameter("mode"== "edit"{
  316.                         $category $event->getCategory();
  317.                         $page new AdminEditCategory($event->getAuthor()$event->getSite(),
  318.                             $category,"edit");
  319.                     }
  320.                     //Se sono specificati valori di default per la pagina, settali
  321.                     if ($event->getParameter("defaults"== "true"{
  322.                         $page->setDefaultName($event->getParameter("name"));
  323.                         $page->setDefaultDescription($event->getParameter("description"));
  324.                     }
  325.                     //Visualizza la pagina
  326.                     $this->compiler->display($page);
  327.                     break;
  328.                 case "AdminEditHomepage":
  329.                     $site $event->getSite();
  330.                     $dataDispatcheromepage $site->getHomepage();
  331.                     $page new AdminEditHomepage($event->getAuthor(),
  332.                         $site,
  333.                         $javascript,
  334.                         $event->getParameter("slogan"),
  335.                         $event->getParameter("keywords"),
  336.                         $event->getParameter("contents"));
  337.                     if ($event->getParameter("defaults"== "true"{
  338.                         $page->setDefaultSlogan($event->getParameter("slogan"));
  339.                         $page->setDefaultKeywords($event->getParameter("keywords"));
  340.                         $page->setDefaultContents($event->getParameter("contents"));
  341.                     }
  342.                     $this->compiler->display($page);
  343.                     break;
  344.                 case "AdminDropNews":
  345.                     $this->compiler->display(new AdminDropNews($event->getAuthor()$event->getSite(),
  346.                         $event->getNews()));
  347.                     break;
  348.                 case "AdminDropArticle":
  349.                     $page new AdminDropArticle($event->getSite()$event->getArticle(),
  350.                         $event->getAuthor());
  351.                     $this->compiler->display($page);
  352.                     break;
  353.                 case "AdminDropCategory":
  354.                     $this->compiler->display(new AdminDropCategory($event->getAuthor(),
  355.                         $event->getSite()$event->getCategory()));
  356.                     break;
  357.                 default:
  358.                     print "NO GOTO page specified! ";
  359.                     break;
  360.                 }
  361.         }
  362.     }
  363. }
  364. ?>

Documentation generated on Wed, 26 Jul 2006 21:44:53 +0200 by phpDocumentor 1.3.0RC6