1: <?php
2:
3: namespace Mapbender\WmcBundle\Element;
4:
5: use Mapbender\CoreBundle\Component\Element;
6: use Mapbender\CoreBundle\Entity\State;
7: use Mapbender\WmsBundle\Component\LegendUrl;
8: use Mapbender\WmsBundle\Component\OnlineResource;
9: use Mapbender\WmcBundle\Entity\Wmc;
10: use Mapbender\WmcBundle\Form\Type\WmcType;
11:
12:
13:
14: use Symfony\Component\HttpFoundation\Response;
15:
16:
17:
18:
19:
20: class WmcEditor extends Element
21: {
22:
23:
24:
25:
26:
27:
28:
29:
30: 31: 32:
33: static public function getClassTitle()
34: {
35: return "WmcEditor";
36: }
37:
38: 39: 40:
41: static public function getClassDescription()
42: {
43: return "WMC Editor";
44: }
45:
46: 47: 48:
49: static public function getClassTags()
50: {
51: return array("wmc", "editor");
52: }
53:
54: 55: 56:
57: public static function getDefaultConfiguration()
58: {
59: return array(
60: "tooltip" => null,
61: "target" => null,
62:
63: );
64: }
65:
66: 67: 68:
69: public static function getType()
70: {
71: return 'Mapbender\WmcBundle\Element\Type\WmcEditorAdminType';
72: }
73:
74: 75: 76:
77: public function getWidgetName()
78: {
79: return 'mapbender.mbWmcEditor';
80: }
81:
82: 83: 84:
85: public function getAssets()
86: {
87: return array(
88: 'js' => array(
89: 'jquery.form.js',
90: 'mapbender.element.wmceditor.js'
91: ),
92: 'css' => array('mapbender.element.wmceditor.css')
93: );
94: }
95:
96: 97: 98:
99: public function getConfiguration()
100: {
101:
102:
103:
104:
105:
106:
107:
108: return parent::getConfiguration();
109: }
110:
111: 112: 113:
114: public function render()
115: {
116: $wmc = Wmc::create();
117: $form = $this->container->get("form.factory")->create(new WmcType(),
118: $wmc);
119: $html = $this->container->get('templating')
120: ->render('MapbenderWmcBundle:Element:wmceditor.html.twig',
121: array(
122: 'id' => $this->getId(),
123: 'configuration' => $this->getConfiguration(),
124: 'title' => $this->getTitle(),
125: 'form' => $form->createView(),
126: ));
127: return $html;
128: }
129:
130: public function httpAction($action)
131: {
132: $session = $this->container->get("session");
133:
134: if($session->get("proxyAllowed", false) !== true)
135: {
136: throw new AccessDeniedHttpException('You are not allowed to use this proxy without a session.');
137: }
138: switch($action)
139: {
140: case 'save':
141: return $this->save();
142: break;
143: case 'delete':
144: $wmcid = $this->container->get("request")->get("wmcid", null);
145: $this->container->get("request")->attributes->remove("wmcid");
146: return $this->delete($wmcid);
147: break;
148: case 'update':
149: $tkid = $this->get("request")->get("tkid", null);
150: $this->get("request")->attributes->remove("tkid");
151: return $this->save($tkid);
152: break;
153: case 'get':
154: $tkid = $this->get("request")->get("tkid", null);
155: return $this->getWmc($tkid);
156: break;
157: case 'index':
158: return $this->index();
159: break;
160: default:
161: throw new NotFoundHttpException('No such action');
162: }
163: }
164:
165: protected function getWmc($id)
166: {
167: $wmc = $this->container->get('doctrine')
168: ->getRepository('Mapbender\WmcBundle\Entity\Wmc')
169: ->find($id);
170: $form = $this->getForm($wmc);
171: $responseBody = $this->container
172: ->get('templating')
173: ->render("MapbenderWmcBundle:Wmc:edit.html.twig",
174: array(
175: "edit_form" => $form->createView(),
176: "entity" => $wmc));
177: $response = new Response();
178: $response->setContent($responseBody);
179: return $response;
180: }
181:
182: protected function index()
183: {
184: $response = new Response();
185: $entities = $this->container
186: ->get('doctrine')
187: ->getRepository('Mapbender\WmcBundle\Entity\Wmc')
188: ->findAll();
189: $responseBody = $this->container
190: ->get('templating')
191: ->render('MapbenderWmcBundle:Wmc:index.html.twig',
192: array("entities" => $entities)
193: );
194:
195: $response->setContent($responseBody);
196: return $response;
197: }
198:
199: private function save($id = null)
200: {
201: $response = new Response();
202: $request = $this->container->get('request');
203:
204: if($id)
205: {
206: $wmc = $this->container->get('doctrine')
207: ->getRepository('Mapbender\WmcBundle\Entity\Wmc')
208: ->find($id);
209: } else
210: {
211: $wmc = Wmc::create();
212: }
213: $form = $this->container->get("form.factory")->create(new WmcType(),
214: $wmc);
215: if($request->getMethod() === 'POST')
216: {
217: $form->bindRequest($request);
218: if($form->isValid())
219: {
220: $em = $this->container->get('doctrine')->getEntityManager();
221: $em->getConnection()->beginTransaction();
222: $em->persist($wmc);
223: $em->flush();
224: if($wmc->getScreenshotPath() === null)
225: {
226: if($wmc->getScreenshot() !== null)
227: {
228: $upload_directory = $this->createWmcDirs();
229: if($upload_directory !== null)
230: {
231: $dirs = $this->container->getParameter("directories");
232: $filename = sprintf('screenshot-%d.%s',
233: $wmc->getId(),
234: $wmc->getScreenshot()->guessExtension());
235: $wmc->getScreenshot()->move($upload_directory,
236: $filename);
237: $wmc->setScreenshotPath($filename);
238: $format = $wmc->getScreenshot()->getClientMimeType();
239: $url_base = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
240: $serverurl = $url_base . "/" . $dirs["wmc"];
241: $logourl = $serverurl . "/" . $this->application->getSlug() . "/" . $filename;
242: $logoUrl = LegendUrl::create(null, null,
243: OnlineResource::create($format,
244: $logourl));
245: $state = $wmc->getState();
246: $state->setServerurl($serverurl);
247: $state->setSlug($this->application->getSlug());
248: $wmc->setLogourl($logoUrl);
249: }
250: } else
251: {
252: $wmc->setScreenshotPath(null);
253: }
254: $em->persist($wmc);
255: $em->flush();
256: }
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270: $em->getConnection()->commit();
271: $response->setContent($wmc->getId());
272: } else
273: {
274: $response->setContent('error');
275: }
276: }
277: return $response;
278: }
279:
280: private function delete($id)
281: {
282: $response = new Response();
283: $wmc = $this->container->get('doctrine')
284: ->getRepository('Mapbender\WmcBundle\Entity\Wmc')
285: ->find($id);
286: if($wmc !== null)
287: {
288: $response->setContent($wmc->getId());
289: $em = $this->container->get('doctrine')->getEntityManager();
290: $em->remove($wmc);
291: $em->flush();
292: } else
293: {
294: $response->setContent('error');
295: }
296: return $response;
297: }
298:
299: public function generateMetadata($themenkarte)
300: {
301: return $this->get('templating')->render('BkgGeoportalBundle:Element:themenkarteneditor_wmcmetadata.html.twig',
302: array("themenkarte" => $themenkarte)
303: );
304: }
305:
306: protected function createWmcDirs()
307: {
308: $basedir = $this->container->get('kernel')->getRootDir() . '/../web/';
309: $dirs = $this->container->getParameter("directories");
310: $dir = $basedir . $dirs["wmc"] . "/" . $this->application->getSlug();
311: if(!is_dir($dir))
312: {
313: $a = mkdir($dir);
314: if($a)
315: {
316: return $dir;
317: } else
318: {
319: return null;
320: }
321: } else
322: {
323: return $dir;
324: }
325: }
326:
327: }
328:
329: