1: <?php
2:
3: 4: 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: 26:
27: class RepositoryController extends Controller {
28: 29: 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: 71: 72: 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: 83: 84: 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: 95: 96: 97:
98: public function viewAction(WmtsSource $wmts){
99: return array("wmts" => $wmts);
100:
101: 102: 103: 104: 105:
106: }
107:
108: 109: 110: 111: 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:
144:
145:
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: 158: 159: 160:
161: public function removeRecursive(WmsLayerSource $wmslayer, $em){
162:
163:
164: foreach($wmslayer->getSublayer() as $sublayer){
165: $this->removeRecursive($sublayer, $em);
166: }
167: $em->remove($wmslayer);
168: $em->flush();
169: }
170: }
171: