Overview

Namespaces

  • Mapbender
    • Component
      • HTTP
    • CoreBundle
      • Command
      • Component
        • Exception
      • Controller
      • DataFixtures
        • ORM
      • DependencyInjection
      • Element
        • Type
      • Entity
      • EventListener
      • Extension
      • Form
        • DataTransformer
        • EventListener
        • Type
      • Security
      • Template
    • KmlBundle
      • Element
    • ManagerBundle
      • Controller
      • Form
        • DataTransformer
        • Type
    • MonitoringBundle
      • Command
      • Component
      • Controller
      • DependencyInjection
      • Entity
      • EventListener
      • Form
    • PrintBundle
      • Component
      • Controller
    • WmcBundle
      • Component
        • Exception
      • Element
        • Type
      • Entity
      • Form
        • Type
    • WmsBundle
      • Component
        • Exception
      • Controller
      • DependencyInjection
      • Element
        • Type
      • Entity
      • Event
      • Form
        • EventListener
        • Type
    • WmtsBundle
      • Component
        • Exception
      • Controller
      • Entity
      • Form
        • Type
  • None
  • PHP

Classes

  • RepositoryController
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  1: <?php
  2: 
  3: /**
  4:  * @author Christian Wygoda
  5:  */
  6: 
  7: namespace Mapbender\WmtsBundle\Controller;
  8: 
  9: use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 10: use FOM\ManagerBundle\Configuration\Route as ManagerRoute;
 11: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
 12: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 13: use Symfony\Component\HttpFoundation\Response;
 14: use Mapbender\WmsBundle\Entity\WmsLayerSource;
 15: use Mapbender\WmsBundle\Entity\WmsSource;
 16: use Mapbender\WmsBundle\Component\WmsCapabilitiesParser;
 17: use Mapbender\WmsBundle\Form\Type\WmsSourceSimpleType;
 18: use Mapbender\WmsBundle\Form\Type\WmsSourceType;
 19: 
 20: use Mapbender\WmtsBundle\Entity\WmtsSource;
 21: use Mapbender\WmtsBundle\Form\Type\WmtsSourceSimpleType;
 22: use Mapbender\Component\HTTP\HTTPClient;
 23: 
 24: /**
 25:  * @ManagerRoute("/repository/wmts")
 26:  */
 27: class RepositoryController extends Controller {
 28:     /*
 29:      * Make sure the url is correct,. add missing parameters and filter sessionids
 30:      */
 31: 
 32:     protected function capabilitiesURLFixup($url, $user = null, $password = null) {
 33:         $sessionids = array(
 34:             "PHPSESSID",
 35:             "jsessionid"
 36:         );
 37:         $parsedUrl = HTTPClient::parseUrl($url);
 38:         if($user !== null && $user != ""){
 39:             $parsedUrl["user"] = $user;
 40:             if($password !== null && $password != ""){
 41:                 $parsedUrl["pass"] = $password;
 42:             }
 43:         }
 44:         $parsedQuery = HTTPClient::parseQueryString($parsedUrl['query']);
 45: 
 46:         $resultQuery    = array();
 47:         $found_version  = false;
 48:         $found_request  = false;
 49:         $found_service  = false;
 50:         
 51:         $default_version = "1.3.0";
 52:         foreach ($parsedQuery as $key => $value) {
 53:             if (!in_array($key, $sessionids)) {
 54:                 $resultQuery[$key] = $value;
 55:             }
 56:             if(strtolower($key)  == "version"){ $found_version = true; }
 57:             if(strtolower($key)  == "request"){ $found_request = true; }
 58:             if(strtolower($key)  == "service"){ $found_service = true; }
 59:         }
 60:         if(!$found_version) { $resultQuery["VERSION"] = $default_version; } 
 61:         if(!$found_request) { $resultQuery["REQUEST"] = "GetCapabilities"; } 
 62:         if(!$found_service) { $resultQuery["service"] = "WMS"; } 
 63:         
 64: 
 65:         $parsedUrl['query'] = HTTPClient::buildQueryString($resultQuery);
 66:         return HTTPClient::buildUrl($parsedUrl);
 67:     }
 68: 
 69:     /**
 70:      * @ManagerRoute("/new")
 71:      * @Method({ "GET" })
 72:      * @Template
 73:      */
 74:     public function newAction() {
 75:         $form = $this->get("form.factory")->create(new WmtsSourceSimpleType(), new WmtsSource());
 76:         return array(
 77:             "form" => $form->createView()
 78:         );
 79:     }
 80: 
 81:     /**
 82:      * @ManagerRoute("/start")
 83:      * @Method({ "GET" })
 84:      * @Template
 85:      */
 86:     public function startAction() {
 87:         $form = $this->get("form.factory")->create(new WmtsSourceSimpleType(), new WmtsSource());
 88:         return array(
 89:             "form" => $form->createView()
 90:         );
 91:     }
 92: 
 93:     /**
 94:     * @ManagerRoute("{wmts}")
 95:     * @Method({ "GET"})
 96:     * @Template
 97:     */
 98:     public function viewAction(WmtsSource $wmts){
 99:         return array("wmts" => $wmts);
100:     
101: /*
102:         return $this
103:             ->get("templating")
104:             ->render("MapbenderWmsBundle:Repository:view.html.twig",array("wms" => $wms));
105: */
106:     }
107: 
108:     /**
109:      * @ManagerRoute("/new")
110:      * @Method({ "POST" })
111:      * @Template("MapbenderWmsBundle:Repository:new.html.twig")
112:      */
113:     public function createAction() {
114:         $wmssource_req = new WmsSource();
115:         $form = $this->get("form.factory")->create(new WmsSourceSimpleType(), $wmssource_req);
116:         $form->bindRequest($this->get('request'));
117:         $getcapa_url = trim($this->capabilitiesURLFixup($wmssource_req->getOriginUrl()));
118:         if ($form->isValid() && $getcapa_url) {
119:             $wmssource_req->setOriginUrl($getcapa_url);
120:             $client = new HTTPClient($this->container);
121:             if ($wmssource_req->getUsername()) {
122:                 $client->setUsername($wmssource_req->getUsername());
123:                 $client->setPassword($wmssource_req->getPassword());
124:             }
125:             $getcapa_url_usrPwd = $this->capabilitiesURLFixup(
126:                     $wmssource_req->getOriginUrl(),
127:                     $wmssource_req->getUsername(),
128:                     $wmssource_req->getPassword());
129:             $result = $client->open($getcapa_url_usrPwd);
130:             if($result->getStatusCode() == 200){
131:                 if(!$result->getData()){
132:                     $this->get("logger")->debug("$getcapa_url_usrPwd returned no data");
133:                     throw new \Exception("Preview: Service '$getcapa_url_usrPwd' returned no Data");
134:                 }
135:                 $wmsParser = WmsCapabilitiesParser::create($result->getData());
136:                 $wmssource = $wmsParser->parse();
137:                 if(!$wmssource){
138:                     $this->get("logger")->debug("Could not parse data for url '$getcapa_url_usrPwd'");
139:                     throw new \Exception("Preview: Could not parse data for url '$getcapa_url_usrPwd'");
140:                 }
141:                 $this->getDoctrine()->getEntityManager()->persist($wmssource);
142:                 $this->getDoctrine()->getEntityManager()->flush();
143: //                $this->removeRecursive($wmssource->getRootlayer(), $this->getDoctrine()->getEntityManager());
144: //                $this->getDoctrine()->getEntityManager()->remove($wmssource);
145: //                $this->getDoctrine()->getEntityManager()->flush();
146:             }else{
147:                 throw new \Exception("Preview: Server said '".$result->getStatusCode() . " ". $result->getStatusMessage(). "'");
148:             }
149:         }
150:         if (!$getcapa_url) {
151:             $this->get('session')->setFlash('error', "url not set");
152:         }
153:         return $this->redirect($this->generateUrl("mapbender_manager_repository_view",array("sourceId"=>$wmssource->getId()), true));
154:     }
155: 
156:     /**
157:      * Recursively remove a nested Layerstructure
158:      * @param GroupLayer
159:      * @param EntityManager
160:     */
161:     public function removeRecursive(WmsLayerSource $wmslayer, $em){
162: //        $this->removeRecursive($wmssource->getRootlayer(),
163: //                        $this->getDoctrine()->getEntityManager());
164:         foreach($wmslayer->getSublayer() as $sublayer){
165:             $this->removeRecursive($sublayer, $em);
166:         }
167:         $em->remove($wmslayer);
168:         $em->flush();
169:     }
170: }
171: 
Mapbender3 API documenation API documentation generated by ApiGen 2.8.0