Newer
Older

cedric@yterium.com
a validé
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2014 *

cedric@yterium.com
a validé
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/

marcimat@rezo.net
a validé
/**
* Fonctions utiles pour les squelettes et déclarations de boucle
* pour le compilateur
*
* @package SPIP\Medias\Fonctions
**/

cedric@yterium.com
a validé

marcimat@rezo.net
a validé
// sécurité

cedric@yterium.com
a validé
if (!defined('_ECRIRE_INC_VERSION')) return;

cedric@yterium.com
a validé
// nettoyer les zip abandonnes par l'utilisateur
if (isset($GLOBALS['visiteur_session']['zip_to_clean'])
AND test_espace_prive()

cedric@yterium.com
a validé
AND $_SERVER['REQUEST_METHOD']!=='POST'){
$zip_to_clean = unserialize($GLOBALS['visiteur_session']['zip_to_clean']);
if ($zip_to_clean){
foreach ($zip_to_clean as $zip){
if (@file_exists($zip))
@unlink($zip);
}
}
session_set('zip_to_clean');
}

cedric@yterium.com
a validé
// capturer un formulaire POST plus grand que post_max_size

cedric@yterium.com
a validé
// on genere un minipres car on ne peut rien faire de mieux
if (isset($_SERVER['REQUEST_METHOD'])
AND $_SERVER['REQUEST_METHOD']=='POST'

cedric@yterium.com
a validé
AND empty($_POST)
AND strlen($_SERVER['CONTENT_TYPE'])>0
AND strncmp($_SERVER['CONTENT_TYPE'],'multipart/form-data', 19)==0
AND $_SERVER['CONTENT_LENGTH']>medias_inigetoctets('post_max_size')){

cedric@yterium.com
a validé
include_spip('inc/minipres');
echo minipres(_T('medias:upload_limit',array('max' => ini_get('post_max_size'))));
exit;
}
/**
* Retourne la taille en octet d'une valeur de configuration php
*
* @param string $var
* Clé de configuration ; valeur récupérée par `ini_get()`. Exemple `post_max_size`
* @return int|string
* Taille en octet, sinon chaine vide.
**/

cedric@yterium.com
a validé
function medias_inigetoctets($var){
$last = '';
$val = trim(@ini_get($var));

marcimat@rezo.net
a validé
if (is_numeric($val)) {
return $val;
}
// en octet si "32M"
if ($val !='' ){

cedric@yterium.com
a validé
$last = strtolower($val[strlen($val)-1]);

marcimat@rezo.net
a validé
$val = substr($val, 0, -1);

cedric@yterium.com
a validé
}
switch ($last) { // The 'G' modifier is available since PHP 5.1.0
case 'g': $val *= 1024;
case 'm': $val *= 1024;
case 'k': $val *= 1024;
}
return $val;
}

cedric@yterium.com
a validé
/**
* Afficher la puce de statut pour les documents
*
* @param int $id_document
* Identifiant du document
* @param string $statut
* Statut du document
* @return string
* Code HTML de l'image de puce

cedric@yterium.com
a validé
*/
function medias_puce_statut_document($id_document, $statut){
if ($statut=='publie') {
$puce='puce-verte.gif';
}
else if ($statut == "prepa") {
$puce = 'puce-blanche.gif';
}
else if ($statut == "poubelle") {
$puce = 'puce-poubelle.gif';
}
else
$puce = 'puce-blanche.gif';
return http_img_pack($puce, $statut, "class='puce'");
}

marcimat@rezo.net
a validé
/**
* Compile la boucle `DOCUMENTS` qui retourne une liste de documents multimédia

marcimat@rezo.net
a validé
*
* `<BOUCLE(DOCUMENTS)>`
*
* @param string $id_boucle
* Identifiant de la boucle
* @param array $boucles
* AST du squelette
* @return string
* Code PHP compilé de la boucle
**/

cedric@yterium.com
a validé
function boucle_DOCUMENTS($id_boucle, &$boucles) {

cedric@yterium.com
a validé
$boucle = &$boucles[$id_boucle];
$id_table = $boucle->id_table;
// on ne veut pas des fichiers de taille nulle,
// sauf s'ils sont distants (taille inconnue)
array_unshift($boucle->where,array("'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'"));

kent1@arscenic.info
a validé
/**
* N'afficher que les modes de documents que l'on accepte
* Utiliser le "pipeline medias_documents_visibles" pour en ajouter
*/

cedric@yterium.com
a validé
if (!isset($boucle->modificateur['criteres']['mode'])

rastapopoulos@spip.org
a validé
AND !isset($boucle->modificateur['tout'])) {

kent1@arscenic.info
a validé
$modes = pipeline('medias_documents_visibles',array('image','document'));
$f = sql_serveur('quote', $boucle->sql_serveur, true);

kent1@arscenic.info
a validé
$modes = addslashes(join(',', array_map($f, array_unique($modes))));
array_unshift($boucle->where,array("'IN'", "'$id_table.mode'", "'($modes)'"));

cedric@yterium.com
a validé
}
return calculer_boucle($id_boucle, $boucles);
}

cedric@yterium.com
a validé

cedric@yterium.com
a validé
/**
* Pour compat uniquement, utiliser generer_lien_entite
* @deprecated
* @uses generer_lien_entite()
*

cedric@yterium.com
a validé
* @param int $longueur
* @param null $connect
* @return string
*/

gilles.vincent@gmail.com
a validé
function lien_objet($id, $type, $longueur = 80, $connect = NULL){

cedric@yterium.com
a validé
return generer_lien_entite($id,$type,$longueur,$connect);

cedric@yterium.com
a validé
}

cedric@yterium.com
a validé
/**
* critere {orphelins} selectionne les documents sans liens avec un objet editorial
*
* @param string $idb
* @param object $boucles
* @param object $crit
*/

cedric@yterium.com
a validé
function critere_DOCUMENTS_orphelins_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$cond = $crit->cond;
$not = $crit->not?"":"NOT";
$select = sql_get_select("DISTINCT id_document","spip_documents_liens as oooo");
$where = "'".$boucle->id_table.".id_document $not IN ($select)'";

cedric@yterium.com
a validé
if ($cond){
$_quoi = '@$Pile[0]["orphelins"]';
$where = "($_quoi)?$where:''";
}

cedric@yterium.com
a validé
$boucle->where[]= $where;
}

cedric@yterium.com
a validé
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/**
* critere {portrait} qui selectionne
* - les documents dont les dimensions sont connues
* - les documents dont la hauteur est superieure a la largeur
*
* {!portrait} exclus ces documents
*
* @param string $idb
* @param object $boucles
* @param object $crit
*/
function critere_DOCUMENTS_portrait_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$table = $boucle->id_table;
$not = ($crit->not?"NOT ":"");
$boucle->where[] = "'$not($table.largeur>0 AND $table.hauteur > $table.largeur)'";
}
/**
* critere {paysage} qui selectionne
* - les documents dont les dimensions sont connues
* - les documents dont la hauteur est inferieure a la largeur
*
* {!paysage} exclus ces documents
*
* @param string $idb
* @param object $boucles
* @param object $crit
*/
function critere_DOCUMENTS_paysage_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$table = $boucle->id_table;
$not = ($crit->not?"NOT ":"");
$boucle->where[] = "'$not($table.largeur>0 AND $table.largeur > $table.hauteur)'";
}
/**
* critere {carre} qui selectionne
* - les documents dont les dimensions sont connues
* - les documents dont la hauteur est egale a la largeur
*
* {!carre} exclus ces documents
*
* @param string $idb
* @param object $boucles
* @param object $crit
*/
function critere_DOCUMENTS_carre_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$table = $boucle->id_table;
$not = ($crit->not?"NOT ":"");
$boucle->where[] = "'$not($table.largeur>0 AND $table.largeur = $table.hauteur)'";
}

marcimat@rezo.net
a validé
/**
* Calcule la vignette d'une extension (l'image du type de fichier)
*
* Utile dans une boucle DOCUMENTS pour afficher une vignette du type
* du document (balise `#EXTENSION`) alors que ce document a déjà une vignette
* personnalisée (affichable par `#LOGO_DOCUMENT`).

marcimat@rezo.net
a validé
*
* @example
* `[(#EXTENSION|vignette)]` produit une balise `<img ... />`
* `[(#EXTENSION|vignette{true})]` retourne le chemin de l'image

marcimat@rezo.net
a validé
*
* @param string $extension
* L'extension du fichier, exemple : png ou pdf
* @param bool $get_chemin
* false pour obtenir une balise img de l'image,
* true pour obtenir seulement le chemin du fichier
* @return string
* Balise HTML <img...> ou chemin du fichier
**/

gilles.vincent@gmail.com
a validé
function filtre_vignette_dist($extension = 'defaut', $get_chemin = false) {

marcimat@rezo.net
a validé
static $vignette = false;
static $balise_img = false;
if (!$vignette) {
$vignette = charger_fonction('vignette', 'inc');
$balise_img = charger_filtre('balise_img');
}
$fichier = $vignette($extension, false);
// retourne simplement le chemin du fichier
if ($get_chemin) {
return $fichier;
}
// retourne une balise <img ... />
return $balise_img($fichier);
}