function BOUCLE_documenthtml_b8a8020987dd01f8087ad24f961857eb(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    $in = array();
    if (!is_array($a = @$Pile[0]['mode'])) {
        $in[] = $a;
    } else {
        $in = array_merge($in, $a);
    }
    if (!isset($command['table'])) {
        $command['table'] = 'documents';
        $command['id'] = '_document';
        $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_types_documents');
        $command['type'] = array();
        $command['groupby'] = array();
        $command['select'] = array("documents.id_document", "L1.titre AS type_document", "documents.taille", "documents.mode", "documents.largeur", "documents.hauteur", "documents.titre", "L1.mime_type");
        $command['orderby'] = array();
        $command['join'] = array('L1' => array('documents', 'extension'));
        $command['limit'] = '';
        $command['having'] = array();
    }
    $command['where'] = array(array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'documents.id_document', sql_quote(@$Pile[0]['id_document'], '', 'bigint(21) NOT NULL AUTO_INCREMENT')), !(is_array(@$Pile[0]['mode']) ? count(@$Pile[0]['mode']) : strlen(@$Pile[0]['mode'])) ? '' : (is_array(@$Pile[0]['mode']) ? sql_in('documents.mode', sql_quote($in)) : array('=', 'documents.mode', sql_quote(@$Pile[0]['mode'], '', 'varchar(10) NOT NULL DEFAULT \'document\''))));
    if (defined("_BOUCLE_PROFILER")) {
        $timer = time() + microtime();
    }
    $t0 = "";
    // REQUETE
    $iter = IterFactory::create("SQL", $command, array('plugins-dist/medias/modeles/img.html', 'html_b8a8020987dd01f8087ad24f961857eb', '_document', 1, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            $t0 .= '

' . vide($Pile['vars'][$_zzz = (string) 'image'] = interdire_scripts(($a = match(entites_html(sinon(table_valeur(@$Pile[0], (string) 'mode_force', null), interdire_scripts($Pile[$SP]['mode'])), true), 'image|vignette') or is_string($a) and strlen($a)) ? $a : interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'embed', null), true)) ? ' ' : '')) . (($t1 = strval(table_valeur($Pile["vars"], (string) 'image', null))) !== '' ? $t1 . ('
<span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? '
 style=\'float:' . $t2 . ';\'' : '') . '>
' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true)))) !== '' ? '<a href="' . $t2 . ('"' . (($t3 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien_class', null), true)))) !== '' ? ' class="' . $t3 . '"' : '') . '>') : '') . '<img src=\'' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))) . '\'' . (($t2 = strval(interdire_scripts($Pile[$SP]['largeur']))) !== '' ? ' width="' . $t2 . '"' : '') . (($t2 = strval(interdire_scripts($Pile[$SP]['hauteur']))) !== '' ? ' height="' . $t2 . '"' : '') . ' alt="' . interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))) . '"' . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . ' />' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '</a>' : '') . '</span>
') : '') . (!table_valeur($Pile["vars"], (string) 'image', null) ? ' ' . ('
	' . vide($Pile['vars'][$_zzz = (string) 'fichier'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'src')) . '
	' . vide($Pile['vars'][$_zzz = (string) 'width'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'width')) . '
	' . vide($Pile['vars'][$_zzz = (string) 'height'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'height')) . '
<span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? '
 style=\'float:' . $t2 . (';' . (($t3 = strval(table_valeur($Pile["vars"], (string) 'width', null))) !== '' ? ' width:' . $t3 . 'px;' : '') . '\'') : '') . '><a href="' . interdire_scripts(($a = entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) or is_string($a) and strlen($a)) ? $a : vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true)))) . '"' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '' : 'type="' . interdire_scripts($Pile[$SP]['mime_type']) . '"'))) !== '' ? '
 ' . $t2 : '') . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . '><img src=\'' . table_valeur($Pile["vars"], (string) 'fichier', null) . '\' width=\'' . table_valeur($Pile["vars"], (string) 'width', null) . '\' height=\'' . table_valeur($Pile["vars"], (string) 'height', null) . '\' alt=\'' . interdire_scripts(attribut_html(strlen(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) ? interdire_scripts(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) . ' {' . interdire_scripts($Pile[$SP]['type_document']) . '}' : interdire_scripts($Pile[$SP]['type_document']))) . '\' /></a></span>
') : '');
        }
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_document @ plugins-dist/medias/modeles/img.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}
function BOUCLE_documents_jointshtml_4dc0f36e18dd7a26ebc382429cbc9835(&$Cache, &$Pile, &$doublons, &$Numrows, $SP)
{
    static $command = array();
    static $connect;
    $command['connect'] = $connect = '';
    $in = array();
    $in[] = 'gif';
    $in[] = 'jpg';
    $in[] = 'png';
    if (!isset($command['table'])) {
        $command['table'] = 'documents';
        $command['id'] = '_documents_joints';
        $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_documents_liens', 'L2' => 'spip_types_documents');
        $command['type'] = array();
        $command['groupby'] = array();
        $command['select'] = array("0+documents.titre AS num", "documents.date", "documents.titre", "documents.id_document", "L2.titre AS type_document", "documents.taille", "documents.descriptif");
        $command['orderby'] = array('num', 'documents.date DESC');
        $command['join'] = array('L1' => array('documents', 'id_document'), 'L2' => array('documents', 'extension'));
        $command['limit'] = '';
        $command['having'] = array();
    }
    $command['where'] = array(quete_condition_statut('documents.statut', 'publie,prop,prepa', 'publie', ''), array('IN', 'documents.mode', '(\'image\',\'document\')'), array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'L1.id_objet', sql_quote(@$Pile[0]['id_rubrique'], '', 'bigint(21) NOT NULL DEFAULT \'0\'')), array('=', 'L1.objet', sql_quote('rubrique')), sql_in('documents.extension', sql_quote($in), 'NOT'), array('=', 'L1.vu', "'non'"));
    if (defined("_BOUCLE_PROFILER")) {
        $timer = time() + microtime();
    }
    $t0 = "";
    // REQUETE
    $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-rub-documents.html', 'html_4dc0f36e18dd7a26ebc382429cbc9835', '_documents_joints', 39, $GLOBALS['spip_lang']));
    if (!$iter->err()) {
        $l1 = _T('spip:info_document');
        $SP++;
        // RESULTATS
        while ($Pile[$SP] = $iter->fetch()) {
            $t1 = '
				' . (($t1 = strval(interdire_scripts(supprimer_numero(traiter_doublons_documents($doublons, typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])))))) !== '' ? '<h3 class="" style="margin-bottom: .6em;"><a href="' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))) . '">' . $t1 . '</a></h3>' : '') . '
				' . (($t1 = strval(filtrer('image_graver', filtrer('image_reduire', ($doublons["documents"] .= "," . $Pile[$SP]['id_document']) ? quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))), '', '', 0, 0, '') : '', '60', '0')))) !== '' ? '<div style="float:left;padding-right: .5em;  width:36%;">
					<div style="float:left; margin-right: .5em;">' . $t1 . ('</div>
					<small>
						' . (($t2 = strval(interdire_scripts(affdate(normaliser_date($Pile[$SP]['date']))))) !== '' ? $t2 . '<br />' : '') . '
						' . (($t2 = strval(interdire_scripts($Pile[$SP]['type_document']))) !== '' ? $l1 . ' : ' . $t2 . '<br />' : '') . '
						' . interdire_scripts(taille_en_octets($Pile[$SP]['taille'])) . '
					</small>
				</div>') : '') . '
				' . (($t1 = strval(interdire_scripts(traiter_doublons_documents($doublons, propre($Pile[$SP]['descriptif'], $connect, $Pile[0]))))) !== '' ? '<div class="" style="margin: 0 0 0 40%; border-left: 1px gray dotted;padding-left: 1em">' . $t1 . '</div>' : '') . '
		';
            $t0 .= (strlen($t1) && strlen($t0) ? '<hr style=\'clear:both\' />' : '') . $t1;
        }
        $iter->free();
    }
    if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) {
        spip_log(intval(1000 * $timer) . "ms BOUCLE_documents_joints @ squelettes/inc/inc-rub-documents.html", "profiler" . _LOG_AVERTISSEMENT);
    }
    return $t0;
}
示例#3
0
/**
 * Récupère le contenu d'un média
 * 
 * Arguments possibles :
 * -* login
 * -* pass
 * -* id_article int (Obligatoire)
 * -* champs_demandes string (champs que l'on souhaite récupérer, séparés par une virgule, sinon, on retourne l'ensemble)
 * -* document_largeur int (largeur maximale du document, si c'est une image, défaut largeur du document original)
 * -* document_hauteur int (hauteur maximale du document, si c'est une image, défaut hauteur du document original)
 * -* vignette_format string (carre ou autre, autre n'a pas de fonction)
 * -* vignette_largeur int (largeur de la vignette en px, défaut 100)
 * -* vignette_hauteur int (hauteur de la vignette en px, défaut 100)
 */
function geodiv_lire_media($args)
{
    global $spip_xmlrpc_serveur;
    if (!intval($args['id_article']) > 0) {
        $erreur = _T('xmlrpc:erreur_identifiant', array('objet' => 'article'));
        return new IXR_Error(-32601, attribut_html($erreur));
    }
    $champs_demandes = is_array($args['champs_demandes']) ? $args['champs_demandes'] : array();
    $format_vignette = $args['vignette_format'];
    $config = lire_config('geol', array());
    $secteur_medias = intval($config['secteur_medias']) > 0 ? $config['secteur_medias'] : 1;
    $args_media = array_merge($args, array('objet' => 'article', 'id_objet' => $args['id_article']));
    $res = $spip_xmlrpc_serveur->read($args_media);
    if (!$res) {
        return $spip_xmlrpc_serveur->error;
    }
    $id_secteur = $res['result'][0]['id_secteur'] ? $res['result'][0]['id_secteur'] : sql_getfetsel('id_secteur', 'spip_articles', 'id_article=' . intval($args['id_article']));
    /**
     * Sécurité : L'article demandé n'est pas un média
     */
    if ($id_secteur != $secteur_medias) {
        $erreur = _T('xmlrpc_geodiv:erreur_article_media', array('id_article' => $args['id_article']));
        return new IXR_Error(-32601, attribut_html($erreur));
    }
    /**
     * Si on demande précisément certains champs, on ne fait que les renvoyer
     */
    if (count($champs_demandes) != 0) {
        foreach ($res['result'][0] as $champ => $valeur) {
            if (!in_array($champ, array('id_article')) && !in_array($champ, $champs_demandes)) {
                unset($res['result'][0][$champ]);
            }
        }
    }
    /**
     * On ajoute le booléen "modifiable" :
     * Uniquement si on ne demande pas de champs spécifique ou qu'il soit dedans
     */
    if (count($champs_demandes) == 0 || in_array('modifiable', $champs_demandes)) {
        if (autoriser('modifier', 'id_article', $args['id_article'], $GLOBALS['visiteur_session'])) {
            $res['result'][0]['modifiable'] = 1;
        } else {
            $res['result'][0]['modifiable'] = 0;
        }
    }
    /**
     * On ajoute le logo de l'article :
     * Uniquement si on ne demande pas de champs spécifique ou qu'il soit dedans
     */
    if (count($champs_demandes) == 0 || in_array('logo', $champs_demandes)) {
        $logo = quete_logo('id_article', 'on', $res['result'][0]['id_article'], '', false);
        if (is_array($logo)) {
            $res['result'][0]['logo'] = url_absolue($logo[0]);
        }
    }
    /**
     * On a les infos de l'article, on récupère maintenant :
     * (si pas de champs demandés spécifiés ou les champs en question sont demandés)
     * -* Son document
     * -* Sa vignette
     * -* Sa géoloc
     * -* Ses mots clés
     * -** tags
     * -** échelle
     * -* Ses commentaires
     */
    /**
     * On commence par le document principal
     */
    if (count($champs_demandes) == 0 || in_array('document', $champs_demandes) || in_array('vignette', $champs_demandes)) {
        $document = sql_fetsel('*', 'spip_documents as documents LEFT JOIN spip_documents_liens AS lien ON documents.id_document=lien.id_document', 'lien.objet=' . sql_quote('article') . ' AND lien.id_objet=' . intval($args['id_article']), array(), array(), 1);
        if (is_array($document)) {
            include_spip('inc/documents');
            include_spip('inc/filtres_images_mini');
            include_spip('filtres/images_transforme');
            if (count($champs_demandes) == 0 || in_array('document', $champs_demandes)) {
                $largeur_document = $args['document_largeur'];
                $hauteur_document = $args['document_hauteur'];
                if (in_array($document['extension'], array('gif', 'png', 'jpg')) && ($largeur_document || $hauteur_document)) {
                    $res['result'][0]['document'] = url_absolue(extraire_attribut(image_reduire(get_spip_doc($document['fichier']), $largeur_document, $hauteur_document), 'src'));
                } else {
                    $res['result'][0]['document'] = url_absolue(get_spip_doc($document['fichier']));
                }
                $res['result'][0]['media'] = $document['media'];
                $res['result'][0]['extension'] = $document['extension'];
            }
            if (count($champs_demandes) == 0 || in_array('vignette', $champs_demandes)) {
                $largeur_vignette = $args['vignette_largeur'] ? $args['vignette_largeur'] : 100;
                $hauteur_vignette = $args['vignette_hauteur'] ? $args['vignette_hauteur'] : 100;
                if ($format_vignette == 'carre') {
                    $vignette = extraire_attribut(quete_logo_document($document, $lien, $align, $mode_logo, '', '', $connect = NULL), 'src');
                    $res['result'][0]['vignette'] = url_absolue(extraire_attribut(image_recadre(image_passe_partout($vignette, $largeur_vignette, $hauteur_vignette), $largeur_vignette, $hauteur_vignette), 'src'));
                } else {
                    $vignette = liens_absolus(quete_logo_document($document, $lien, $align, $mode_logo, $largeur_vignette, $hauteur_vignette, $connect = NULL));
                    $res['result'][0]['vignette'] = extraire_attribut($vignette, 'src');
                }
            }
        }
    }
    /**
     * On ajoute les auteurs
     * On met juste leur id_auteur + nom, si besoin de plus une autre requête sur l'auteur est à effectuer 
     */
    if (count($champs_demandes) == 0 || in_array('auteurs', $champs_demandes)) {
        $auteurs = sql_select('auteurs.nom, auteurs.id_auteur', 'spip_auteurs AS auteurs INNER JOIN spip_auteurs_liens AS L1 ON L1.id_auteur = auteurs.id_auteur INNER JOIN spip_articles AS L2 ON L2.id_article = L1.id_objet', "L1.objet='article' AND auteurs.statut != '5poubelle' AND L2.id_article = " . intval($res['result'][0]['id_article']));
        while ($auteur = sql_fetch($auteurs)) {
            $res['result'][0]['auteurs'][] = $auteur;
        }
    }
    /**
     * On ajoute les points de géoloc
     */
    if (defined('_DIR_PLUGIN_GIS') && count($champs_demandes) == 0 || in_array('gis', $champs_demandes)) {
        include_spip('gis_xmlrpc', 'inc');
        $tous_gis = sql_select('gis.id_gis', 'spip_gis AS `gis` INNER JOIN spip_gis_liens AS L1 ON L1.id_gis = gis.id_gis', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = ' . sql_quote('article') . ')');
        while ($gis = sql_fetch($tous_gis)) {
            $args['id_gis'] = $gis['id_gis'];
            $res['result'][0]['gis'][] = spip_lire_gis($args);
        }
    }
    /**
     * On ajoute les tags
     * On met juste leur id_mot + titr, si besoin de plus une autre requête sur le mot est à effectuer 
     */
    if (count($champs_demandes) == 0 || in_array('tags', $champs_demandes)) {
        $tags_group = intval($config['groupe_tags']) > 0 ? intval($config['groupe_tags']) : intval(lire_config('spipicious/groupe_mot'));
        if ($tags_group > 0) {
            $tous_tags = sql_select('mots.id_mot, mots.titre', 'spip_mots AS `mots` INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = "article") AND (mots.id_groupe = ' . $tags_group . ')');
            while ($tag = sql_fetch($tous_tags)) {
                $res['result'][0]['tags'][] = $tag;
            }
        }
    }
    /**
     * Et on ajoute l'échelle
     * On met juste son id_mot + titre, si besoin de plus une autre requête sur le mot est à effectuer 
     */
    if (count($champs_demandes) == 0 || in_array('echelle', $champs_demandes)) {
        $echelle_group = intval($config['groupe_echelle']) > 0 ? intval($config['groupe_echelle']) : 0;
        if ($echelle_group > 0) {
            $echelle = sql_fetsel('mots.id_mot, mots.titre', 'spip_mots AS `mots` INNER JOIN spip_mots_liens AS L1 ON ( L1.id_mot = mots.id_mot )', 'L1.id_objet = ' . intval($args['id_article']) . ' AND (L1.objet = "article") AND (mots.id_groupe = ' . $echelle_group . ')');
            if (is_array($echelle)) {
                $res['result'][0]['echelle'][] = $echelle;
            }
        }
    }
    /**
     * Et on ajoute les forums
     * On n'affiche que les forums publiés (statut publie)
     * 
     * On met juste :
     * -* id_forum
     * -* id_thread 
     * -* titre
     * -* auteur
     * -* id_auteur
     * Si besoin de plus une autre requête sur le forum est à effectuer 
     */
    if (count($champs_demandes) == 0 || in_array('forums', $champs_demandes)) {
        $forums = sql_select('id_forum, id_thread,titre,auteur,id_auteur', 'spip_forum', 'objet=' . sql_quote('article') . ' AND id_objet = ' . intval($args['id_article']) . ' AND (statut = ' . sql_quote('publie') . ')');
        while ($forum = sql_fetch($forums)) {
            $res['result'][0]['forums'][] = $forum;
        }
    }
    $media_struct = $res['result'][0];
    $media_struct = array_filter($media_struct);
    return $media_struct;
}