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 .= '
'._('preview::statistiques pour le lien').' http://bit.ly/'.$bitly.'
'; $topScale = round($top*1.2); $average = $average / 30; $max = round(($top)*100/($topScale)); $min = round($min*100/($topScale)); $average = round($average*100/($topScale)); $popularity .= '
'._('preview::statistiques de visualisation pour le lien').'
'; $publis = array(); $sql = 'SELECT name, url FROM publi_settings WHERE usr_id=null OR usr_id="'.$conn->escape_string($session->usr_id).'"'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { $publis[$row['name']] = $row['url']; } $conn->free_result($rs); } $sql = 'SELECT count( id ) AS views, referrer FROM `log_view` WHERE record_id = "'.$connsbas->escape_string($rec).'" AND date > ( NOW( ) - INTERVAL 1 MONTH ) GROUP BY referrer ORDER BY referrer ASC'; $referrers = array(); if($rs = $connsbas->query($sql)) { while($row = $conn->fetch_assoc($rs)) { if($row['referrer'] == 'NO REFERRER') $row['referrer'] = _('report::acces direct'); if($row['referrer'] == GV_ServerName.'prod/') $row['referrer'] = _('admin::monitor: module production'); if($row['referrer'] == GV_ServerName.'client/') $row['referrer'] = _('admin::monitor: module client'); if(strpos($row['referrer'],GV_ServerName.'login/') !== false ) $row['referrer'] = _('report:: page d\'accueil'); if(strpos($row['referrer'],'http://apps.cooliris.com/') !== false ) $row['referrer'] = _('report:: visualiseur cooliris'); foreach($publis as $n=>$u) { if(strpos($row['referrer'],$u) !== false ) $row['referrer'] = _('report:: publication : ').$n; } if(strpos($row['referrer'],GV_ServerName.'document/') !== false ) { if(strpos($row['referrer'],'/view/') !== false) $row['referrer'] = _('report::presentation page preview'); else $row['referrer'] = _('report::acces direct'); } if(!isset($referrers[$row['referrer']])) $referrers[$row['referrer']] = 0; $referrers[$row['referrer']] += (int)$row['views']; } } $popularity .= '
'; $sql = 'SELECT count(d.id) as dwnl, DATE(d.date) as datee FROM `log_docs` d, log l WHERE action="download" AND log_id=l.id AND record_id="'.$connsbas->escape_string($rec).'" AND d.date > (NOW() - INTERVAL 1 MONTH) AND site="'.$connsbas->escape_string(GV_sit).'" GROUP BY datee ORDER BY datee ASC'; $top = 10; if($rs = $connsbas->query($sql)) { while($row = $conn->fetch_assoc($rs)) { if(isset($dwnls[$row['datee']])) { $dwnls[$row['datee']] = (int)$row['dwnl']; $top = max(((int)$row['dwnl']+10),$top); } } } $popularity .= '
'._('preview::statistiques de telechargement').'
'; } $sql = 'SELECT d . * , l.user, l.usrid as usr_id, l.site FROM log_docs d, log l WHERE d.log_id = l.id AND d.record_id = "'.$connsbas->escape_string($rec).'"'; if(!$report) $sql .= ' AND ((l.usrid ="'.$connsbas->escape_string($usr).'" AND l.site="'.$connsbas->escape_string(GV_sit).'" ) OR action="add" ) '; $sql .= 'ORDER BY d.date, usrid DESC'; $tab = array(); if($rs = $connsbas->query($sql)) { while($row = $conn->fetch_assoc($rs)) { $hour = phraseadate::getPrettyString(new DateTime($row['date'])); if(!isset($tab[$hour])) $tab[$hour] = array(); $site = $row['site']; if(!isset($tab[$hour][$site])) $tab[$hour][$site] = array(); $action = $row['action']; if(!isset($tab[$hour][$site][$action])) $tab[$hour][$site][$action] = array(); if(!isset($tab[$hour][$site][$action][$row['usr_id']])) $tab[$hour][$site][$action][$row['usr_id']] = array('final'=>array(),'comment'=>array()); if(!in_array($row['final'],$tab[$hour][$site][$action][$row['usr_id']]['final'])) $tab[$hour][$site][$action][$row['usr_id']]['final'][] = $row['final']; if(!in_array($row['comment'],$tab[$hour][$site][$action][$row['usr_id']]['comment'])) $tab[$hour][$site][$action][$row['usr_id']]['comment'][] = $row['comment']; } } $tab = array_reverse($tab); foreach($tab as $hour=>$sites) { foreach($sites as $site=>$actions) { foreach($actions as $action=>$users) { foreach($users as $user=>$done) { $historydet = ''; switch($action) { case 'push': $historydet .= sprintf(_('report::Push vers %d utilisateurs'),count($done['final'])).sprintf(_('report:: depuis lapplication box %s'),''.$site.''); break; case 'validate': $historydet .= sprintf(_('report::Demande de validation vers %d utilisateurs'),count($done['final'])).sprintf(_('report:: depuis lapplication box %s'),''.$site.''); break; case 'edit': $historydet .= _('report::Edition des meta-donnees'); break; case 'collection': $historydet .= _('report::Changement de collection vers : ').' '.implode(', ',$done['final']); break; case 'status': $historydet .= _('report::Edition des status'); break; case 'print': $historydet .= _('report::Impression des formats : ').' '.implode(', ',$done['final']); break; case 'substit': $historydet .= _('report::Substitution : ').' '.implode(', ',$done['final']); break; case 'publish': $historydet .= _('report::Publies :').' '.implode(', ',$done['final']); break; case 'download': $historydet .= _('report::Telecharges : ').' '.implode(', ',$done['final']); break; case 'mail': $historydet .= _('report::Envoi par mail aux destinataires suivants : ').' '.implode(', ',$done['comment'])._('report::Envoi des documents suivants').implode(', ',$done['final']); break; case 'ftp': $historydet .= _('report::Envoi par ftp aux destinataires suivants : ').' '.implode(', ',$done['comment'])._('report::Envoi des documents suivants').implode(', ',$done['final']); break; case 'delete': $historydet .= _('report::supression du document'); break; case 'add': $historydet .= _('report::ajout du documentt'); break; default: $historydet .= _('report::Modification du document -- je ne me souviens plus de quoi...'); break; } $history .= '
'; $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 .= ""; } } else { if($statbit["img_off"]) { $statuses .= (""); } } } } $caption = '
'.$statuses . '
' . $caption; $user = user::getInstance($session->usr_id); if(isset($user->_rights_bas[$bas]) && $user->_rights_bas[$bas]['canmodifrecord']) $caption = '
'._('action : editer').'
'.$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 .= '' . '
' . '' . '
' . '
' . '
' . '' . '
' . ' '._('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 .= ''; } $baskets = answer::getContainerBaskets($bas,$rec, $contId); if(count($baskets) > 0) { $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 .= '' . '
' . ''. '
' . '
' . '' . '
' . '
' . '
' . '' . '
' . ' '._('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 .= ''; $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.=''; $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 = 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); }