src/Controller/EventController.php line 210

Open in your IDE?
  1. <?php
  2. // src/Controller/EventController.php
  3. namespace App\Controller;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use App\Controller\DMAbstractController;
  8. class EventController  extends DMAbstractController
  9. {
  10.     public function getElementaryQuery($uri)
  11.     {
  12.         $sparqlTemplate = <<<txt
  13. construct { ?s ?p ?o } 
  14. WHERE 
  15. {
  16.     graph ?g { 
  17.             bind(<__uri__> as ?s) .
  18.            graph ?g { ?s ?p ?o } .
  19.            }
  20. txt;
  21.         $query =  str_replace"__uri__" $uri $sparqlTemplate);
  22.         return $query;
  23.     }
  24.     function getCreatorName($endpoint$uri) {
  25.         $user $this->getParameter('app.sparql_user');
  26.         $pass $this->getParameter('app.sparql_pass');
  27.         $name "Données sur le créateur inconnues dans cette base";
  28.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  29.         $queryTemplate "select ?creatorName where { graph ?g { <__uri__> <http://www.w3.org/2004/02/skos/core#prefLabel> ?creatorName  }}";
  30.         $query str_replace"__uri__" $uri $queryTemplate);
  31.         $requestURL $endpoint.'?'
  32.             .'query='.urlencode($query)
  33.             .'&format=json';
  34.         $jsonres self::request($requestURL$auth);
  35.         $description json_decode($jsonrestrue);
  36.         // echo "description".print_r($description, true)."<br/>";
  37.         if (array_key_exists("results"$description)) {
  38.             if (array_key_exists("bindings"$description["results"])) {
  39.                 if (count($description["results"]["bindings"]))  {
  40.                     if (array_key_exists("creatorName",  $description["results"]["bindings"][0])) {
  41.                         $name $description["results"]["bindings"][0]["creatorName"]["value"];
  42.                     } else {
  43.                         $name "Données sur le créateur non accessible"// le recuperer sur le concept associé
  44.                     }
  45.                 }
  46.             }
  47.         }
  48.         return $name;
  49.     }
  50.     function getTitle($endpoint$uri) {
  51.         $user $this->getParameter('app.sparql_user');
  52.         $pass $this->getParameter('app.sparql_pass');
  53.         $title "Titre inconnu dans cette base";
  54.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  55.         $queryTemplate "select ?title where { graph ?g { <__uri__> <http://www.cidoc-crm.org/cidoc-crm/P149_is_identified_by> ?title  }}";
  56.         $query str_replace"__uri__" $uri $queryTemplate);
  57.         $requestURL $endpoint.'?'
  58.             .'query='.urlencode($query)
  59.             .'&format=json';
  60.         $jsonres self::request($requestURL$auth);
  61.         //echo "jsonres: ". print_r($jsonres, true)."<br/>";
  62.         $description json_decode($jsonrestrue);
  63.         // echo "description".print_r($description, true)."<br/>";
  64.         if (array_key_exists("results"$description)) {
  65.             if (array_key_exists("bindings"$description["results"])) {
  66.                 if (count($description["results"]["bindings"]))  {
  67.                     if (array_key_exists("title",  $description["results"]["bindings"][0])) {
  68.                         $title $description["results"]["bindings"][0]["title"]["value"];
  69.                     } else {
  70.                         $title "Non accessible"// le recuperer sur le concept associé
  71.                     }
  72.                 }
  73.             }
  74.         }
  75.         return $title;
  76.     }
  77.     function eventStructurer($description) {
  78.         $descstruct = array();
  79.         $descstruct["types"] = array();
  80.         $descstruct["phys"] = $descstruct["concept"]  ="";
  81.         $descstruct["creatoruri"] = array();
  82.         // echo "description: ".print_r($description, true)."\n"; a permis de détecter que certains événements n'ont pas de P108 et P94 associé!
  83.         if ($description) {
  84.             if (array_key_exists("http://www.cidoc-crm.org/cidoc-crm/P108_has_produced"$description)) $descstruct["phys"] = $description["http://www.cidoc-crm.org/cidoc-crm/P108_has_produced"]["@id"];
  85.             if (array_key_exists("http://www.cidoc-crm.org/cidoc-crm/P94_has_created"$description)) $descstruct["concept"] = $description["http://www.cidoc-crm.org/cidoc-crm/P94_has_created"]["@id"];
  86.             if (array_key_exists("cur:P108_has_produced"$description)) $descstruct["phys"] = str_replace("ex:",$description["@context"]["ex"],$description["cur:P108_has_produced"]["@id"]);
  87.             if (array_key_exists("cur:P94_has_created"$description)) $descstruct["concept"] = str_replace("ex:",$description["@context"]["ex"],$description["cur:P94_has_created"]["@id"]);
  88.             if (array_key_exists("http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by"$description)) {
  89.                 if (array_key_exists("@id",$description["http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by"])) {
  90.                     array_push($descstruct["creatoruri"], $description["http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by"]["@id"]);
  91.                 } else {
  92.                     foreach ($description["http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by"] as $crea) {
  93.                         array_push($descstruct["creatoruri"], $crea["@id"]);
  94.                     }
  95.                 }
  96.             }
  97.             if (array_key_exists("http://www.cidoc-crm.org/cidoc-crm/P4_has_time_span"$description)) $descstruct["timespan"] = $description["http://www.cidoc-crm.org/cidoc-crm/P4_has_time_span"]["@id"];
  98.             #if (array_key_exists("@type", $description)) $descstruct["types"] = $description["@type"];
  99.         }
  100.         return $descstruct;
  101.     }
  102.     function eventDescription($desc$format)
  103.     {
  104.         $uri $desc["uri"];
  105.         $user $this->getParameter('app.sparql_user');
  106.         $pass $this->getParameter('app.sparql_pass');
  107.         // $auth = "student:igr2018%"; // le dataset dmsites devrait être en libre accès
  108.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  109.         //$format = "json";
  110.         $query self::getElementaryQuery($uri);
  111.         $requestURL $desc["eventendpoint"].'?'
  112.             .'query='.urlencode($query)
  113.             .'&format=json';
  114.         // echo "eventendpoint: ". print_r($desc["eventendpoint"], true)."<br/>";
  115.         // echo "uri: ". print_r($uri, true)."<br/>";
  116.         // echo "query: ". print_r($query, true)."<br/>";
  117.         $jsonres self::request($requestURL$auth);
  118.         // echo "jsonres: ". print_r($jsonres, true)."<br/>";
  119.         $description json_decode($jsonrestrue);
  120.         $descstruct = array();
  121.         $descstruct["class"] = array();
  122.         $descstruct self::eventStructurer($description);
  123.         // aller chercher le titre
  124.         $descstruct["title"] = $this->getTitle($desc["eventendpoint"], $descstruct["concept"]);
  125.         $descstruct["altLabel"] = array();
  126.         $descstruct["dataset"] = "dmexpo ou SemJoconde";
  127.         // $descstruct["triplestore"] = "https://kg.grains-de-culture.fr/";
  128.         $descstruct["triplestore"] = "https://graphpat.telecom-paris.fr/";
  129.         $descstruct["query"] = $query;
  130.         $descstruct["jsonarray"] = $description;
  131.         $descstruct["url"] = $requestURL;
  132.         $descstruct["uri"] = $uri;
  133.         $descstruct["entitytype"] = "Evènement (exposition, acte de création...)";
  134.         $descstruct["entityid"] = $desc["id"];
  135.         if (count($descstruct["creatoruri"])) {
  136.             $descstruct["creatorLink"] = $descstruct["creatoruri"][0];
  137.             $descstruct["creatorName"] = $this->getCreatorName($desc["eventendpoint"], $descstruct["creatoruri"][0]);
  138.         } else {
  139.             $descstruct["creatorLink"] = "";
  140.             $descstruct["creatorName"] = "Créateur inconnu dans cette base";
  141.         }
  142.         if (!array_key_exists("timespan"$descstruct))
  143.             $descstruct["timespan"] = "<inconnue>";
  144.         $descstruct["jsonld"] = "";
  145.         $descstruct["altLabel"] = "";
  146.         $descstruct["uriville"] = "";
  147.         $descstruct["urljson"] = $descstruct["uri"].".json";
  148.         $yasguilink "https://grains-de-culture.fr/fuseki/ui/#"
  149.             .'query='.urlencode(
  150.                 str_replace("construct { ?s ?p ?o }""select ?s ?p ?o"$query))
  151.             .'&contentTypeConstruct='.urlencode("text/turtle")
  152.             .'&contentTypeSelect='.urlencode("application/sparql-results+json")
  153.             .'&endpoint='.urlencode($desc["eventendpoint"])
  154.             .'&requestMethod=POST'
  155.             .'&tabTitle='.urlencode("Propriétés")
  156.             .'&headers=%7B%7D'
  157.             .'&outputFormat=table';
  158.         $descstruct["yasguilink"] = $yasguilink;
  159.         switch($format) {
  160.             case 'json':
  161.                 $mime $this->mimetype($format);
  162.                 $response = new Response($jsonres,
  163.                     Response::HTTP_OK,
  164.                     array('content-type' => $mime)
  165.                 );
  166.                 break;
  167.             case 'xml':
  168.                 $call $desc["eventendpoint"].'?'
  169.                     .'query='.urlencode($query)
  170.                     .'&format='.$this->mimetype($format)
  171.                     .'&output='.$format;
  172.                 $mime $this->mimetype($format);
  173.                 $result =self::request($call$auth);
  174.                 $response = new Response($result,
  175.                     Response::HTTP_OK,
  176.                     array('content-type' => $mime)
  177.                 );
  178.                 break;
  179.             default:
  180.                 $response $this->render('event/dmcreationevent.html.twig', [
  181.                 # $response = $this->render('work/dmdebugevent.html.twig', [
  182.                     'desc' => $desc,
  183.                     'descstruct' => $descstruct,
  184.                     'entitytype' => $descstruct["entitytype"],
  185.                     'description' => $description
  186.                 ]);
  187.                 break;
  188.         }
  189.         $response->headers->addCacheControlDirective('must-revalidate'true);
  190.         $response->setSharedMaxAge(3600);
  191.         //$response->headers->set('Content-Type', 'application/json');
  192.         return $response;
  193.     }
  194.     /**
  195.     @Route("onto/event/creation/{id}.{_format}", defaults={"_format": "html"}, requirements={
  196.      *         "_format": "html|json|xml|ttl"
  197.      *     })
  198.      */
  199.     public function dmcreationevent(Request $request$id)
  200.     {
  201.         // exemple: http://datamusee.givingsense.eu/onto/event/creation/AE037477
  202.         $format $this->getFormat($request);
  203.         $desc = array();
  204.         // 26/6/2024 changement de point car le report sur TPT ne marche pas actuellement
  205.         //$desc["eventendpoint"] = "https://kg.grains-de-culture.fr/SemJoconde/sparql";
  206.         $desc["eventendpoint"] = "https://graphpat.telecom-paris.fr/SemJoconde/sparql";
  207.         $desc["eventdataset"] = "SemJoconde";
  208.         $desc["eventgraph"] = "";
  209.         $desc["comment"] = "";
  210.         $desc["id"] = $id;
  211.         $desc["uri"] = "http://datamusee.givingsense.eu/onto/event/creation/".$desc["id"];
  212.         return self::eventDescription($desc$format);
  213.     }
  214. }