escape_string($ssel_id).'"'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) $published[] = $row['publi_id']; $conn->free_result($rs); } } return $published; } public static function getForm($ssel_id = false) { $conn = connection::getInstance(); $error = ''; if($ssel_id) { $sql = 'SELECT count(sselcont_id) as n FROM sselcont WHERE ssel_id ="'.$conn->escape_string($ssel_id).'"'; if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) if($row['n'] == '0') $error = _('panier :: vous ne pouvez publier un panier vide'); $conn->free_result($rs); } } ob_start(null, 0); $sql = 'SELECT public, pub_restrict FROM ssel WHERE ssel_id = "'.$conn->escape_string($ssel_id).'"'; $public = $pub_restrict = '0'; if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) { $public = $row['public']; $pub_restrict = $row['pub_restrict']; } } ?>
name="publi[]" value="default" id="publi_default" type="checkbox"/>
name="options[default]" value="HD" style="margin-left:20px" type="checkbox" id="publi_default_hd"/>
$p) { ?>
type="checkbox" name="publi[]" id="publi_" value=""/> tester supprimer
'; } ?>
$error,'datas'=>ob_get_clean()); } public static function getAvalaible() { $ret = array(); $conn = connection::getInstance(); $path = dirname(__FILE__) . '/publi/'; if(($dir = opendir( $path )) !== false) { while(($file=readdir($dir)) !== false) { $substr = substr($file,0,-10); $classname = 'publi_'.$substr; if(is_file($path.$file) && trim($substr) !== '') { $pub = new $classname(); $ret[$substr] = $pub->requiredFields(); } } } return $ret; } public static function getPersonnal() { $ret = array(); $conn = connection::getInstance(); $session = session::getInstance(); $sql = 'SELECT * 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)) { $ret[$row['publi_id']] = $row; } $conn->num_rows($rs); } return $ret; } public static function testPubliPreset($publi_id) { $publis = self::getPersonnal(); if(!isset($publis[$publi_id])) return false; $classname = 'publi_'.$publis[$publi_id]['type']; $publi = new $classname(); return $publi->test($publis[$publi_id]); } public static function deletePubliPreset($publi_id, $ssel_id) { $conn = connection::getInstance(); $publis = self::getPersonnal(); if(!isset($publis[$publi_id])) return false; $ret = false; $sql = 'DELETE FROM publi_settings WHERE publi_id="'.$conn->escape_string($publi_id).'"'; if($conn->query($sql)) $ret = true; $sql = 'DELETE FROM published WHERE publi_id="'.$conn->escape_string($publi_id).'"'; $conn->query($sql); $form = self::getForm($ssel_id); return p4string::jsonencode(array('status'=>$ret, 'text'=>$form['datas'])); } function addPubliPreset($serialdatas,$ssel_id) { $datas = array(); $serialdatas = explode('&',urldecode($serialdatas)); foreach($serialdatas as $k=>$d) { $serialdatas[$k] = explode('=',$d); if(count($serialdatas[$k]) == 2) $datas[$serialdatas[$k][0]] = $serialdatas[$k][1]; } $ret = array('status'=>0,'text'=>''); if(isset($datas['pname']) && trim($datas['pname']) !== '') { $classname = 'publi_'.$datas['pname']; try { $publisher = new $classname(); foreach($publisher->requiredFields() as $k=>$f) { if(!isset($datas[$k])) { $ret['status'] = -3; $ret['text'] = _('phraseanet:: required fields'); break; } $ret['status'] = 1; } }catch(Exception $e){ } if($ret['status'] === 1) { if($publisher->test($datas)) { if($publisher->savePreset($datas)) { $form = self::getForm($ssel_id); if($form['error'] == '') $ret['text'] = $form['datas']; else { $ret['status'] = -1; $ret['text'] = _('phraseanet:: error saving datas'); } } else { $ret['status'] = -1; $ret['text'] = _('phraseanet:: error saving datas'); } } else { $ret['status'] = -2; $ret['text'] = _('phraseanet:: error write-test datas'); } } } return p4string::jsonencode($ret); } function publishBasket($ssel_id,$status) { $session = session::getInstance(); if(!($ph_session = phrasea_open_session($session->ses_id,$session->usr_id))) return; $conn = connection::getInstance(); $ret = 'error'; if($conn) { $publi = $options = $unpubli = array(); $sql = 'SELECT DISTINCT s.publi_id FROM publi_settings s, published p WHERE s.usr_id = null OR s.usr_id="'.$conn->escape_string($session->usr_id).'" AND s.publi_id = p.publi_id AND p.ssel_id="'.$conn->escape_string($ssel_id).'"'; $unpubli['default'] = 'default'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) $unpubli[$row['publi_id']] = $row['publi_id']; $conn->free_result($rs); } $status = explode('&',urldecode($status)); foreach($status as $s) { $s = explode('=',$s); if(count($s) == 2) { if($s[0] == 'publi[]') $publi[] = $s[1]; if(isset($unpubli[$s[1]])) unset($unpubli[$s[1]]); if(substr($s[0],0,8) == 'options[') { if(!isset($options[substr($s[0],8,-1)])) $options[substr($s[0],8,-1)] = array(); $options[substr($s[0],8,-1)][$s[1]] = 1; } } } $sql = "SELECT distinct sbasusr.bas_chupub,sbasusr.sbas_id FROM (usr NATURAL JOIN basusr) INNER JOIN bas ON basusr.base_id=bas.base_id INNER JOIN sbasusr on sbasusr.usr_id='" . $conn->escape_string($session->usr_id). "' and sbasusr.sbas_id=bas.sbas_id WHERE usr.usr_id='" . $conn->escape_string($session->usr_id). "' and actif=1"; $usrRight = array(); if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { if($row["bas_chupub"] == "1") $usrRight[] = $row["sbas_id"]; } $conn->free_result($rs); } $isOk = false; $sql = "SELECT distinct b.sbas_id FROM bas b, sselcont c, ssel s WHERE s.usr_id = '".$conn->escape_string($session->usr_id)."' AND s.ssel_id='".$conn->escape_string($ssel_id)."' AND c.ssel_id = s.ssel_id AND b.base_id = c.base_id"; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { if(!in_array($row['sbas_id'],$usrRight)) { $isOk = false; break; } $isOk = true; } $conn->free_result($rs); } if(count($publi) == 0 && count($unpubli) == 0) p4string::jsonencode(array('status'=>'1')); if($isOk) { foreach($publi as $pub) { $o = false; if(isset($options[$pub])) $o = $options[$pub]; if(self::publi($ssel_id, $pub,$o)) { if($ret == 'error') $ret = '1'; } else $ret = '0'; if(isset($unpubli[$pub])) unset($unpubli[$pub]); } foreach($unpubli as $pub) { if(self::unpublish($ssel_id, $pub)) { if($ret == 'error') $ret = '1'; } else $ret = '0'; } } } return p4string::jsonencode(array('status'=>$ret)); } public static function unpublish($ssel_id, $pub_id) { $conn = connection::getInstance(); $ret = false; if($pub_id == 'default') { $sql = 'UPDATE ssel SET public="0", pub_restrict="0" WHERE ssel_id = "'.$conn->escape_string($ssel_id).'"'; if($conn->query($sql)) $ret = true; $sql = 'SELECT b.*, c.base_id, c.record_id FROM sselcont c, bas b WHERE c.ssel_id = "'.$conn->escape_string($ssel_id).'" AND c.base_id = b.base_id ORDER BY sbas_id ASC'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { answer::logEvent(phrasea::sbasFromBas($row['base_id']),$row['record_id'],'unpublish','public',''); } } // self::clear_feeds_cache($ssel_id); $sql = 'DELETE FROM sselnew WHERE ssel_id="'.$conn->escape_string($ssel_id).'"'; $conn->query($sql); } else { $sql = 'SELECT * FROM publi_settings WHERE publi_id="'.$conn->escape_string($pub_id).'"'; if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) { $classname = 'publi_'.$row['type']; $obj = new $classname(); if($obj->unpublish($row, $ssel_id)) { $ret = true; $sql = 'DELETE FROM published WHERE ssel_id = "'.$conn->escape_string($ssel_id).'" AND publi_id = "'.$conn->escape_string($pub_id).'"'; $conn->query($sql); } } } } return $ret; } // private static function clear_feeds_cache($ssel_id) // { // // $feed_cache = cache_feed::getInstance(); // $conn = connection::getInstance(); // $feed_cache->delete('_internalpubli_'.$session->usr_id); // // $sql = 'SELECT distinct usr_id FROM sselnew WHERE ssel_id = "'.$ssel_id.'"'; // // if($rs = $conn->query($sql)) // { // while($row = $conn->fetch_assoc($rs)) // { // $feed_cache->delete('_internalpubli_'.$row['usr_id']); // } // $conn->free_result($rs); // } // // return; // } private static function publi($ssel_id, $pub_id, $options) { $conn = connection::getInstance(); $session = session::getInstance(); $ret = false; if($pub_id == 'default') { $sql = 'UPDATE ssel SET public="1", pub_restrict="1", pub_date=NOW() WHERE ssel_id = "'.$conn->escape_string($ssel_id).'"'; if(isset($options['HD']) && $options['HD'] == '1') { $sql = 'UPDATE ssel SET public="1", pub_restrict="0", pub_date=NOW() WHERE ssel_id = "'.$conn->escape_string($ssel_id).'"'; } if($conn->query($sql)) $ret = '1'; $sql = 'SELECT b.*, c.base_id, c.record_id FROM sselcont c, bas b WHERE c.ssel_id = "'.$conn->escape_string($ssel_id).'" AND c.base_id = b.base_id ORDER BY sbas_id ASC'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { answer::logEvent(phrasea::sbasFromBas($row['base_id']),$row['record_id'],'publish','public',''); } } $params = array( 'from' => $session->usr_id ,'ssel_id' => $ssel_id ); $events_mngr = eventsmanager::getInstance(); $events_mngr->trigger('__INTERNAL_PUBLI__',$params); $sql = 'INSERT INTO sselnew (SELECT DISTINCT null, "'.$conn->escape_string($ssel_id).'", usr_id FROM basusr WHERE base_id IN (SELECT distinct base_id FROM sselcont WHERE ssel_id="'.$conn->escape_string($ssel_id).'"))'; $ret = $conn->query($sql); // self::clear_feeds_cache($ssel_id); } else { $sql = 'SELECT * FROM publi_settings WHERE publi_id="'.$pub_id.'"'; if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) { $classname = 'publi_'.$row['type']; $obj = new $classname(); $ret = $obj->publish($row, $ssel_id); } } } return $ret; } function prepare($ssel_id) { $titre = $desc = ''; $conn = connection::getInstance(); $sql = 'SELECT * FROM ssel WHERE ssel_id="'.$conn->escape_string($ssel_id).'"'; if($rs = $conn->query($sql)) { if($row = $conn->fetch_assoc($rs)) { $titre = $row['name']; $desc = $row['descript']; } $conn->free_result($rs); } $images = ''; $sql = 'SELECT c.*, b.sbas_id FROM sselcont c, bas b WHERE c.base_id = b.base_id AND ssel_id="'.$conn->escape_string($ssel_id).'"'; if($rs = $conn->query($sql)) { while($row = $conn->fetch_assoc($rs)) { $connSbas = connection::getInstance($row['sbas_id']); if($connSbas) { $sql2 = 'SELECT sha256 FROM record WHERE record_id = "'.$connSbas->escape_string($row['record_id']).'" '; if($rs2 = $connSbas->query($sql2)) { if($row2 = $connSbas->fetch_assoc($rs2)) { $sha256 = $row2['sha256']; } $connSbas->free_result($rs2); } if(isset($sha256)) { $url = GV_ServerName."document/".$row['base_id']."/".$row['record_id']."/".$sha256."/"; $images .= ' '; } } } $conn->free_result($rs); } $desc .= $images; return array('desc'=>$desc,'titre'=>$titre); } function save($ssel_id, $publi_id, $post_id) { $conn = connection::getInstance(); $sql = 'INSERT INTO published (ssel_id, publi_id, post_id) VALUES ("'.$conn->escape_string($ssel_id).'", "'.$conn->escape_string($publi_id).'","'.$conn->escape_string($post_id).'")'; if($conn->query($sql)) { return true; } return false; } }