=') && extension_loaded('xsl')) { require_once($include_path.'/xslt-php4-to-php5.inc.php'); } class artevod extends connector { //Variables internes pour la progression de la récupération des notices public $profile; //Profil ArteVOD public $n_recu; //Nombre de notices reçues public $xslt_transform; //Feuille xslt transmise public function __construct($connector_path="") { parent::__construct($connector_path); $xml=file_get_contents($connector_path."/profil.xml"); $this->profile=_parser_text_no_function_($xml,"ARTEVODCONFIG"); } public function get_id() { return "artevod"; } public function get_token(){ global $empr_cb, $empr_nom, $empr_prenom, $empr_mail, $empr_year; $infos = unserialize($this->parameters); if($_SESSION['user_code'] && isset($infos['privatekey'])) { $id_encrypted = hash('sha256', $empr_cb.$infos['privatekey']); $token = "http://portal.mediatheque-numerique.com/sso_login?sso_id=mednum&id=".$empr_cb."&email=".$empr_mail."&nom=".strtolower($empr_nom)."&prenom=".strtolower($empr_prenom)."&dnaiss=".$empr_year."-12-31&id_encrypted=".$id_encrypted; if(isset($infos['url_referer']) && $infos['url_referer']) { $token .= "&referer=".$infos['url_referer']; } $token .= "&return_url="; return $token; } return ''; } //Est-ce un entrepot ? public function is_repository() { return 1; } public function source_get_property_form($source_id) { global $charset; $params=$this->get_source_params($source_id); if ($params["PARAMETERS"]) { //Affichage du formulaire avec $params["PARAMETERS"] $vars=unserialize($params["PARAMETERS"]); foreach ($vars as $key=>$val) { global ${$key}; ${$key}=$val; } } $searchindexes=$this->profile["SEARCHINDEXES"][0]["SEARCHINDEX"]; if (!$url) $url=$searchindexes[0]["URL"]; $form = ""; if (count($searchindexes) > 1) { $form .= "
"; } else { $form .= " "; } // Champ perso de notice à utiliser $form .= "
"; // Template de l'enrichissement $form .= "
"; $form .= "
"; return $form; } public function make_serialized_source_properties($source_id) { global $url, $cp_field, $enrichment_template; global $del_xsl_transform; $t["url"]=$url; $t["cp_field"] = $cp_field; $t['enrichment_template'] = ($enrichment_template ? $enrichment_template : addslashes($this->default_enrichment_template)); $this->sources[$source_id]["PARAMETERS"]=serialize($t); } /** * Formulaire des propriétés générales */ public function get_property_form() { global $charset; $this->fetch_global_properties(); //Affichage du formulaire en fonction de $this->parameters if ($this->parameters) { $keys = unserialize($this->parameters); $url_referer= $keys['url_referer']; $privatekey=$keys['privatekey']; } else { $url_referer=""; $privatekey=""; } $r="
"; return $r; } public function make_serialized_properties() { global $url_referer, $privatekey; //Mise en forme des paramètres à partir de variables globales (mettre le résultat dans $this->parameters) $keys = array(); $keys['url_referer']=$url_referer; $keys['privatekey']=$privatekey; $this->parameters = serialize($keys); } public function maj_entrepot($source_id, $callback_progress="", $recover=false, $recover_env="") { global $charset, $base_path; $this->fetch_global_properties(); $keys = unserialize($this->parameters); $this->callback_progress = $callback_progress; $params = $this->unserialize_source_params($source_id); $p = $params["PARAMETERS"]; $this->source_id = $source_id; $this->n_recu = 0; $this->n_total = 0; $url = $p["url"]; $curl = new Curl(); $curl->timeout = 60; $curl->set_option('CURLOPT_SSL_VERIFYPEER',false); @mysql_set_wait_timeout(); $nb_per_pass = 50; $page_nb = 1; $response = $curl->get($url."?page_size=".$nb_per_pass."&page_nb=".$page_nb); $json_content = json_decode($response->body); if(count($json_content) && $response->headers['Status-Code'] == 200){ $this->n_total = $response->headers['X-Total-Count']; $query = "select name from notices_custom where idchamp = ".$p['cp_field']; $result = pmb_mysql_query($query); if ($row = pmb_mysql_fetch_object($result)) { $cp_artevod = array('cp_artevod' => $row->name); } else { $cp_artevod = array(); } $sortir = false; while (!$sortir) { foreach ($json_content as $record) { $statut = $this->rec_record($this->artevod_2_uni($record, $cp_artevod), $source_id, ''); $this->n_recu++; $this->progress(); if(!$statut) { $sortir = true; break; } } $page_nb++; if(!$sortir) { $response = $curl->get($url."?page_size=".$nb_per_pass."&page_nb=".$page_nb); $json_content = json_decode($response->body); } if (!count($json_content)) { break; } } } else { $this->error = true; $this->error_message = $this->msg["artevod_error_auth"]; } return $this->n_recu; } public function progress() { $callback_progress = $this->callback_progress; if ($this->n_total) { $percent = ($this->n_recu / $this->n_total); $nlu = $this->n_recu; $ntotal = $this->n_total; } else { $percent = 0; $nlu = $this->n_recu; $ntotal = "inconnu"; } call_user_func($callback_progress, $percent, $nlu, $ntotal); } public function artevod_2_uni($nt, $cp) { $unimarc = array(); $auttotal = array(); $naut = 0; // Construction du 001 $unimarc["001"][0] = $this->get_id().':'.$nt->id; // title $unimarc["200"][0]["a"][0] = html_entity_decode($nt->title,ENT_QUOTES,'UTF-8'); // description (html) -> Notes if($nt->description) { $unimarc["330"][0]["a"][0] = html_entity_decode(strip_tags($nt->description),ENT_QUOTES,'UTF-8'); } // productionYear (2014) if ($nt->productionYear) { //$unimarc[""][0][""][0] = $nt->productionYear; } // posterUrl (http://prod-mednum.universcine.com/media/58/da/58da559ff0fa3.jpeg) if ($nt->posterUrl) { $unimarc["896"][0]["a"][0] = $nt->posterUrl; } // url (http://prod-mednum.universcine.com/une-saison-a-la-juilliard-school) if ($nt->url) { $unimarc["856"][0]["u"][0] = $nt->url; } // trailerUrl (http://media.universcine.com/0f/a3/0fa3f154-c07a-11e3-bfdd-e59cda21687c.mp4) if ($nt->trailerUrl) { $unimarc["897"][0]["a"][0] = $nt->trailerUrl; $unimarc["897"][0]["b"][0] = 'TRAILER_'.basename($nt->trailerUrl); } // duration (6240) if($nt->duration) { $unimarc["215"][0]["a"][0] = floor($nt->duration/60).':'.str_pad($nt->duration%60, 2, '0', STR_PAD_LEFT); } /* audioLanguages (array) ( [0] => stdClass Object ( [type] => Language [code] => eng ) ) */ $audioLanguages = $nt->audioLanguages; if (count($audioLanguages)) { for ($i=0; $icode; $unimarc['101'][] = $autt; } } /* directors (array) ( [0] => stdClass Object ( [type] => Person [fullName] => Max Nichols [familyName] => Nichols [givenName] => Max ) ) */ $authors = $nt->directors; if (count($authors)) { if (($naut + count($authors)) > 1) { $autf = "701"; }else { $autf = "700"; } for ($i=0; $ifamilyName; $autt["b"][0] = $authors[$i]->givenName; $autt["4"][0] = "300"; $unimarc[$autf][] = $autt; $auttotal[] = $authors[$i]; } $naut+= count($authors); } /* actors (array) ( [0] => stdClass Object ( [type] => Person [fullName] => Analeigh Tipton [familyName] => Tipton [givenName] => Analeigh ) ) */ $authors = $nt->actors; if (count($authors)) { $autf = "702"; for ($i=0; $ifamilyName; $autt["b"][0] = $authors[$i]->givenName; $autt["4"][0] = "005"; $unimarc[$autf][] = $autt; $auttotal[] = $authors[$i]; } $naut+= count($authors); } // publicationDate (2017-03-28) if ($nt->publicationDate) { if(!($publicationDate = formatdate($nt->publicationDate))) { $publicationDate = $nt->publicationDate; } $unimarc["210"][0]["d"][0] = $publicationDate; } /* genres (array) ( [0] => Documentaire [1] => Théâtre, cirque et danse ) */ $unimarc["610"] = array(); $genres = $nt->genres; if (count($genres)) { foreach($genres as $genre) { $keyword = array( 'a' => array($genre) ); $unimarc["610"][] = $keyword; } } /* themes (array) ( [0] => Comédie romantique ) */ $themes = $nt->themes; if (count($themes)) { foreach($themes as $theme) { $keyword = array( 'a' => array($theme) ); $unimarc["610"][] = $keyword; } } // productionCountry (US) if ($nt->productionCountry) { $unimarc["210"][0]["a"][0] = $nt->productionCountry; } /* codes => Array ( [0] => stdClass Object ( [type] => Le meilleur du cinéma [code] => 622040 ) ) */ $codes = $nt->codes; if (count($codes)) { for ($i=0; $itype; $autt["v"][0] = $codes[$i]->code; $unimarc['410'][] = $autt; // Collection } } /* medias (array)[0] => stdClass Object ( [type] => POSTER [url] => http://prod-mednum.universcine.com/media/58/da/58da57b51bd44.jpeg [modificationDate] => 2017-03-28T14:32:22 ) */ $medias = $nt->medias; if (count($medias)) { for ($i=0; $iurl == $nt->trailerUrl) { continue; } $autt = array(); $autt["a"][0] = $medias[$i]->url; $autt["b"][0] = $medias[$i]->type.'_'.basename($medias[$i]->url); $unimarc['897'][] = $autt; } } // rate (4) if ($nt->rate) { //$unimarc[""][0][""][0] = $nt->rate; } /* comments (array)( [0] => excellent on pourrait croire un woody allen [1] => ) */ $comments = $nt->comments; if (count($comments)) { $unimarc["300"][0]["a"][0] = ''; foreach($comments as $comment) { if ($unimarc["300"][0]["a"][0]) { $unimarc["300"][0]["a"][0].= '; '; } $unimarc["300"][0]["a"][0].= $comment; } } // commentsLibrary (array) $comments = $nt->commentsLibrary; if (count($comments)) { $unimarc["327"][0]["a"][0] = ''; foreach($comments as $comment) { if ($unimarc["327"][0]["a"][0]) { $unimarc["327"][0]["a"][0].= '; '; } $unimarc["327"][0]["a"][0].= $comment.'; '; } } // bonus (array) $comments = $nt->bonus; if (count($comments)) { foreach($comments as $comment) { //$unimarc[""][0][""][] = $comment; } } // target_audience (array) $target_audiences = $nt->targetAudiences; if (count($target_audiences)) { $unimarc["215"][0]["c"][0] = ''; foreach($target_audiences as $target_audience) { if ($unimarc["215"][0]["c"][0]) { $unimarc["215"][0]["c"][0].= '; '; } $unimarc["215"][0]["c"][0].= $target_audience->code; } } if($cp['cp_artevod']) { $unimarc["900"][0]["a"][0] = $nt->id; $unimarc["900"][0]["n"][0] = $cp['cp_artevod']; } $unimarc["801"][0]["a"][0] = 'FR'; $unimarc["801"][0]["b"][0] = 'ArteVOD'; return $unimarc; } public function rec_record($record, $source_id, $search_id) { global $charset, $base_path, $dbh, $url, $search_index; $date_import = date("Y-m-d H:i:s",time()); //Recherche du 001 $ref = $record["001"][0]; //Mise à jour if ($ref) { $ref_exists = $this->has_ref($source_id, $ref); if ($ref_exists) return false; //Si conservation des anciennes notices, on regarde si elle existe $ref_exists = false; if (!$this->del_old) { $ref_exists = $this->has_ref($source_id, $ref); } //Si pas de conservation des anciennes notices, on supprime if ($this->del_old) { $this->delete_from_entrepot($source_id, $ref); $this->delete_from_external_count($source_id, $ref); } if (($this->del_old) || ((!$this->del_old)&&(!$ref_exists))) { //Insertion de l'entête $n_header["rs"] = "*"; $n_header["ru"] = "*"; $n_header["el"] = "1"; $n_header["bl"] = "m"; $n_header["hl"] = "0"; $n_header["dt"] = "g"; //Récupération d'un ID $recid = $this->insert_into_external_count($source_id, $ref); foreach($n_header as $hc=>$code) { $this->insert_header_into_entrepot($source_id, $ref, $date_import, $hc, $code, $recid, $search_id); } $field_order=0; foreach ($record as $field=>$val) { for ($i=0; $i$vals) { for ($j=0; $jinsert_content_into_entrepot($source_id, $ref, $date_import, $field, $sfield, $field_order, $j, $vals[$j], $recid, $search_id); } } } else { if ($charset!="utf-8") { $vals[$i] = encoding_normalize::clean_cp1252($vals[$i], 'utf-8'); $vals[$i] = utf8_decode($vals[$i]); } $this->insert_content_into_entrepot($source_id, $ref, $date_import, $field, '', $field_order, 0, $val[$i], $recid, $search_id); } $field_order++; } } $this->rec_isbd_record($source_id, $ref, $recid); } } return true; } public function enrichment_is_allow(){ return true; } public function getTypeOfEnrichment($notice_id, $source_id){ $params=$this->get_source_params($source_id); if ($params["PARAMETERS"]) { //Affichage du formulaire avec $params["PARAMETERS"] $vars=unserialize($params["PARAMETERS"]); } $type = array(); // On n'affiche l'onglet que si le champ perso est renseigné $query = "select 1 from notices_custom_values where notices_custom_champ = ".$vars['cp_field']." and notices_custom_origine= ".$notice_id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $type['type'] = array( array( "code" => "artevod", "label" => $this->msg['artevod_vod'] ) ); $type['source_id'] = $source_id; } return $type; } public function getEnrichment($notice_id,$source_id,$type="",$enrich_params=array()){ global $charset; $params=$this->get_source_params($source_id); if ($params["PARAMETERS"]) { //Affichage du formulaire avec $params["PARAMETERS"] $vars=unserialize($params["PARAMETERS"]); } $enrichment= array(); switch ($type){ case "artevod" : default : $infos = unserialize($this->parameters); $record = record_display::get_record_datas($notice_id); $content = ""; $film = array(); // Titre $film['title'] = htmlentities($record->get_tit1(),ENT_QUOTES,$charset); // Genres $film['genres'] = $record->get_mots_cles(); // Auteurs $film['authors'] = $record->get_auteurs_principaux(); // Acteurs $film['actors'] = $record->get_auteurs_secondaires(); // Durée $film['duration'] = $record->get_npages(); // Description $film['description'] = htmlentities($record->get_resume(),ENT_QUOTES,$charset); // VIGNETTE, TRAILERS, PHOTOS $explnums = $record->get_explnums_datas(); $film['trailers'] = array(); $film['photos'] = array(); foreach ($explnums['explnums'] as $explnum) { $explnum_type = substr($explnum['name'], 0, strpos($explnum['name'], '_')); switch ($explnum_type) { case 'POSTER' : $film['poster'] = $explnum['url']; break; case 'TRAILER' : $film['trailers'][] = $explnum['url']; break; case 'PHOTO' : $film['photos'][] = $explnum['url']; break; } } // Public $film['target_audience'] = $record->get_ill(); // Année de production $film['production_year'] = $record->get_year(); // Pays de production // $film['production_countries'] = array(); // Langues $film['languages'] = $record->get_langues(); // Lien externe $film['externaluri'] = 'https://portal.mediatheque-numerique.com/sso_login?return_url='.urlencode($record->get_lien()); if($_SESSION['user_code'] && isset($infos['privatekey'])) { global $empr_cb, $empr_nom, $empr_prenom, $empr_mail, $empr_year; $id_encrypted = hash('sha256', $empr_cb.$infos['privatekey']); $film['externaluri'] .= "&sso_id=mednum&id=".$empr_cb."&email=".$empr_mail."&nom=".strtolower($empr_nom)."&prenom=".strtolower($empr_prenom)."&dnaiss=".$empr_year."-12-31&id_encrypted=".$id_encrypted; } if(isset($infos['url_referer']) && $infos['url_referer']) { $film['externaluri'] .= "&referer=".$infos['url_referer']; } $enrichment[$type]['content'] = H2o::parseString(stripslashes($vars['enrichment_template']))->render(array("film"=>$film)); break; } $enrichment['source_label'] = $this->msg['artevod_enrichment_source']; return $enrichment; } public function getEnrichmentHeader($source_id){ $header= array(); return $header; } }// class end