diff --git a/src/ClassCodeBundle/Controller/StructureController.php b/src/ClassCodeBundle/Controller/StructureController.php index 192a0fb37373e6f55733fd061b3fe045f2cae28f..db6b7662e256387e814025285d2350ac0abe7c7f 100644 --- a/src/ClassCodeBundle/Controller/StructureController.php +++ b/src/ClassCodeBundle/Controller/StructureController.php @@ -17,7 +17,11 @@ class StructureController extends Controller public function indexAction(Request $request) { $em = $this->getDoctrine()->getManager(); - $structures = $em->getRepository('ClassCodeBundle:Structure')->findAll(); + //$structures = $em->getRepository('ClassCodeBundle:Structure')->findAll(); + $structures = $em->getRepository('ClassCodeBundle:Structure')->findby( + array('mainType' => 'Partenaire ClassCode') + ); + $format = $request->getRequestFormat(); return $this->render('@ClassCode/Structure/list.'.$format.'.twig', array( @@ -25,6 +29,22 @@ class StructureController extends Controller )); } + /** + * @Route("/structuresmap.{_format}", name="structuresmappage",defaults={"_format"="html"},requirements={"_format"="html|json"})) + */ + public function structureMapAction(Request $request) + { + $em = $this->getDoctrine()->getManager(); + $structures = $em->getRepository('ClassCodeBundle:Structure')->findAll(); + + + $format = $request->getRequestFormat(); + + return $this->render('@ClassCode/Structure/listAll.'.$format.'.twig', array( + 'structures' => $structures, + )); + } + /** * @Route("/createstructure", name="structure_create") */ diff --git a/src/ClassCodeBundle/Entity/Structure.php b/src/ClassCodeBundle/Entity/Structure.php index fea1cbb8d96c8f7eaadb84904f92924d225b6244..64cedaecc0548ba668a1858cdf1d3413c7a06d27 100644 --- a/src/ClassCodeBundle/Entity/Structure.php +++ b/src/ClassCodeBundle/Entity/Structure.php @@ -97,6 +97,20 @@ class Structure */ private $longitude; + /** + * @var string $mainType + * + * @ORM\Column(name="mainType", type="string", length=255) + */ + private $mainType = 'Partenaire ClassCode'; + + /** + * @var string $dataSource + * + * @ORM\Column(name="dataSource", type="string", length=255) + */ + private $dataSource = "web"; + /** * @var \DateTime $updated_at * @@ -107,7 +121,7 @@ class Structure /** * @var string $updated_by * - * @ORM\Column(name="updated_by", type="text", type="string", length=255, nullable=true) + * @ORM\Column(name="updated_by", type="string", length=255, nullable=true) */ private $updated_by; @@ -303,6 +317,51 @@ class Structure return $this->longitude; } + /** + * Set mainType + * + * @param string $mainType + * @return Structure + */ + public function setMainType($mainType) + { + $this->mainType = $mainType; + + return $this; + } + + /** + * Get mainType + * + * @return string + */ + public function getMainType() + { + return $this->mainType; + } + + /** + * Set dataSource + * + * @param string $dataSource + * @return Structure + */ + public function setDataSource($dataSource) + { + $this->dataSource = $dataSource; + + return $this; + } + + /** + * Get dataSource + * + * @return string + */ + public function getDataSource() + { + return $this->dataSource; + } /** * Set updated_at diff --git a/src/ClassCodeBundle/Resources/translations/messages.fr.yml b/src/ClassCodeBundle/Resources/translations/messages.fr.yml index bec568bd162a040ae55359ba8970e9edc3485adc..d128d1bb95f8e1309cc84b62047349f692ac5485 100644 --- a/src/ClassCodeBundle/Resources/translations/messages.fr.yml +++ b/src/ClassCodeBundle/Resources/translations/messages.fr.yml @@ -120,3 +120,4 @@ 'success.peopleEdited' : "Profile edité" 'error.meetingnotfound' : "La rencontre n'a pas été trouvée" 'error.missingparameter' : "Un paramètre obligatoire est manquant" +'Map' : "Carte des structures en lien avec l'enseignement ou la médiation des sciences du numérique" diff --git a/src/ClassCodeBundle/Resources/views/Structure/listAll.html.twig b/src/ClassCodeBundle/Resources/views/Structure/listAll.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..91312e529873633283c0f1c4855038e64a45c8fd --- /dev/null +++ b/src/ClassCodeBundle/Resources/views/Structure/listAll.html.twig @@ -0,0 +1,166 @@ +<!DOCTYPE html> +<html> + +<head> + <!-- Balise pour le rendu smartphone --> + <meta name="viewport" content="width= device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>{{ 'Map' | trans }}</title> + <!-- JQuery UI CSS--> + <link href="{{ asset('js/jquery-ui/1.10.4/themes/base/jquery-ui.css') }}" rel="stylesheet" type="text/css" /> + <!-- Font Awesome --> + <link href="{{ asset('fontawesome/css/fontawesome-all.min.css') }}" rel="stylesheet" media="all" /> + <!-- Bootstrap 3.1.1 CSS --> + <link href="{{ asset('bootstrap 3.1.1/dist/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" /> + <link href="{{ asset('bootstrap 3.1.1/dist/css/bootstrap-theme.css') }}" rel="stylesheet" type="text/css" /> + <link href="{{ asset('bootstrap 3.1.1/docs/assets/css/docs.css') }}" rel="stylesheet" type="text/css" /> + <!-- main css --> + <link rel="stylesheet" href="{{ asset('css/classcodeadmin.css') }}" /> + <!-- Open Street Map css --> + <link rel="stylesheet" href="{{ asset('js/leaflet-1.3.1/leaflet.css') }}" /> + <link rel="stylesheet" href="{{ asset('js/leaflet-1.3.1/plugins/leaflet.markercluster-1.3.0/dist/MarkerCluster.Default.css') }}" /> + <link rel="shortcut icon" href="{{ asset('images/pixee-rouge-all.png') }}" /> +</head> + +<body> + <div id="classcodeadmin_content" class="col-md-12" style="display:none;"> + <div class="col-sm-12 map-wrapper"> + <div id="structuresMap" class="osMap" style="height:400px;"></div> + <div id="classCodeMapOverlay"> + <div id="classCodeMapOverlayTitle"> + <span id="classCodeMapOverlayTitleContent">Retour</span> + <a id="classCodeMapOverlayTitleLink" class="backCriteriaLink"> + <span class="returnIcon"></span> + </a> + </div> + <div id="classCodeMapOverlayContent"> + </div> + </div> + </div> + </div> + + <div id="loader"> + <img src="{{ commons_url }}/images/pictos/loading_40.gif" alt="{{ 'Loading'|trans }}" title="{{ 'Loading'|trans }}"> + </div> + + <!-- JQuery UI JS--> + <script src="{{ asset('js/jquery/1.11.0/jquery-1.11.0.js') }}" type="text/javascript"></script> + <script src="{{ asset('js/jquery/1.8.2/plugin/jquery-json/jquery.json-2.4.js') }}" type="text/javascript"></script> + <!-- JQuery UI JS--> + <script src="{{ asset('js/jquery-ui/1.10.4/ui/jquery-ui.js') }}" type="text/javascript"></script> + <!-- Bootstrap 3.1.1 JS --> + <script src="{{ asset('bootstrap 3.1.1/dist/js/bootstrap.min.js') }}" type="text/javascript"></script> + <!-- OSM JS --> + <script type="text/javascript" src="{{ asset('js/leaflet-1.3.1/leaflet.js') }}"></script> + <script type="text/javascript" src="{{ asset('js/leaflet-1.3.1/plugins/leaflet.markercluster-1.3.0/dist/leaflet.markercluster.js') }}"></script> + <script> + var overlayShown = false; + var lastSelectedMarker = false; + $(document).ready(function() { + $('#loader').hide(); + $('#classcodeadmin_content').show(); + //map + var structureMap = L.map('structuresMap',{maxZoom: 18}).setView([46.52863469527167, 2.43896484375], 5), + markers = L.markerClusterGroup({ + spiderfyOnMaxZoom: true, + showCoverageOnHover: false, + zoomToBoundsOnClick: true, + polygonOptions: { + fillColor: '#FFFFFF', + color: '#FFFFFF', + weight: 0.5, + opacity: 1, + fillOpacity: 0.5 + } + }), + lat = "", + lon = "", + LeafIcon = L.Icon.extend({ + options: { + iconSize: [38, 95], + shadowSize: [50, 64], + iconAnchor: [22, 94], + shadowAnchor: [4, 62], + popupAnchor: [-3, -76] + } + }); + + var markerDetail = ""; + var lat; + var lon; + var structureArrayMarker = []; + var structureContentString = ''; + {% for structure in structures %} + lat = "{{ structure.getLatitude }}" ; + lon = "{{ structure.getLongitude }}" ; + structureContentString= ''; + structureLogo = "{{ structure.getLogo }}"; + if(structureLogo != ""){ + structureContentString = '<div class="classCodeMapOverlayContentLogo"><img src="'+structureLogo+'"></div>'; + } + structureContentString += '<br>'; + structureWho = "{{ structure.getWho }}"; + if (structureWho != ""){ + structureContentString+= '<div class="classCodeMapOverlayContentTitle">Contact</div><div class="classCodeMapOverlayEmphasis"><b>'+structureWho+'</b></div>'; + } + structureAddress = "{{ structure.getAddress }}"; + if (structureAddress != ""){ + structureContentString+= '<div>'+structureAddress+'</div>'; + } + structureEmail = "{{ structure.getEmail }}"; + if (structureEmail != ""){ + structureContentString+= '<div><a href="mailto:'+structureEmail+'" target="_blank">'+structureEmail+'</a></div>'; + } + structureUrl = "{{ structure.getUrl }}"; + if(structureUrl != ""){ + structureContentString+= '<div><a target="_blank" href="'+structureUrl+'">'+structureUrl+'</a></div>'; + } + + if((lat !="0")&&(lon != "0")){ + structureArrayMarker[{{ loop.index0 }}] = L.marker(L.latLng(lat, lon), { title: '{{ structure.getName }}', id: '{{ loop.index0 }}', desc: structureContentString } ); + markers.addLayer(structureArrayMarker[{{ loop.index0 }}]); + structureArrayMarker[{{ loop.index0 }}].on('click',function(event){clickMarker(this,structureMap);}); + } + {% endfor %} + structureMap.addLayer(markers); + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: 18, + attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' + }).addTo(structureMap); + + }); + + function clickMarker(marker,map){ + var overlay = document.getElementById('classCodeMapOverlay'); + var overlayTitle = document.getElementById('classCodeMapOverlayTitleContent'); + var overlayContent = document.getElementById('classCodeMapOverlayContent'); + if (!overlayShown) { + overlayTitle.innerHTML = marker.options.title; + overlayContent.innerHTML = marker.options.desc; + + jQuery("#classCodeMapOverlay").toggle("slow"); + overlayShown = marker.options.id; + lastSelectedMarker = marker.options.id; + }else { + if (overlayShown != marker.options.id) { + overlayTitle.innerHTML = marker.options.title; + overlayContent.innerHTML = marker.options.desc; + + overlayShown = marker.options.id; + lastSelectedMarker = marker.options.id; + }else{ + hideMapOverlay(); + } + } + //on centre la map sur le marker + map.panTo(marker.getLatLng()); + } + + function hideMapOverlay(){ + jQuery("#classCodeMapOverlay").toggle("slow"); + overlayShown = false; + return false; + } + </script> +</body> +</html> \ No newline at end of file diff --git a/src/ClassCodeBundle/Resources/views/Structure/listAll.json.twig b/src/ClassCodeBundle/Resources/views/Structure/listAll.json.twig new file mode 100644 index 0000000000000000000000000000000000000000..84bc8777dc5d61ee6ddbe9ffc1e8476644f59628 --- /dev/null +++ b/src/ClassCodeBundle/Resources/views/Structure/listAll.json.twig @@ -0,0 +1,19 @@ +{ "structures":[ + {% for structure in structures %} + { + "type" : "{{ structure.getMainType }}" , + "name" : "{{ structure.getName }}" , + "logo" : "{{ structure.getLogo }}", + "url" : "{{ structure.getUrl }}", + "who" : "{{ structure.getWho }}", + "address" : "{{ structure.getAddress }}", + "location" : { "lat" : "{{structure.getLatitude }}" , "lng" :"{{ structure.getLongitude}}" }, + "email" : "{{structure.getEmail }}" + "source" : "{{structure.getDataSource }}" + } + {% if loop.last == false %} + , + {% endif %} + {% endfor %} +] +}