escape_string($usr).'"';
if($rs = $conn->query($sql))
{
while($row = $conn->fetch_assoc($rs))
{
$canPreview[$row['base_id']] = ($row['canpreview']=='1')?true:false;
$canBasket[$row['base_id']] = ($row['canputinalbum']=='1')?true:false;
$canHD[$row['base_id']] = ($row['canhd']=='1')?true:false;
$canDL[$row['base_id']] = ($row['candwnldhd']=='1' || $row['candwnldsubdef']=='1' || $row['candwnldpreview']=='1')?true:false;
}
$conn->free_result($rs);
}
$history = $popularity = '';
switch($env)
{
case "RESULT":
$results = phrasea_fetch_results($ses, $pos+1, 1, true, "[[em]]", "[[/em]]");
$mypreview = array();
if(isset($results['results']) && is_array($results['results']))
{
$mypreview = $results['results'];
}
else
{
$pos = 0;
$mypreview = array(array('base_id'=>false,'record_id'=>false,'xml'=>false));
}
$bas = $mypreview[0]["base_id"];
$rec = $mypreview[0]["record_id"];
$xmlMAIN = $mypreview[0]["xml"];
// $isFullyPublic = true;
$title = sprintf(_('preview:: resultat numero %s / '),''.($pos+1).'');
break;
case "REG":
$contId = explode('_',$contId);
$basReg = $contId[0];
$recReg = $contId[1];
if($pos == 0)
{
$bas = $basReg;
$rec = $recReg;
$isReg = true;
$title = _('preview:: regroupement ');
}
else
{
$children = phrasea_grpchild($ses,$basReg,$recReg,GV_sit,$usr);
$bas = $children[($pos-1)][0];
$rec = $children[($pos-1)][1];
$title = sprintf(_('preview:: Previsualisation numero %s '),(count($children)-$pos+1).'/'.count($children));
}
$xmlMAIN = phrasea_xmlcaption($ses, $bas, $rec);
break;
case "BASK":
try
{
$basket = basket::getInstance($contId);
$posChu = 0;
$name = '';
$isPub = false;
$i = 0;
$first = true;
$posAlt = false;
foreach($basket->elements as $element)
{
$i++;
if($first)
{
$bas = $element->base_id;
$rec = $element->record_id;
$isBask = true;
$xmlMAIN = phrasea_xmlcaption($ses, $bas, $rec);
$posChu = $i;
$name = $basket->name;
$isPub = !!$basket->public;
$posAlt = $element->order;
}
$first = false;
if($isPub && !!$basket->pub_restrict)
$isFullyPublic = true;
if($element->order == $pos)
{
$bas = $element->base_id;
$rec = $element->record_id;
$isBask = true;
$xmlMAIN = phrasea_xmlcaption($ses, $bas, $rec);
$posChu = $i;
$name = $basket->name;
$isPub = !!$basket->public;
$posAlt = $element->order;
}
}
if($posAlt != $pos)
$pos = $posAlt;
if($isPub)
$title = $name.' ('.$posChu.'/'.$i.')';
else
$title = $name.' ('.$posChu.'/'.$i.') ';
}
catch(Exception $e)
{
}
break;
}
if(!$bas || !$rec)
{
return p4string::jsonencode(array(
'error' => _('preview:: erreur, l\'element demande est introuvable')
));
}
$sbas = phrasea::sbasFromBas($bas);
$connsbas = connection::getInstance($sbas);
$sql = 'DELETE FROM sselnew WHERE ssel_id = "'.$conn->escape_string($contId).'" AND usr_id = "'.$conn->escape_string($usr).'"';
$conn->query($sql);
$sdMain = phrasea_subdefs($ses,$bas,$rec);
$fullUrl = $bitly = false;
if(isset($sdMain['document']['sha256']))
$fullUrl = '/document/'.$bas.'/'.$rec.'/'.$sdMain['document']['sha256'].'/view/';
if(isset($sdMain['document']['bitly']) && $sdMain['document']['bitly']!= '')
$bitly = $sdMain['document']['bitly'];
if(isset($connsbas) && $connsbas)
{
$report = false;
if(isset($session->report[$sbas]))
{
if(in_array($bas,$session->report[$sbas]))
$report = true;
}
if($report && GV_google_api)
{
$views = $dwnls = array();
$top = 1;
$day = 30;
$min = 0;
$average = 0;
while($day>=0)
{
$datetime = new DateTime('-'.$day.' days');
$date = date_format($datetime,'Y-m-d');
$views[$date] = $dwnls[$date] = 0;
$day --;
}
$sql = 'SELECT count(id) as views, DATE(date) as datee FROM `log_view` WHERE record_id="'.$connsbas->escape_string($rec).'" AND date > (NOW() - INTERVAL 1 MONTH) AND site_id="'.$connsbas->escape_string(GV_sit).'" GROUP BY datee ORDER BY datee ASC';
if($rs = $connsbas->query($sql))
{
while($row = $conn->fetch_assoc($rs))
{
if(isset($views[$row['datee']]))
{
$views[$row['datee']] = (int)$row['views'];
$top = max( (int)$row['views'] ,$top );
$min = isset($min) ? min($row['views'],$min) : $row['views'];
$average += $row['views'];
}
}
}
if($bitly)
$popularity .= '
';
$history .= '
'.$historydet;
$history .= ' ';
if($report)
{
if($user != $usr)
$history .= ' '.sprintf(_('report:: par %s'),user::getInfos($user));
}
$history .= '
';
$history .= '
'.$hour."
";
}
}
}
}
}
$docType = isset($sdMain['document'])?$sdMain['document']['type']:'unknown';
$prev = answer::get_preview($bas,$rec,$isFullyPublic);
$preview_html = $prev['html'];
$preview = $prev['preview'];
$flashcontent = $prev['flashcontent'];
$width = $prev['width'];
$height = $prev['height'];
$doctype = $prev['doctype'];
$caption = "";
if($bas && $rec)
{
$caption = answer::format_caption($bas,$rec, $xmlMAIN);
$caption .= '
';
$exifinfos = answer::format_infos($xmlMAIN,$sbas,$rec,$docType);
$caption .= $exifinfos;
$title .= (trim($title) !== '' ? ' - ' : '').answer::format_title($sbas,$rec,$xmlMAIN);
}
else
{
$caption = '';
}
$dstatus = status::getDisplayStatus();
$status = strrev(phrasea_status($session->ses_id, $bas, $rec));
while(strlen($status) < 64)
$status .= '0';
$statuses = '';
$user = user::getInstance($session->usr_id);
if($status && isset($dstatus[$sbas]))
{
foreach($dstatus[$sbas] as $n=>$statbit)
{
if(!isset($status[$n]))
continue;
if($statbit['printable'] == '0' && (!isset($user->_rights_bas[$bas]) || $user->_rights_bas[$bas]['chgstatus'] === false))
{
continue;
}
if($status[$n] === '1')
{
if($statbit["img_on"])
{
$statuses .= "
![\"".(isset($statbit["labelon"])?$statbit["labelon"]:$statbit["lib"])."\"/](\"".$statbit["img_on"]."\")
";
}
}
else
{
if($statbit["img_off"])
{
$statuses .= ("
![\"".(isset($statbit["labeloff"])?$statbit["labeloff"]:("non-".$statbit["lib"]))."\"/](\"".$statbit["img_off"]."\")
");
}
}
}
}
$caption = '
'.$statuses . '
' . $caption;
$user = user::getInstance($session->usr_id);
if(isset($user->_rights_bas[$bas]) && $user->_rights_bas[$bas]['canmodifrecord'])
$caption = '
'.$caption;
##############################
$tools = '' ;
$hdpath = $hdW = $hdH = false;
if(!($isBask && !$isPub) && isset($canBasket[$bas]) && $canBasket[$bas])
$tools .= '
' ;//BASK
$tools .= '
' ;//PRINT
if(isset($canDL[$bas]) && $canDL[$bas])
$tools .= '
';//DL
$train = '';
if($isReg)
{
$train = getRegTrain($ses,$basReg,$recReg,$usr,$pos);
}
if($isBask && $roll)
{
$basket = basket::getInstance($contId);
foreach($basket->elements as $element)
$children[] = array($element->base_id,$element->record_id,$element->order);
$train .= '' .
'
' .
'
';
$i = 1;
foreach($children as $child)
{
$sd = answer::getThumbnail($ses,$child[0],$child[1]);
if($sd['w']>$sd['h'])
$style='width:65px;top:'.round((66-(65/($sd['w']/$sd['h'])))/2).'px;';
else
$style='height:65px;top:0;';
$minirollover = "";
if(GV_rollover_reg_preview)
{
if(!isset($canPreview[$child[0]]))
$canPreview[$child[0]] = false;
$minirollover = getMiniRollover($ses,$usr,$child,$canPreview[$child[0]]);
$minirollover = str_replace(array("'",'"',"\n"),array("\'",'\'',''),$minirollover);
}
$class = '';
if($pos == $child[2])
$class .= ' selected';
$train .= '
';
$i++;
}
$train .= '
' .
'
' .
'
' .
'
' .
'

' .
'

' .
'
'._('preview:: demarrer le diaporama').' ' .
'
'._('preview:: arreter le diaporama').' ' .
'
' .
'
' .
'
' .
$tools .
'
' .
'';
}
if($env == 'RESULT')
{
$train .= '' .
'
' .
'
' .
'

' .
'
'._('preview:: demarrer le diaporama').' ' .
'
'._('preview:: arreter le diaporama').' ' .
'

' .
'
' .
'
' .
'
' .
$tools .
'
' .
'';
}
$others = '';
if(($parents = phrasea_grpparent($ses,$bas,$rec,GV_sit,$usr)) && (($env != 'REG') || ($env=='REG' && count($parents)>1)))
{
$others .= '
';
$others .= '- '._('Apparait aussi dans ces reportages').'
';
foreach($parents as $parent)
{
if($parent[0]!=$basReg || $parent[1]!=$recReg)
{
$sd = answer::getThumbnail($ses,$parent[0],$parent[1]);
if($sd['w']>$sd['h'])
$style='width:65px;top:'.(($sd['w']-$sd['h'])/4).'%;';
else
$style='height:65px;top:0;';
$minirollover = "";
if(GV_rollover_reg_preview)
{
if(!isset($canPreview[$parent[0]]))
$canPreview[$parent[0]] = false;
$minirollover = getMiniRollover($ses,$usr,$parent,$canPreview[$parent[0]]);
$minirollover = str_replace(array("'",'"',"\n"),array("\'",'\'',''),$minirollover);
}
$titre ='';
$desc = phrasea_xmlcaption($ses, $parent[0], $parent[1]);
$titre = getRegName(phrasea::sbasFromBas($parent[0]) , $desc) ;
$liWidth = 'margin:0 10px;';
$liWidth = 'width:49%;';
$others .= '- ';
// $others .= '';
$others .= '
';
$others .= ' '.$titre.'' .
' ';
}
}
$others .= '
';
}
$baskets = answer::getContainerBaskets($bas,$rec, $contId);
if(count($baskets) > 0)
{
$others .= '
';
$others .= '- '._('Apparait aussi dans ces paniers').'
';
foreach($baskets as $b_id=>$b)
{
$others .= '
'.$b['name'].' ';
}
$others .= '
';
}
$title = collection::getLogo($bas).' '.$title;
return p4string::jsonencode(array(
"prev"=>$preview
,"prev_html"=>$preview_html
,"flashcontent"=>$flashcontent
,"desc"=>p4string::entitydecode($caption)
,"width"=>$width
,"height"=>$height
,"others"=>$others
,"hd"=>$hdpath
,"record_id"=>$rec
,"base_id"=>$bas
,"hdH"=>$hdH
,"hdW"=>$hdW
,"current"=>$train
,"history"=>$history
,"popularity"=>$popularity
,"tools"=>$tools
,"pos"=>$pos
,"type"=>$doctype
,"uUrl"=>$fullUrl
,"title"=>p4string::entitydecode($title)
));
}
function getAnswerTrain($pos)
{
$train = query::getPrevTrain($pos);
return $train;
}
function getRegTrain($ses,$basReg,$recReg,$usr,$pos)
{
// on prepare le train
phrasea_open_session($ses,$usr);
$children = phrasea_grpchild($ses,$basReg,$recReg,GV_sit,$usr);
$train = '';
$sd = answer::getThumbnail($ses,$basReg,$recReg);
$ratio = $sd['w']/$sd['h'];
if($sd['w']>$sd['h'])
$style='width:80px;top:'.(8+(80-round(80/$ratio))/2).'px;';
else
$style='height:80px;top:8px;';
$train .= '' .
'
' .
'

'.
'
' .
'
' .
'
';
$i = 1;
$n = 0;
if(!$children)
$children = array();
foreach($children as $child)
{
$sd = answer::getThumbnail($ses,$child[0],$child[1]);
if($sd['w']>$sd['h'])
$style='width:65px;top:'.round((66-(65/($sd['w']/$sd['h'])))/2).'px;';
else
$style='height:65px;top:0;';
$minirollover = "";
if(GV_rollover_reg_preview)
{
if(!isset($canPreview[$child[0]]))
$canPreview[$child[0]] = false;
$minirollover = getMiniRollover($ses,$usr,$child,$canPreview[$child[0]]);
$minirollover = str_replace(array("'",'"',"\n"),array("\'",'\'',''),$minirollover);
}
$class='';
if($i == $pos)
$class='selected';
$first = false;
$train .= '
';
$i++;
$n++;
}
$train .= '
' .
'
' .
'
' .
'
' .
'

' .
'

' .
'
'._('preview:: demarrer le diaporama').' ' .
'
'._('preview:: arreter le diaporama').' ' .
'
' .
'
' .
'
' .
// $tools .
'
' .
'';
return $train;
}
function getthemicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
function getMiniRollover($ses,$usr,$elem,$canPreview)
{
$style = "padding:2px";
$minirollover = '';
$minirollover .= '
';
$minirollover .= '';
$minirollover .= '';
$isVideo = $isImage = $isAudio = $isDocument = false;
$sd = phrasea_subdefs($ses,$elem[0],$elem[1]);
if(isset($sd['document']))
{
$docType = $sd['document']['type'];
$isVideo = $docType == 'video' ? true:false;
$isAudio = $docType == 'audio' ? true:false;
$isImage = $docType == 'image' ? true:false;
$isDocument = $docType == 'document' ? true:false;
}
$prev ="";
if(!$isVideo && !$isAudio)
$isImage = true;
if($isImage)
{
if(isset($sd["preview"]["width"]) && $canPreview)
{
$prev = "/include/directprev.php?&bas=".$elem[0]."&rec=".$elem[1];
$minirollover .= ' ';
}
elseif(isset($sd["thumbnail"]))
{
$sd["preview"] = $sd["thumbnail"];
$prev = '/'.p4string::addEndSlash($sd["thumbnail"]["baseurl"]).$sd["thumbnail"]["file"];
$minirollover .= ' ';
}
}
elseif($isVideo)
{
if(isset($sd["thumbnailGIF"]["width"]) && $canPreview)
{
$prev = "/include/directprev.php?type=thumbnailGIF&bas=".$elem[0]."&rec=".$elem[1];
$minirollover .= ' ';
}
}
elseif($isDocument)
{
}
elseif($isAudio)
{
if(isset($sd["thumbnail"]["width"]))
{
$prev = "/include/directprev.php?type=thumbnail&bas=".$elem[0]."&rec=".$elem[1];
$dispwidth = "";
if((int)$sd["thumbnail"]["width"]>200 || (int)$sd["thumbnail"]["height"]>200)
$dispwidth = 'width="200"';
$minirollover .= ' ';
}
}
$minirollover.=' | ';
$minirollover.='';
$z = null;
if($tmpxml=phrasea_xmlcaption($ses,$elem[0], $elem[1]))
{
$sxDesc = simplexml_load_string( $tmpxml );
$z = $sxDesc->xpath('/record/description');
}
$minirolloverTMP="";
$lastkey = "";
if($z && $z[0])
{
foreach($z[0] as $key=>$val)
{
$val2 = str_replace( "\n"," ",trim((string)$val) );
$val2 = str_replace( "\r"," ", $val2 );
$val2 = str_replace( "'","\'",$val2 );
if($lastkey!=$key )
{
if( $lastkey!="")
$minirollover .=' '.$minirolloverTMP.' ';
$minirolloverTMP =''.(string)$key .':'. $val2.'' ;
}
else
$minirolloverTMP.=';'. $val2.'';
$lastkey = $key;
}
}
if( $lastkey!="")
$minirollover .=''.$minirolloverTMP.' ';
else
$minirollover .=' ';
$minirollover.=' | ';
$minirollover.='
';
$minirollover.='
';
$minirollover = str_replace(array("\t","\r","\n"),array('','',''),$minirollover);
return $minirollover;
}
function getRegName($sbas_id , $desc)
{
$balisename = null;
$balisename = '';
$struct = databox::get_structure($sbas_id);
if($sxe = simplexml_load_string($struct))
{
$z = $sxe->xpath('/record/description');
if($z && is_array($z))
{
foreach($z[0] as $ki => $vi)
if($vi['regname']=='1')
$balisename = $ki;
}
}
$regname = '';
if($sxe = simplexml_load_string($desc))
$regname = (string)$sxe->description->$balisename;
return $regname;
}
function updateBask($usr,$ses)
{
$ret = null;
if(!($ph_session = phrasea_open_session($ses,$usr)))
return $ret;
$conn = connection::getInstance();
if(!$conn)
{
return $ret;
}
$sql = 'SELECT s.*, n.id as noview' .
' FROM ssel s ' .
' LEFT JOIN sselnew n' .
' ON (n.ssel_id = s.ssel_id AND n.usr_id = "'.$conn->escape_string($usr).'")' .
' WHERE (' .
' (s.public = "1" AND s.pub_restrict="0")' .
' OR s.usr_id="'.$conn->escape_string($usr).'"' .
' OR (s.public="1" AND s.pub_restrict="1" AND' .
' (SELECT COUNT(c.sselcont_id) FROM sselcont c WHERE c.ssel_id=s.ssel_id AND c.base_id IN' .
' (SELECT base_id from basusr WHERE usr_id = "'.$conn->escape_string($usr).'" AND actif ="1") )>0 ))' .
' AND temporaryType="0"' .
' ORDER BY public,pushFrom,ssel_id asc';
$nbNoview = 0;
if($rs = $conn->query($sql))
{
while($row = $conn->fetch_assoc($rs))
{
$isOk = true;
if($row['public'] == 1 && $row['pub_restrict'] == 1)
{
$sqlA = 'SELECT c.record_id, s.*, u.mask_and, u.mask_xor FROM sselcont c, sbas s, bas b, basusr u WHERE c.ssel_id="'.$conn->escape_string($row['ssel_id']).'" AND c.base_id IN ' .
' (SELECT base_id from basusr WHERE usr_id = "'.$conn->escape_string($usr).'" AND actif ="1")' .
' AND b.base_id = c.base_id AND b.sbas_id = s.sbas_id AND u.usr_id = "'.$conn->escape_string($usr).'" AND u.base_id = b.base_id';
$rsBas = $conn->query($sqlA);
$isOk = false;
while(($raw = $conn->fetch_assoc($rsBas)) && !$isOk)
{
$connsbas = connection::getInstance($raw['sbas_id']);
if($connsbas)
{
$sql = 'SELECT record_id FROM record WHERE ((status ^ '.$raw['mask_xor'].') & '.$raw['mask_and'].')=0 AND record_id="'.$connsbas->escape_string($raw['record_id']).'"';
$rsRec = $connsbas->query($sql);
if($connsbas->num_rows($rsRec)>0)
$isOk = true;
}
}
$conn->free_result($rsBas);
}
if($isOk)
{
if($row['public'] == '1')
{
if($row['noview']!="" && $usr != $row['usr_id']){
$nbNoview++;
}
}
elseif($row['pushFrom']!='0' && $row['noview']!="")
{
$nbNoview++;
}
}
}
}
return $nbNoview;
}
function setCss($usr, $ses, $color)
{
if(($newPreffs = user::setPrefs('client', 'css', $color)) !== false)
{
return 1;
}
else
return 0;
}
function setBaskStatus($usr,$ses,$mode)
{
user::setPrefs('client_basket_status', $mode);
}