Source for file Config.php

Documentation is available at Config.php

  1. <?php
  2. /**
  3. * Interface pour les config, récupération de la config
  4. *
  5. * PHP versions 5
  6. @category  PHP
  7. @package   GeoPrisma
  8. @author    Pascal Martin
  9. @copyright 2009, Boreal - Information Strategies
  10. @license   http://www.geoprisma.org/license BSD License
  11. @link      http://www.geoprisma.org
  12. */
  13.  
  14. /**
  15. * Interface pour les config, récupération de la config
  16. @category   PHP
  17. @package    GeoPrisma
  18. @subpackage Config
  19. @author     Pascal Martin
  20. */ 
  21. abstract class org_geoprisma_config_Config implements com_borealis_foundation_util_Singleton
  22. {
  23.     protected $m_objArrayExclusiveUnboundWidgetName = null;
  24.     protected $m_objArrayProcessList = array("getProcessList");
  25.  
  26.     /**
  27.     * Return DOMDocument with the config inside ready to passe to xsltprocessor
  28.     * 
  29.     * @return DOMDocument 
  30.     */
  31.     public function getDomDocument()
  32.     {    
  33.         $objDomDocument new DOMDocument();
  34.  
  35.         $objDomElementRoot $objDomDocument->createElement('geoprisma');
  36.         $objDomDocument->appendChild($objDomElementRoot);       
  37.         
  38.         // ------------------------------------
  39.         // Ajout des services 
  40.         // ------------------------------------
  41.         $objDomElementServices $objDomDocument->createElement('services');
  42.         $objDomElementRoot->appendChild($objDomElementServices);   
  43.         foreach ($this->getServices(as $objService)
  44.         {
  45.             $objService->insertIntoXML($objDomElementServices$objDomDocument);   
  46.         }   
  47.         
  48.         // ------------------------------------
  49.         // Ajout des datastores  
  50.         // ------------------------------------
  51.         $objDomElementDatastores $objDomDocument->createElement('datastores');
  52.         $objDomElementRoot->appendChild($objDomElementDatastores);   
  53.         foreach ($this->getDatastores(as $objDatastore)
  54.         {
  55.             $objDatastore->insertIntoXML($objDomElementDatastores$objDomDocument);   
  56.         }
  57.  
  58.         // ------------------------------------
  59.         // Ajout des widgets
  60.         // ------------------------------------
  61.         $objArrayWidgetTypeUsed array();
  62.         $objArrayWidget $this->getAuthorizedWidget();
  63.  
  64.         $objDomElementWidgets $objDomDocument->createElement('widgets');
  65.         $objDomElementRoot->appendChild($objDomElementWidgets);   
  66.         foreach ($objArrayWidget as $objArrayWigetInfo)
  67.         {   
  68.             $objDomElementWidget $objArrayWigetInfo['widget']->insertIntoXML($objDomElementWidgets$objDomDocument)
  69.             if ($objDomElementWidget !== null
  70.             
  71.                 if (!in_array($objArrayWigetInfo['widget']->getType()$objArrayWidgetTypeUsed)) 
  72.                 {
  73.                     $objArrayWidgetTypeUsed[$objArrayWigetInfo['widget']->getType();     
  74.                 }
  75.                 
  76.                 $objDomElementDatastores $objDomDocument->createElement('datastores');
  77.                 $objDomElementWidget->appendChild($objDomElementDatastores);
  78.                 foreach ($objArrayWigetInfo['datastores'as $objArrayDatastoreInfo)
  79.                 {    
  80.                     $objDomElementDatastore $objDomDocument->createElement('datastore');
  81.                     $objDomElementDatastores->appendChild($objDomElementDatastore);
  82.                     $objDomElementResourceName $objDomDocument->createElement('resourcename'$objArrayDatastoreInfo['resourcename']);
  83.                     $objDomElementDatastoreName $objDomDocument->createElement('datastorename'$objArrayDatastoreInfo['datastorename']);
  84.                     $objDomElementServiceName $objDomDocument->createElement('servicename'$objArrayDatastoreInfo['servicename']);
  85.                     $objDomElementDatastore->appendChild($objDomElementResourceName);                
  86.                     $objDomElementDatastore->appendChild($objDomElementDatastoreName);
  87.                     $objDomElementDatastore->appendChild($objDomElementServiceName);
  88.                 }
  89.                 
  90.                 $objDomElementResources $objDomDocument->createElement('resources');
  91.                 $objDomElementWidget->appendChild($objDomElementResources);
  92.                 foreach ($objArrayWigetInfo['resources'as $strRessource)
  93.                 {    
  94.                     $objDomElementResource $objDomDocument->createElement('resource'$strRessource)
  95.                     $objDomElementResources->appendChild($objDomElementResource);
  96.                 }
  97.             }
  98.         }
  99.         
  100.         // ------------------------------------
  101.         // Ajout des widgets type
  102.         // ------------------------------------
  103.         $objDomElementWidgetTypeUsed $objDomDocument->createElement('widgettypesused');
  104.         $objDomElementRoot->appendChild($objDomElementWidgetTypeUsed);   
  105.         foreach ($objArrayWidgetTypeUsed as $strWidgetType)
  106.         {
  107.             $objDomElementWidget $objDomDocument->createElement('widget'$strWidgetType);
  108.             $objDomElementWidgetTypeUsed->appendChild($objDomElementWidget);   
  109.         }
  110.        
  111.         // ------------------------------------
  112.         // Ajout des resources
  113.         // ------------------------------------ 
  114.         $objDomElementResources $objDomDocument->createElement('resources');
  115.         $objDomElementRoot->appendChild($objDomElementResources);   
  116.         foreach ($this->getResources(as $objResource)
  117.         {
  118.             $objResource->insertIntoXML($objDomElementResources$objDomDocument);   
  119.         }
  120.         
  121.         
  122.         return $objDomDocument;
  123.     }
  124.     
  125.     /**
  126.     * Retourne la liste des widget et des datastore acessible
  127.     * 
  128.     * @return array 
  129.     */
  130.     private function getAuthorizedWidget()
  131.     {
  132.         $objArrayWidget array();
  133.         $objArrayMapWidget array();
  134.         $objArrayMapFishLayerTreeWidget array();
  135.         $objArrayOtherWidget array();
  136.  
  137.         // -----------------------------------------------------
  138.         // Widgets that don't need to be linked to resources 
  139.         // are automatically added.
  140.         // ----------------------------------------------------- 
  141.         foreach ($this->getWidgets(as $objWidget)
  142.         {
  143.             if ($objWidget instanceof org_geoprisma_widget_MapWidget
  144.             {
  145.                 $objAuthorizedWidget array(
  146.                     'widget' => $objWidget,
  147.                     'datastores' => (array)$objWidget->getDatastores(),
  148.                     'resources' => (array)$objWidget->getResources()
  149.                 );
  150.  
  151.                 $objArrayMapWidget[$objWidget->getName()]
  152.                     = $objAuthorizedWidget;
  153.             }
  154.             else if ($objWidget instanceof org_geoprisma_widget_MapFishLayerTreeWidget
  155.             {
  156.                 $objAuthorizedWidget array(
  157.                     'widget' => $objWidget,
  158.                     'datastores' => (array)$objWidget->getDatastores(),
  159.                     'resources' => (array)$objWidget->getResources()
  160.                 );
  161.  
  162.                 $objArrayMapFishLayerTreeWidget[$objWidget->getName()]
  163.                     = $objAuthorizedWidget;
  164.             }
  165.             else
  166.             {
  167.                 $objArrayResourceOptions 
  168.                     = $objWidget->getMandatoryResourceOptionList();
  169.  
  170.                 if ($objArrayResourceOptions === null
  171.                     && $this->isExclusiveUnboundWidget($objWidget)
  172.                 
  173.                 {
  174.                     $objAuthorizedWidget array(
  175.                         'widget' => $objWidget,
  176.                         'datastores' => (array)$objWidget->getDatastores(),
  177.                         'resources' => (array)$objWidget->getResources()
  178.                     );
  179.  
  180.                     $objArrayOtherWidget[$objWidget->getName()$objAuthorizedWidget;
  181.                 }
  182.             }
  183.         }
  184.  
  185.         foreach ($objArrayMapWidget as $objMapWidget
  186.         {
  187.             $objArrayWidget[$objMapWidget['widget']->getName()$objMapWidget;
  188.         }
  189.         foreach ($objArrayMapFishLayerTreeWidget as $objMapFishLayerTreeWidget)
  190.         {
  191.             $objArrayWidget[$objMapFishLayerTreeWidget['widget']->getName()$objMapFishLayerTreeWidget;
  192.         }
  193.         foreach ($objArrayOtherWidget as $objOtherWidget
  194.         {
  195.             $objArrayWidget[$objOtherWidget['widget']->getName()$objOtherWidget;
  196.         }
  197.  
  198.         // -----------------------------------------------------
  199.         // Adding widget going throught resources
  200.         // ----------------------------------------------------- 
  201.         $objArrayLayerWidget array();
  202.         $objArrayOtherWidget array();
  203.  
  204.         foreach ($this->getResources(as $objResource)
  205.         {
  206.             foreach ($objResource->getWidgets(as $objWidget)
  207.             {
  208.                 // map and mapfishlayertree widgets have already been processed
  209.                 // earlier (see above), so in case they have been linked to
  210.                 // resources, simply skip them.
  211.                 if ($objWidget instanceof org_geoprisma_widget_MapWidget
  212.                     || $objWidget instanceof org_geoprisma_widget_MapFishLayerTreeWidget 
  213.                 
  214.                 {
  215.                     continue;
  216.                 }
  217.  
  218.                 $strRessource $objResource->getName();
  219.                 $strAction $objWidget->getAction();
  220.  
  221.                 if (org_geoprisma_acl_ACLFactory::getACL()->isAuthorized($objResource$strAction)) 
  222.                 {
  223.                     if ($objWidget->getType(== "layer"
  224.                     {
  225.                         if (!array_key_exists($objWidget->getName()$objArrayLayerWidget)) 
  226.                         {
  227.                             $objArrayLayerWidget[$objWidget->getName()array(
  228.                                 'widget' => $objWidget,
  229.                                 'datastores' => array(),
  230.                                 'resources' => array()
  231.                             );
  232.                         }
  233.                         // Add widget ressource
  234.                         if (!in_array($objResource->getName()$objArrayLayerWidget[$objWidget->getName()]['resources'])) 
  235.                         {
  236.                             $objArrayLayerWidget[$objWidget->getName()]['resources'][$objResource->getName();   
  237.                         
  238.                         // Add widget datastore
  239.                         foreach ($objResource->getDatastores(as $objDatastore
  240.                         {
  241.                             $objArrayLayerWidget[$objWidget->getName()]['datastores'][array(
  242.                                 'resourcename' => $objResource->getName()
  243.                                 'datastorename' => $objDatastore->getName(),
  244.                                 'servicename' => $objDatastore->getService()->getName()
  245.                             );
  246.                         }
  247.                     // end if layer widget
  248.                     else
  249.                     {
  250.                         if (!array_key_exists($objWidget->getName()$objArrayOtherWidget)) 
  251.                         {
  252.                             $objArrayOtherWidget[$objWidget->getName()array(
  253.                                 'widget' => $objWidget,
  254.                                 'datastores' => array(),
  255.                                 'resources' => array()
  256.                             );
  257.                         }
  258.                         // Add widget ressource
  259.                         if (!in_array($objResource->getName()$objArrayOtherWidget[$objWidget->getName()]['resources'])) 
  260.                         {
  261.                             $objArrayOtherWidget[$objWidget->getName()]['resources'][$objResource->getName();   
  262.                         
  263.                         // Add widget datastore
  264.                         foreach ($objResource->getDatastores(as $objDatastore
  265.                         {
  266.                             $objArrayOtherWidget[$objWidget->getName()]['datastores'][array(
  267.                                 'resourcename' => $objResource->getName()
  268.                                 'datastorename' => $objDatastore->getName(),
  269.                                 'servicename' => $objDatastore->getService()->getName()
  270.                             );
  271.                         }
  272.                     // end if not layer widget
  273.                 }
  274.             }
  275.         }
  276.  
  277.         // add layer widgets, then the others
  278.         foreach ($objArrayLayerWidget as $objLayerWidget)
  279.         {
  280.             $objArrayWidget[$objLayerWidget['widget']->getName()$objLayerWidget;
  281.         }
  282.         foreach ($objArrayOtherWidget as $objOtherWidget
  283.         {
  284.             $objArrayWidget[$objOtherWidget['widget']->getName()$objOtherWidget;
  285.         }
  286.  
  287.         return $objArrayWidget
  288.     }
  289.     
  290.     /**
  291.     * Retourne un object service
  292.     * 
  293.     * @param string $pstrServiceName Service Name
  294.     * 
  295.     * @return org_geoprisma_service_Service 
  296.     */
  297.     abstract public function getService($pstrServiceName);
  298.     
  299.     /**
  300.     * Retourne la liste de service disponible service
  301.     * 
  302.     * @return ArrayObject of org_geoprisma_service_Service
  303.     */
  304.     abstract public function getServices()
  305.     
  306.     /**
  307.     * Retorrne un object layout
  308.     * 
  309.     * @param string $pstrLayoutName Layout name
  310.     * 
  311.     * @return org_geoprisma_layout_Layout 
  312.     */
  313.     abstract public function getLayout($pstrLayoutName);
  314.     
  315.     /**
  316.     * Retorrne la liste des layouts disponible
  317.     * 
  318.     * @return ArrayObject of org_geoprisma_layout_Layout
  319.     */
  320.     abstract public function getLayouts();
  321.     
  322.     /**
  323.     * Retorrne un object datastore
  324.     * 
  325.     * @param string $pstrDatastoreName Datastore name
  326.     * 
  327.     * @return org_geoprisma_datastore_Datastore 
  328.     */
  329.     abstract public function getDatastore($pstrDatastoreName);
  330.     
  331.     /**
  332.     * Retorrne la liste des datastores disponible
  333.     * 
  334.     * @return ArrayObject of org_geoprisma_datastore_Datastore
  335.     */
  336.     abstract public function getDatastores();
  337.     
  338.     /**
  339.     * Retorrne un object widget
  340.     * 
  341.     * @param string $pstrWidgetName Widget name
  342.     * 
  343.     * @return org_geoprisma_widget_Widget 
  344.     */
  345.     abstract public function getWidget($pstrWidgetName);
  346.     
  347.     /**
  348.     * Retorrne la liste des widget disponible
  349.     * 
  350.     * @return ArrayObject of org_geoprisma_widget_Widget
  351.     */
  352.     abstract public function getWidgets();
  353.     
  354.     /**
  355.     * Retorrne un object accessfilter
  356.     * 
  357.     * @param string $pstrAccessFilterName AccessFilter name
  358.     * 
  359.     * @return org_geoprisma_accessfilter_AccessFilter 
  360.     */
  361.     abstract public function getAccessFilter($pstrAccessFilterName);
  362.     
  363.     /**
  364.     * Retorrne la liste des accessfilter disponible
  365.     * 
  366.     * @return ArrayObject of org_geoprisma_accessfilter_AccessFilter
  367.     */
  368.     abstract public function getAccessFilters();
  369.     
  370.     /**
  371.     * Retorrne un object resource
  372.     * 
  373.     * @param string $pstrResourceName Resource name
  374.     * 
  375.     * @return org_geoprisma_resource_Resource 
  376.     */
  377.     abstract public function getResource($pstrResourceName);
  378.     
  379.     /**
  380.     * Retorrne la liste des resources disponible
  381.     * 
  382.     * @return ArrayObject of org_geoprisma_resource_Resource
  383.     */
  384.     abstract public function getResources();
  385.  
  386.     /**
  387.     * Get the process names the config supports.
  388.     * 
  389.     * @return array 
  390.     */
  391.     public function getProcessList()
  392.     {
  393.         return $this->m_objArrayProcessList;
  394.     }
  395.  
  396.     /**
  397.     * Checks if whether the given url is a access controled service or not.
  398.     * 
  399.     * @param string $pstrURL url to check
  400.     *
  401.     * @return boolean 
  402.     */
  403.     public function isServiceHost($pstrURL)
  404.     {
  405.         //TODO
  406.  
  407.         return false;
  408.     }
  409.  
  410.     /**
  411.     * Checks if whether the given url is a proxy url or not.
  412.     * 
  413.     * @param string $pstrURL url to check
  414.     *
  415.     * @return boolean 
  416.     */
  417.     public function isProxyURL($pstrURL)
  418.     {
  419.         $bIsProxyURL false;
  420.         $objProxyURL null;
  421.  
  422.         $objURL parse_url($pstrURL);
  423.         $objURL['path'self::canonicalize($objURL['path']);
  424.  
  425.         $objArrayProxyURLs $this->getCanonicalizeProxyURLs();
  426.  
  427.         // first, check the host
  428.         for ($iIter=0$iLen=count($objArrayProxyURLs)$iIter<$iLen$iIter++
  429.         {
  430.             if (!isset($objArrayProxyURLs[$iIter]['host'])) 
  431.             {
  432.                 if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) 
  433.                 {
  434.                     $objArrayForwarded explode(
  435.                         ',',
  436.                         $_SERVER['HTTP_X_FORWARDED_HOST']
  437.                     );
  438.                     $objArrayProxyURLs[$iIter]['host'$objArrayForwarded[0];
  439.                 }
  440.                 else
  441.                 {
  442.                     $objArrayProxyURLs[$iIter]['host'$_SERVER['HTTP_HOST'];
  443.                 }
  444.             }
  445.             if ($objArrayProxyURLs[$iIter]['host'=== $objURL['host']
  446.             {
  447.                 $objProxyURL $objArrayProxyURLs[$iIter];
  448.                 break;
  449.             }
  450.         }
  451.  
  452.         // then, check the path
  453.         if ($objProxyURL && $objArrayProxyURLs[$iIter]['path'=== $objURL['path']
  454.         {
  455.             $bIsProxyURL true;
  456.         }
  457.  
  458.         return $bIsProxyURL;
  459.     }
  460.  
  461.     /**
  462.     * Returns an array of parsed proxy urls.  Throws an error if no proxy would
  463.     * be returned.
  464.     *
  465.     * @return array 
  466.     */
  467.     public function getProxyURLs(
  468.     {
  469.         $objArrayProxyURLs
  470.             = org_geoprisma_SettingImpl::getProxyURLAliasesArray();
  471.         array_push(
  472.             $objArrayProxyURLs,
  473.             org_geoprisma_SettingImpl::getProxyURL()
  474.         );
  475.  
  476.         for ($iIter=count($objArrayProxyURLs)-1$iIter>=0$iIter--
  477.         {
  478.             if (!$objArrayProxyURLs[$iIter]
  479.             {
  480.                 array_splice($objArrayProxyURLs$iIter1);
  481.             }
  482.             else
  483.             {
  484.                 $objArrayProxyURLs[$iIter]
  485.                     = parse_url($objArrayProxyURLs[$iIter]);
  486.             }
  487.         }
  488.  
  489.         if (count($objArrayProxyURLs== 0
  490.         {
  491.             throw new Exception("No proxy URL is set in config.");
  492.         }
  493.  
  494.         return $objArrayProxyURLs;
  495.     }
  496.  
  497.     /**
  498.     * Returns an array of canonicalized proxy urls.
  499.     *
  500.     * @return array 
  501.     */
  502.     public function getCanonicalizeProxyURLs()
  503.     {
  504.         $objArrayProxyURLs $this->getProxyURLs();
  505.  
  506.         for ($iIter=0$iLen=count($objArrayProxyURLs)$iIter<$iLen$iIter++
  507.         {
  508.             if (strpos($objArrayProxyURLs[$iIter]['path']"/"!== 0
  509.             {
  510.                 $objArrayProxyURLs[$iIter]['path'
  511.                     = dirname($_SERVER['SCRIPT_NAME'])."/".
  512.                     $objArrayProxyURLs[$iIter]['path'];
  513.             }
  514.             $objArrayProxyURLs[$iIter]['path'self::canonicalize(
  515.                 $objArrayProxyURLs[$iIter]['path']
  516.             );
  517.         }
  518.  
  519.         return $objArrayProxyURLs;
  520.     }
  521.  
  522.     /**
  523.     * Returns a canonicalized version of a path string.
  524.     *
  525.     * @param string $pstrPath path string to canonicalize.
  526.     *
  527.     * @return string 
  528.     */
  529.     static public function canonicalize($pstrPath)
  530.     {
  531.         $objArrayPaths explode('/'$pstrPath);
  532.         $objArrayKeys array_keys($objArrayPaths'..');
  533.  
  534.         foreach ($objArrayKeys AS $iKeyPos => $strKeyElement
  535.         {
  536.             array_splice(
  537.                 $objArrayPaths,
  538.                 $strKeyElement ($iKeyPos 1)2
  539.             );
  540.         }
  541.  
  542.         $strPath implode('/'$objArrayPaths);
  543.         $strPath str_replace('./'''$strPath);
  544.  
  545.         return $strPath;
  546.     }
  547.  
  548.     /**
  549.     * Return whether the unbound widget (not linked to a resource) is exclusive
  550.     * or not, i.e. its name is inside the exclusive list (if set) and is not
  551.     * a MapPanel widget.
  552.     *
  553.     * @param org_geoprisma_widget_Widget $pobjWidget Widget
  554.     * 
  555.     * @return Boolean 
  556.     */
  557.     public function isExclusiveUnboundWidget($pobjWidget)
  558.     {
  559.         $bIsExclusive false;
  560.         $objArrayNames $this->m_objArrayExclusiveUnboundWidgetName;
  561.         if (!isset($objArrayNames|| !is_array($objArrayNames|| count($objArrayNames=== 
  562.         {
  563.             $bIsExclusive true;
  564.         }
  565.         else if ($pobjWidget->getType(== "mappanel" 
  566.         {
  567.             $bIsExclusive true;
  568.         }
  569.         else if (array_search($pobjWidget->getName()$objArrayNames!== false
  570.         {
  571.             $bIsExclusive true;
  572.         }
  573.  
  574.         return $bIsExclusive;
  575.     }
  576. }
  577.   
  578. ?>

Documentation generated on Thu, 19 Jan 2012 00:08:25 +0400 by phpDocumentor 1.4.1