get($sbas_id,$record_id,$canprev)) !== false) return $tmp; $session = session::getInstance(); $JS_roll =""; $url_ext = ''; if($isImage || $isFlash) { if(isset($sd['preview']['credate']) && isset($sd['preview']['moddate'])) { if($sd['preview']['credate'] != $sd['preview']['moddate']) { $modtime = new DateTime($sd['preview']['moddate']); $nowtime = new DateTime('-4 days'); if($modtime>$nowtime) $url_ext = '&'.mt_rand(); } } if(isset($sd["preview"]["width"]) && $canprev && file_exists(p4string::addEndSlash($sd['preview']['path']).$sd['preview']['file'])) { $prev = "/include/directprev.php?bas=".$base_id."&rec=".$record_id.$url_ext; $JS_roll = ""; } elseif(isset($sd["thumbnail"]) && file_exists(p4string::addEndSlash($sd['thumbnail']['path']).$sd['thumbnail']['file'])) { $sd["preview"] = $sd["thumbnail"]; $prev = '/'.p4string::addEndSlash($sd["thumbnail"]["baseurl"]).$sd["thumbnail"]["file"]; $JS_roll = ""; } } elseif($isVideo) { if(isset($sd["preview"]["width"]) && $canprev) { $fileName = p4string::addEndSlash($sd["preview"]['path']).$sd["preview"]['file']; $preview = p4file::apache_tokenize($fileName); if(!$preview) $preview = '/include/directprev.php%3F'."bas%3D".$base_id."%26rec%3D".$record_id; $JS_roll = '
'; } } elseif($isDocument) { if(isset($sd["preview"]["width"]) && $canprev) { $token = md5(time().mt_rand(100000,999999)); $width = $height = 500; $preview = '/include/directprev.php%3F'."bas%3D".$base_id."%26rec%3D".$record_id; $JS_roll = '
'; } } elseif($isAudio) { if(isset($sd["preview"]["width"]) && $canprev) { $prev = "/include/directprev.php%3Fbas%3D".$base_id."%26rec%3D".$record_id; $JS_roll = " "; } } $cache_preview->set($sbas_id,$record_id,$canprev,$JS_roll); return $JS_roll; } public static function get_preview($base_id, $record_id, $isFullyPublic) { $session = session::getInstance(); $flashcontent = $preview = $url = false; $width = $height = $html_view = false; $sdMain = phrasea_subdefs($session->ses_id,$base_id,$record_id); $user = user::getInstance($session->usr_id); $doctype = 'unknown'; $typedoc = null; if(isset($sdMain["preview"]) && $sdMain["preview"]) { $key = $base_id.'_'.$record_id; if(($isFullyPublic) || (isset($user->_rights_bas[$base_id]) && $user->_rights_bas[$base_id]['canpreview'] == true) || array_key_exists($key, $user->_rights_records)) { $typedoc = 'preview'; } elseif(isset($sdMain['thumbnail'])) { $typedoc = 'thumbnail'; } } $needSubstit = false; // if($typedoc == null && isset($canHD[$bas]) && $canHD[$bas] && isset($sdMain[$typedoc])) // { // $typedoc = 'document'; // if(!in_array($sdMain[$typedoc]['mime'],array('image/jpeg','image/gif','video/x-flv','audio/x-wav','audio/wav','audio/mpeg'))) // $needSubstit = true; // // } if($typedoc == null && isset($sdMain['thumbnail'])) { $typedoc = 'thumbnail'; } $gviewer_docs = array( 'application/vnd.oasis.opendocument.text', 'application/pdf', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.speadsheet', 'application/msword', 'application/mspowerpoint', 'application/x-shockwave-flash', 'application/msexcel', 'application/vnd.ms-powerpoint' ); if($typedoc == null && isset($sdMain['document'])) { // if(!in_array($sdMain['document']['mime'],$gviewer_docs)) $needSubstit = true; $typedoc = 'document'; } if($typedoc != null && isset($sdMain[$typedoc])) { if($needSubstit || !in_array($sdMain[$typedoc]['mime'],array_merge($gviewer_docs,array('application/x-shockwave-flash','image/jpeg','image/gif','video/x-flv','video/mp4','audio/x-wav','audio/wav','audio/mpeg')))) { $url = '/skins/icons/substitution/' . str_replace('/', '_', $sdMain[$typedoc]['mime']) . '.png'; $preview = ''; $needSubstit = true; $width = '128'; $height = '128'; } elseif(isset($sdMain[$typedoc]["width"]) && isset($sdMain[$typedoc]["height"])) { $width = $sdMain[$typedoc]["width"]; $height = $sdMain[$typedoc]["height"]; } if(!$needSubstit) { if($sdMain[$typedoc]["baseurl"]!=null && $sdMain[$typedoc]["baseurl"]!="" ) { $url = $preview = '/'.p4string::addEndSlash($sdMain[$typedoc]["baseurl"]).$sdMain[$typedoc]["file"]."?mt=".mt_rand(); $doctype = 'image'; } else { if(in_array($sdMain[$typedoc]['mime'],array('image/jpeg','image/gif'))) { $url = $preview = "/include/directprev.php?bas=".$base_id."&rec=".$record_id; $doctype = 'image'; if(isset($sdMain['document']['credate']) && isset($sdMain['document']['moddate'])) { if($sdMain['document']['credate'] != $sdMain['document']['moddate']) { $modtime = new DateTime($sdMain['document']['moddate']); $nowtime = new DateTime('-4 days'); if($modtime>$nowtime) { $url .= '&t='.mt_rand(); $preview .= '&t='.mt_rand(); } } } } elseif(in_array($sdMain[$typedoc]['mime'],$gviewer_docs)) { $url = $preview = '/include/directprev.php%3F'."bas%3D".$base_id."%26rec%3D".$record_id; $doctype = 'flash'; } elseif(in_array($sdMain[$typedoc]['mime'],array('video/x-flv','video/mp4'))) { $fileName = p4string::addEndSlash($sdMain[$typedoc]['path']).$sdMain[$typedoc]['file']; $url = $preview = p4file::apache_tokenize($fileName); if(!$preview) $url = $preview = '/include/directprev.php%3F'."bas%3D".$base_id."%26rec%3D".$record_id; $doctype = 'video'; } elseif(in_array($sdMain[$typedoc]['mime'],array('audio/x-wav','audio/wav','audio/mpeg'))) { $url = $preview = '/include/directprev.php%3F'."bas%3D".$base_id."%26rec%3D".$record_id; $doctype = 'audio'; } } if(in_array($sdMain[$typedoc]['mime'],array('image/jpeg','image/gif'))) { $html_view = ' '; $preview = ''; } elseif(in_array($sdMain[$typedoc]['mime'],array('video/x-flv','video/mp4'))) { $flashcontent = array("height"=>$height,"width"=>$width,'flv'=>$preview); $token = md5(time().mt_rand(100000,999999)); $html_view = '
'; $preview = '
'; // $width = $height = '200'; } elseif(in_array($sdMain[$typedoc]['mime'],$gviewer_docs)) { $width = $height = '500'; $token = md5(time().mt_rand(100000,999999)); $flashcontent = array("height"=>$height,"width"=>$width,"url"=>'/include/FlexPaper_flash/FlexPaperViewer.swf', "flashVars"=>'SwfFile='.$preview.'&Scale=0.6&ZoomTransition=easeOut&ZoomTime=0.5&ZoomInterval=0.1&FitPageOnLoad=true&FitWidthOnLoad=true&PrintEnabled=true&FullScreenAsMaxWindow=false&localeChain='.$session->locale); $html_view = '
'; $preview = '' . '' . '' . '' . '' . ''; $preview = '
'; } elseif(in_array($sdMain[$typedoc]['mime'],array('audio/x-wav','audio/wav','audio/mpeg'))) { $preimage = ''; $token = md5(time().mt_rand(100000,999999)); $width = $sdMain['thumbnail']["width"]; $height = $sdMain['thumbnail']["height"]; if($typedoc != 'thumbnail' && isset($sdMain['thumbnail']) && isset($sdMain['thumbnail']['width']) && $sdMain['thumbnail']["file"] != 'audio.jpg') { if($sdMain['thumbnail']["baseurl"]!=null && $sdMain['thumbnail']["baseurl"]!="" ) $preurl = 'include/'.p4string::addEndSlash($sdMain['thumbnail']["baseurl"]).$sdMain['thumbnail']["file"]."?mt=".mt_rand(); if($preurl != '') $preimage = '
'; } $flashcontent = array('height'=>26,"width"=>290,"url"=>"/include/audio-player/player.swf", "flashVars"=>"playerID=2&autostart=yes&noinfo=yes&animation=no&remaining=yes&soundFile=".$preview); $html_view = '
'; $preview = '
'.$preimage.''; } } } return array( 'preview' => $preview, 'flashcontent' => $flashcontent, 'width' => $width, 'height' => $height, 'doctype' => $doctype, 'html' => $html_view, 'url' => $url ); } public static function get_duration($xml) { $duration = 0; if($infoXml = simplexml_load_string($xml)) { foreach($infoXml->doc->Attributes() as $k=>$v) { if($k == 'duration') $duration = (int)$v; } } return self::format_duration($duration); } public static function format_duration($d) { $durations = $durationm = $durationh = 0; $durations = fmod($d,60); $durations = $durations<=9?'0'.$durations:$durations; $durationm = fmod(floor($d/60),60); $durationm = ($durationm<=9?'0'.$durationm:$durationm).':'; $durationh = floor($d/3600); $durationh = $durationh==0?'':(($durationh<=9?'0'.$durationh:$durationh).':'); $d = $durationh.$durationm.$durations; return $d; } public static function format_infos($xml,$sbas_id,$record_id,$docType) { if(trim($xml) == '') return ''; $session = session::getInstance(); $locale = $session->locale; $cache_record = cache_record::getInstance(); if(($tmp = $cache_record->get($sbas_id,$record_id,'infos_'.$locale)) != false) return $tmp; $exifinfos = ''; $xml = preg_replace(array("/>\s*/", "/\n/"), array(">", "[[br/]]"), $xml); $dom_doc = new DOMDocument(); $basesettings = phrasea::load_settings($locale); if($dom_doc->loadXML($xml)) { if($basesettings["xsltinfo"] != '') { $dom_doc_xsl = new DOMDocument; $dom_doc_xsl->loadXML($basesettings["xsltinfo"]); $xslt = new XSLTProcessor(); $xslt->importStylesheet($dom_doc_xsl); $xslt->setParameter('', 'record_id', $record_id); switch($docType) { case 'video': $duration = answer::get_duration($xml); $xslt->setParameter('', 'duration', $duration); break; case 'audio': $duration = answer::get_duration($xml); $xslt->setParameter('', 'duration', $duration); break; } $xslt->setParameter('', 'docutype', $docType); $exifinfos = trim($xslt->transformToXML($dom_doc)); $exifinfos = str_replace(array("\r\n","\r","\n"," "),array("","",""," "),$exifinfos); } } $cache_record->set($sbas_id,$record_id,'infos_'.$locale,$exifinfos); return $exifinfos; } function splitTermAndContext($word) { $term = trim($word); $context = ""; if(($po = strpos($term, "(")) !== false) { if(($pc = strpos($term, ")", $po)) !== false) { $context = trim(substr($term, $po+1, $pc-$po-1)); $term = trim(substr($term, 0, $po)); } } return(array($term, $context)); } public static function format_caption($base_id, $record_id, $xml, $with_bounce = false, $template=false) { $session = session::getInstance(); if(trim($xml) == '') return _('reponses::record::Pas de description'); $locale = $session->locale; require_once( GV_RootPath . 'lib/unicode/lownodiacritics_utf8.php' ); $cache_record = cache_record::getInstance(); $sbas_id = phrasea::sbasFromBas($base_id); $md5 = md5($xml); $cache_key = 'caption'.$md5.'_'.$locale.'_'.($with_bounce ? '1' : '0').'_'.$template; if(($tmp = $cache_record->get($sbas_id,$record_id,$cache_key)) != false) return $tmp; $xml = preg_replace(array("/>\s*/", "/\n/"), array(">", "[[br/]]"), $xml); $dom_doc = new DOMDocument(); $basesettings = phrasea::load_settings($locale); $captions = _('reponses::record::Pas de description'); $xsl = ''; if(isset($basesettings["colls"][$base_id])) { if(function_exists("phrasea_isgrp") && isset($session->ses_id) && phrasea_isgrp($session->ses_id, $base_id, $record_id) != false) $xsl = $basesettings["colls"][$base_id]["xsltRollOverGrp"]; elseif($template == 'homelink' && isset($basesettings["colls"][$base_id]["xslthomelink"])) $xsl = $basesettings["colls"][$base_id]["xslthomelink"]; else $xsl = $basesettings["colls"][$base_id]["xsltRollOver"]; } if($dom_doc->loadXML($xml)) { $XPATH_thesaurus = databox::get_xpath_thesaurus($sbas_id); $XPATH_struct = databox::get_xpath_structure($sbas_id); $DOM_thFields = array(); if($XPATH_struct) $DOM_thFields = $XPATH_struct->query("/record/description/*[@tbranch!='']"); $XPATH_caption = new DOMXPath( $dom_doc ); foreach($DOM_thFields as $DOM_thField) { $tbranch = $DOM_thField->getAttribute("tbranch"); $DOM_branchs = $XPATH_thesaurus->query($tbranch); $DOM_fields = $XPATH_caption->query("/record/description/" . $DOM_thField->nodeName); foreach($DOM_fields as $DOM_field) { $fvalue = $DOM_field->nodeValue; // le terme n'est cliquable que s'il est dans le thesaurus $cleanvalue = str_replace(array("", "", "'"), array("", "", "'"), $fvalue); list($term_noacc, $context_noacc) = self::splitTermAndContext($cleanvalue); $term_noacc = noaccent_utf8($term_noacc, PARSED); $context_noacc = noaccent_utf8($context_noacc, PARSED); if($context_noacc) { $q = "($tbranch)//sy[@w='".$term_noacc."' and @k='".$context_noacc."']"; } else { $q = "($tbranch)//sy[@w='".$term_noacc."' and not(@k)]"; } $t = ""; foreach($DOM_branchs as $DOM_branch) { $nodes = $XPATH_thesaurus->query($q, $DOM_branch); if($nodes->length > 0) { $lngfound = false; foreach($nodes as $node) { if($node->getAttribute("lng") == $session->usr_i18n) { // le terme est dans la bonne langue, on le rend cliquable list($term, $context) = self::splitTermAndContext($fvalue); $term = str_replace(array("", ""), array("", ""), $term); $context = str_replace(array("", ""), array("", ""), $context); $qjs = $term; if($context) { $qjs .= " [".$context."]"; } $t = "[[a class=\"bounce\" onclick=\"bounce('".$sbas_id."','"; $t .= p4string::MakeString($qjs, "js"); $t .= "', '"; $t .= p4string::MakeString($DOM_field->nodeName, "js"); $t .= "');return(false);\"]]"; $t .= $fvalue; $t .= "[[/a]]"; $lngfound = true; break; } $synonyms = $XPATH_thesaurus->query("sy[@lng='" . $session->usr_i18 . "']", $node->parentNode); foreach($synonyms as $synonym) { $k = $synonym->getAttribute("k"); if($synonym->getAttribute("w") != $term_noacc || $k != $context_noacc) { $link = $qjs = $synonym->getAttribute("v"); if($k) { $link .= " (".$k.")"; $qjs .= " [".$k."]"; } $t = "[[a class=\"bounce\" onclick=\"bounce('"; $t .= p4string::MakeString($qjs, "js"); $t .= "', '"; $t .= p4string::MakeString($DOM_field->nodeName, "js"); $t .= "');return(false);\"]]"; $t .= $link; $t .= "[[/a]]"; $lngfound = true; break; } } } if(!$lngfound) { list($term, $context) = self::splitTermAndContext($fvalue); $term = str_replace(array("", ""), array("", ""), $term); $context = str_replace(array("", ""), array("", ""), $context); $qjs = $term; if($context) { $qjs .= " [".$context."]"; } $t = "[[a class=\"bounce\" onclick=\"bounce('".$sbas_id."','"; $t .= p4string::MakeString($qjs, "js"); $t .= "', '"; $t .= trim(p4string::MakeString($DOM_field->nodeName, "js")); $t .= "');return(false);\"]]"; $t .= $fvalue; $t .= "[[/a]]"; } } } if($t) $DOM_field->nodeValue = htmlspecialchars($t); } } if($xsl != '') { $xslt_proc = new XSLTProcessor(); $dom_doc_roll = new DOMDocument(); $dom_doc_roll->loadXML($xsl); $xslt_proc->importStylesheet($dom_doc_roll); $rollDesc = $xslt_proc->transformToXML($dom_doc); if($rollDesc != "") { $captions = $rollDesc; } } } // preg_match_all("((https?|ftp|gopher|file):((//)|(\\\\))[\w\d:#%/;$()~_?\-=\\\.&]*)",$captions,$matches); // // $urls = array_unique($matches[0]); //var_dump($urls); // foreach($urls as $url) // { // $captions = str_replace($url,''.$url.'',$captions); // } $captions = (p4string::entitydecode($captions)); $captions = preg_replace("(([^']{1})((https?|file):((/{2,4})|(\\{2,4}))[\w:#%/;$()~_?/\-=\\\.&]*)([^']{1}))",'$1 $2  $7',$captions); // var_dump($captions); $cache_record->set($sbas_id,$record_id,$cache_key,$captions); return $captions; } public static function format_title($sbas_id, $record_id, $xml) { if(trim($xml) == '') return _('reponses::document sans titre'); $session = session::getInstance(); $cache_record = cache_record::getInstance(); $locale = $session->locale; $md5 = md5($xml); if(($tmp = $cache_record->get($sbas_id,$record_id,'title'.$md5.'_'.$locale)) != false) return $tmp; $xml = preg_replace(array("/>\s*/", "/\n/"), array(">", "[[br/]]"), $xml); $dom_doc = new DOMDocument(); $basesettings = phrasea::load_settings($locale); $title = ''; if($dom_doc->loadXML($xml)) { if($basesettings["bases"][$sbas_id]["xsl_title"]) { $xslt_proc = new XsltProcessor(); $dom_doc_title = new DOMDocument(); if($dom_doc_title->loadXML($basesettings["bases"][$sbas_id]["xsl_title"])) { $xslt_proc->importStylesheet( $dom_doc_title ); $xslt_proc->setParameter(null, "field", "Titre"); $title = trim($xslt_proc->transformToXML($dom_doc)); if($basesettings["bases"][$sbas_id]["defaultxml"]) { $title = basename($title); } $l = mb_strlen($title); if($l>120) $title = p4string::cutDesc($title,120,"[[em]]","[[/em]]"); } } } $title = p4string::entitydecode($title != "" ? $title : ""._('reponses::document sans titre').""); $cache_record->set($sbas_id,$record_id,'title'.$md5.'_'.$locale,$title); return $title; } public static function getThumbnail($ses, $bid, $rid,$getPrev=false) { static $substitutionfiles; $sbas_id = phrasea::sbasFromBas($bid); $cache_thumb = cache_thumbnail::getInstance(); if(($tmp = $cache_thumb->get($sbas_id, $rid, $getPrev))) { return $tmp; } $w = $h = $rollover_width = $rollover_height = 64; $sd = phrasea_subdefs($ses, $bid, $rid); $thumbnail = $rollover = null; $find = $sha = FALSE ; $mime = $extcur = ''; $docType = 'unknown'; $bitly = null; $url_ext = ''; $deleted = false; $orientation = 'portrait'; if($sd) { if(isset($sd['thumbnail']) && $sd['thumbnail']) { $thumbnail = '/'.p4string::addEndSlash($sd['thumbnail']['baseurl']).$sd['thumbnail']['file']; $w = $sd['thumbnail']['width']; $h = $sd['thumbnail']['height']; $imgclass = ($sd['thumbnail']['width'] > $sd['thumbnail']['height']) ? 'hthbimg' : 'vthbimg'; $orientation = ($sd['thumbnail']['width'] > $sd['thumbnail']['height']) ? 'landscape' : 'portrait'; $bitly = $sd['thumbnail']['bitly']; if( file_exists($sd['thumbnail']['path'].$sd['thumbnail']['file']) ) $find = TRUE ; else $thumbnail = null; } if(isset($sd['thumbnailGIF']) && $sd['thumbnailGIF']) { if( file_exists($sd['thumbnailGIF']['path'].$sd['thumbnailGIF']['file']) ) { $rollover = '/'.p4string::addEndSlash($sd['thumbnailGIF']['baseurl']).$sd['thumbnailGIF']['file']; $rollover_width = $sd['thumbnailGIF']['width']; $rollover_height = $sd['thumbnailGIF']['height']; } } if(isset($sd['document'])) { if(isset($sd['document']['file'])) { $mime = isset($sd['document']['mime'])?$sd['document']['mime']:'application/octet-stream'; $extcur = pathinfo($sd["document"]["file"]); $extcur = isset($extcur["extension"])?$extcur["extension"]:''; $sha = isset($sd['document']['sha256'])?$sd['document']['sha256']:false; $bitly = $sd['document']['bitly']; } if(isset($sd['document']['credate']) && isset($sd['document']['moddate'])) { if($sd['document']['credate'] != $sd['document']['moddate']) { $modtime = new DateTime($sd['document']['moddate']); $nowtime = new DateTime('-4 days'); if($modtime>$nowtime) $url_ext = '?'.mt_rand(); } } } if(isset($sd['document']['type'])) $docType = $sd['document']['type']; if(!$find) { // pas de thmbnail : substitution selon mime if(isset($sd['document']) && $sd['document']) { if(isset($sd['document']['mime'])) $mime = str_replace('/', '_', $sd['document']['mime']); else $mime = 'application_octet-stream'; $mime = trim($mime)!=''?$mime:'application_octet-stream'; // on verifie que l'image de substitution est connue if(!isset($substitutionfiles[$mime])) { // non : on la cherche $thumbnail = '/skins/icons/substitution/' . $mime . '.png'; $thumbnail = str_replace('+', '%20', $thumbnail); if(file_exists(GV_RootPath . 'www/' . $thumbnail) ) { $substitutionfiles[$mime] = $thumbnail; } else { $substitutionfiles[$mime] = '/skins/icons/substitution.png'; } } $w = $h = 256; $thumbnail = $substitutionfiles[$mime]; $imgclass = 'vthbimg'; $orientation = 'portrait'; } } } if(!$thumbnail) // pas de subdefs du tout { $thumbnail = '/skins/icons/deleted.png'; $imgclass = 'vthbimg'; $w = '128'; $h = '128'; $deleted = true; } $ret = array( 'rollover'=>$rollover, 'rollover_width'=>$rollover_width, 'rollover_height'=>$rollover_height, 'thumbnail'=>$thumbnail.$url_ext, 'deleted'=>$deleted , 'imgclass'=>$imgclass, 'orientation'=>$orientation, 'w'=>$w, 'h'=>$h, 'mime'=>$mime, 'extension'=>$extcur, 'type'=>$docType, 'bitly'=>$bitly, 'sha256'=>$sha ); if($getPrev) $ret['preview'] = $sd; $cache_thumb->set($sbas_id, $rid, $getPrev,$ret); return $ret; } public static function getXslRollOver2($preff , $name = '' , $skinsLNG = '',$prev = false ) { $priority = 0; # Taux de precision du xsl trouve # 1 : xml sans non , sans langue # 2 : xml sans nom , bonne langue # 3 : xml bon nom , sans langue # 4 : xml bon nom , bonne langue $myxsl = null; $mystruct = simplexml_load_string($preff) ; if($mystruct) foreach ($mystruct->layout as $layout) { if(strtoupper((string)$layout['doctype'])!=strtoupper("grouping") && strtoupper((string)$layout['name'])==strtoupper($name) && strtoupper((string)$layout['skin'])==strtoupper($skinsLNG)) { $priority = 4; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); break; } } elseif(strtoupper((string)$layout['doctype'])!=strtoupper("grouping") && $priority<3 && strtoupper((string)$layout['name'])==strtoupper($name) && (string)$layout['skin']=='') { $priority=3; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } elseif(strtoupper((string)$layout['doctype'])!=strtoupper("grouping") && !$prev && $priority<2 && (string)$layout['name']=='' && strtoupper((string)$layout['skin'])==strtoupper($skinsLNG)) { $priority=2; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } elseif(strtoupper((string)$layout['doctype'])!=strtoupper("grouping") && !$prev && $priority<1 && (string)$layout['name']=='' && (string)$layout['skin']=='') { $priority=1; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } } return $myxsl; } public static function getXslRollOver2Grp($preff , $name = '' , $skinsLNG = '',$prev = false ) { $priority = 0; # Taux de precision du xsl trouve # 1 : xml sans non , sans langue # 2 : xml sans nom , bonne langue # 3 : xml bon nom , sans langue # 4 : xml bon nom , bonne langue $myxsl = null; $mystruct = simplexml_load_string($preff) ; if($mystruct) foreach ($mystruct->layout as $layout) { if(strtoupper((string)$layout['doctype'])==strtoupper("grouping") && strtoupper((string)$layout['name'])==strtoupper($name) && strtoupper((string)$layout['skin'])==strtoupper($skinsLNG)) { $priority = 4; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); break; } } elseif(strtoupper((string)$layout['doctype'])==strtoupper("grouping") && $priority<3 && strtoupper((string)$layout['name'])==strtoupper($name) && (string)$layout['skin']=='') { $priority=3; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } elseif(strtoupper((string)$layout['doctype'])==strtoupper("grouping") && !$prev && $priority<2 && (string)$layout['name']=='' && strtoupper((string)$layout['skin'])==strtoupper($skinsLNG)) { $priority=2; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } elseif(strtoupper((string)$layout['doctype'])==strtoupper("grouping") && !$prev && $priority<1 && (string)$layout['name']=='' && (string)$layout['skin']=='') { $priority=1; foreach ($layout->children("http://www.w3.org/1999/XSL/Transform") as $second_gen) { $myxsl = $second_gen->asXML(); } } } return $myxsl; } public static function getOriginalName(&$unXml) { $originalname=""; if($sxe = simplexml_load_string($unXml)) { $z = $sxe->xpath('/record/doc'); if($z && is_array($z)) foreach($z[0]->attributes() as $a => $b) if($a=="originalname") $originalname = basename((string)$b); } $before = array("\\","/","*",":","?","<",">","|","\""); $after = array("_" ,"_","_","_","_","_","_","_","_" ); $originalname = str_replace($before, $after, $originalname); return $originalname; } public static function getContainerBaskets($base_id, $record_id, $ssel_id) { $conn = connection::getInstance(); $session = session::getInstance(); $baskets = array(); $sql = 'SELECT s.ssel_id, name, descript, c.ord FROM ssel s, sselcont c WHERE s.ssel_id = c.ssel_id AND c.base_id="'.$conn->escape_string($base_id).'" AND record_id="'.$conn->escape_string($record_id).'" AND usr_id="'.$conn->escape_string($session->usr_id).'" AND c.ssel_id!="'.$conn->escape_string($ssel_id).'" AND temporaryType="0"'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { $baskets[$row['ssel_id']] = array('name' => $row['name'], 'description' => $row['descript'], 'ord' => $row['ord']); } } return $baskets; } public static function correctScreenSubs($bas,$rec,$url,$prev,$w,$h,$reloadTemp) { if($url == '') $url = false; $out = ''; return $out; } public static function logEvent($sbas_id,$record_id,$action,$final,$comm='') { $session = session::getInstance(); if(!isset($session->usr_id) || !isset($session->ses_id)) return; $conn = connection::getInstance(); $ses_id = $session->ses_id; $usr_id = $session->usr_id; if(!$conn) die(); $sql = 'SELECT dist_logid FROM cache WHERE session_id="'.$conn->escape_string($ses_id).'"'; $log_id = array(); if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) { $log_id = unserialize($row['dist_logid']); } $conn->free_result($rs); } if(isset($log_id[$sbas_id])) { $log_id = $log_id[$sbas_id]; // $sql = 'SELECT * FROM sbas WHERE sbas_id = "'.$conn->escape_string($sbas_id).'"'; // // if($rs = $conn->query($sql)) // { // if($row = $conn->fetch_assoc($rs)) // { $connBas = connection::getInstance($sbas_id); if($connBas) { $sql = 'INSERT INTO log_docs (id, log_id, date, record_id, action, final, comment) VALUES (null, "'.$connBas->escape_string($log_id).'", NOW(), "'.$connBas->escape_string($record_id).'", "'.$connBas->escape_string($action).'", "'.$connBas->escape_string($final).'", "'.$connBas->escape_string($comm).'")'; $connBas->query($sql); } // } // $conn->free_result($rs); // } } } public static function writeIPTC( $sbas_id , $xml , $filesArray , $resetAllFields=false ) { $cwd = getcwd(); $debug = false; $arrayDesc = null; $mdesc = DOMDocument::loadXML( $xml ); $xp_mdesc = new DOMXPath( $mdesc ); $recmdesc = $xp_mdesc->query("/record/description"); $desc = $recmdesc->item(0); for($fdesc = $desc->firstChild; $fdesc; $fdesc = $fdesc->nextSibling) { if($fdesc->nodeType != XML_ELEMENT_NODE) continue; $arrayDesc[$fdesc->nodeName][] = $fdesc->nodeValue ; } $arrayStruct = null; $xp_struct = databox::get_xpath_structure($sbas_id); $recmstruct = $xp_struct->query("/record/description"); $stru = $recmstruct->item(0); for($fstru = $stru->firstChild; $fstru; $fstru = $fstru->nextSibling) { if($fstru->nodeType != XML_ELEMENT_NODE) continue; foreach($fstru->attributes as $a) { if(!isset($arrayStruct[$fstru->nodeName])) $arrayStruct[$fstru->nodeName] = array(); $arrayStruct[$fstru->nodeName][$a->name] = $a->value; } } $t_iptc = null; foreach( $arrayStruct as $tag=>$fieldpref ) { if(isset($fieldpref["src"]) && (substr($fieldpref["src"],0,3)=="ip-" || true)) { if($resetAllFields) $t_iptc[$fieldpref["src"]] = ""; if( isset($arrayDesc[$tag]) ) { $t_iptc[$fieldpref["src"]] = $arrayDesc[$tag]; if($fieldpref["src"]=="ip-date") { $fieldpref["type"] = "date"; foreach($t_iptc[$fieldpref["src"]] as $k=>$v) { $isodate = answer::getFieldValue($fieldpref, $v); $t_iptc[$fieldpref["src"]][$k] = substr($isodate, 0, 4) . "/" . substr($isodate, 4, 2) . "/" . substr($isodate, 6, 2); } } } } } if($debug) var_dump($t_iptc); if( $filesArray!=null ) { $cmd_removeiptc = ""; $cmd_removeiptcET = ""; $cmd_setiptc = ""; $cmd_setiptcET = ""; if($t_iptc) { foreach($t_iptc as $src => $values) { if($src == "ip-keyword" || $src == "ip-suppcat") $cmd_removeiptc .= ($cmd_removeiptc == ""?"":", ") . $src; if(true) { if($src == "Keywords" || $src == "Contact") $cmd_removeiptcET .= "-" . $src . "= "; } foreach($values as $value) { if($debug) printf("src=%s value=%s\n", $src, $value); if($src=="ip-date") { } $f = $value; $f = str_replace(array("\n", "\r", "'", "\""), array("\\n" , "", "\\'", "\\\""), $f); $cmd_setiptc .= ($cmd_setiptc == ""?"":", ") . "" . $src . "='" . $f . "'"; if(true) { $cmd_setiptcET .= "-" . $src . "='" . $f . "' "; } } } } foreach($filesArray as $doc) { if($cmd_removeiptc != "" || $cmd_removeiptcET != "") { $cmd = GV_exiftool ." \"" . $cmd_removeiptcET . "\" \"" . $doc . "\"" ; passthru($cmd); } if($cmd_setiptc != "" || $cmd_setiptcET != "") { $cmd = GV_exiftool ." \"" . $cmd_setiptcET . "\" \"" . $doc . "\"" ; passthru($cmd); } } } chdir($cwd); } public static function getFieldValue(&$sxStructField, $val) { $value = NULL; switch((string)$sxStructField["type"]) { case "text": $value = $val; if(GV_debug) printf("getFieldValue('%s', '%s') = '%s'\n", (string)$sxStructField["type"], $val, $value===NULL ? "NULL" : $value); break; case "number": $value = "" . (0.0 + $val); if(GV_debug) printf("getFieldValue('%s', '%s') = '%s'\n", (string)$sxStructField["type"], $val, $value===NULL ? "NULL" : $value); break; case "date": $value = trim(str_replace(array("-", ":", "/", ".", " "), array("", "", "", "", ""), $val)); // jy 20060802 : le contenu (val) est deja en iso delimite if(GV_debug) printf("getFieldValue('%s', '%s') = '%s'\n", (string)$sxStructField["type"], $val, $value===NULL ? "NULL" : $value); break; default: break; } return($value); } }