diff --git a/.gitattributes b/.gitattributes index e56fa239f92008e389fe71659ba3d9f65e7d8376..64e7721cf3627819fba1e8aff0a173bd704a852f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -447,6 +447,7 @@ prive/editer/article.html -text prive/editer/auteur.html -text prive/editer/breve.html -text prive/editer/groupe_mot.html -text +prive/editer/logo.html -text prive/editer/mot.html -text prive/editer/rubrique.html -text prive/editer/site.html -text @@ -465,6 +466,8 @@ prive/formulaires/editer_breve.html -text prive/formulaires/editer_breve.php -text prive/formulaires/editer_groupe_mot.html -text prive/formulaires/editer_groupe_mot.php -text +prive/formulaires/editer_logo.html -text +prive/formulaires/editer_logo.php -text prive/formulaires/editer_mot.html -text prive/formulaires/editer_mot.php -text prive/formulaires/editer_rubrique.html -text @@ -1001,6 +1004,7 @@ prive/themes/spip/images/puce-refuser-8.png -text prive/themes/spip/images/puce-supprimer-8.png -text prive/themes/spip/images/racine-16.png -text prive/themes/spip/images/racine-24.png -text +prive/themes/spip/images/reaction-48.png -text prive/themes/spip/images/referer-16.png -text prive/themes/spip/images/referer-24.png -text prive/themes/spip/images/reseau-16.png -text diff --git a/ecrire/inc/iconifier.php b/ecrire/inc/iconifier.php index e6a80a0c5c18dd311f6a2ddbd2e9a87a96ad9243..5fe2393607ed7399c2d936fa03bbff0145a528f0 100644 --- a/ecrire/inc/iconifier.php +++ b/ecrire/inc/iconifier.php @@ -25,142 +25,15 @@ $logo_libelles['id_racine'] = _T('logo_standard_rubrique')." ".aide ("rublogo"); // http://doc.spip.org/@inc_iconifier_dist function inc_iconifier_dist($id_objet, $id, $script, $visible=false, $flag_modif=true) { - if ($GLOBALS['spip_display'] == 4) return ""; - - $logo_libelles = array( - 'id_article' => _T('logo_article').aide("logoart"), - 'id_auteur' => _T('logo_auteur').aide("logoart"), - 'id_breve' => _T('logo_breve').aide("breveslogo"), - 'id_syndic' => _T('logo_site')." ".aide("rublogo"), - 'id_mot' => _T('logo_mot_cle').aide("breveslogo"), - 'id_groupe' => _T('logo_groupe').aide("breveslogo"), - 'id_rubrique'=> _T('logo_rubrique')." ".aide("rublogo"), - 'id_racine' => _T('logo_standard_rubrique')." ".aide("rublogo") - ); - - $texteon = $logo_libelles[($id OR $id_objet != 'id_rubrique') ? $id_objet : 'id_racine']; - + global $logo_libelles; $chercher_logo = charger_fonction('chercher_logo', 'inc'); - // Add the redirect url when uploading via iframe - $iframe_script = generer_url_ecrire('iconifier',"type=$id_objet&$id_objet=$id&script=$script",true); - $iframe = "<input type='hidden' name='iframe_redirect' value='".rawurlencode($iframe_script)."' />\n"; - - $logo = $chercher_logo($id, $id_objet, 'on'); - $logo_s = $chercher_logo($id, $id_objet, 'off'); - if (!$logo) { - if ($flag_modif - AND $GLOBALS['meta']['activer_logos'] != 'non') { - $masque = indiquer_logo($texteon, $id_objet, 'on', $id, $script, $iframe); - $masque = "<div class='cadre_padding'>$masque</div>"; - $bouton = bouton_block_depliable($texteon, $visible, "on-$id_objet-$id"); - $res = debut_block_depliable($visible,"on-$id_objet-$id") . $masque . fin_block(); - } - } else { - list($img, $clic) = decrire_logo($id_objet,'on',$id, 170, 170, $logo, $texteon, $script, $flag_modif AND !$logo_s); - - $bouton = bouton_block_depliable($texteon, $visible, "on-$id_objet-$id"); - - $survol = ''; - $texteoff = _T('logo_survol'); - if (!$logo = $logo_s) { - if ($flag_modif AND $GLOBALS['meta']['activer_logos_survol'] == 'oui') { - $masque = "<br />".indiquer_logo($texteoff, $id_objet, 'off', $id, $script, $iframe); - $survol .= "<br />".block_parfois_visible("off-$id_objet-$id", $texteoff, $masque, null, $visible); - } - $masque = debut_block_depliable($visible,"on-$id_objet-$id") - . "<div class='cadre_padding'>" - . $clic . $survol - . "</div>" - . fin_block(); - } else { - list($imgoff, $clicoff) = decrire_logo($id_objet, 'off', $id, 170, 170, $logo, $texteoff, $script, $flag_modif); - $masque = debut_block_depliable($visible, "off-$id_objet-$id") . $clicoff . fin_block(); - $survol .= "<br />".bouton_block_depliable($texteoff, $visible, "off-$id_objet-$id") - . "<div class='cadre_padding'>".$imgoff.$masque."</div>"; - $masque = debut_block_depliable($visible,"on-$id_objet-$id") . $clic . fin_block() . $survol; - } - - $res = "$img$masque"; - } - - if ($res) { - $res = debut_cadre('r', 'image-24.gif', '', $bouton, '', '', false) - . $res - . fin_cadre_relief(true); - - if (_request("exec") != "iconifier") { - $js.= http_script('', 'async_upload.js') - . http_script('$("form.form_upload_icon").async_upload(async_upload_icon)'); - } - else - $js = ""; - return ajax_action_greffe("iconifier", $id, $res).$js; - } - else - return ''; - -} - - -// http://doc.spip.org/@indiquer_logo -function indiquer_logo($titre, $id_objet, $mode, $id, $script, $iframe_script) { - - global $formats_logos; - $afficher = ""; - $reg = '[.](' . join('|', $formats_logos) . ')$'; - - $afficher = "\n<label for='image'>" . - _T('info_telecharger_nouveau_logo') . - "</label><br />" . - "\n<input name='image' id='image' type='file' class='forml spip_xx-small' size='15' />" . - "<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'>" . - "\n<input name='sousaction1' type='submit' value='" . - _T('bouton_telecharger') . - "' class='fondo spip_xx-small' /></div>" . - $afficher; - - $type = type_du_logo($id_objet); - return redirige_action_post('iconifier', - "$id+$type$mode$id", - $script, - "$id_objet=$id", - $iframe_script.$afficher, - " enctype='multipart/form-data' class='form_upload_icon'"); -} - -// http://doc.spip.org/@decrire_logo -function decrire_logo($id_objet, $mode, $id, $width, $height, $img, $titre="", $script="", $flag_modif=true) { - - list($fid, $dir, $nom, $format, $timestamp) = $img; - include_spip('inc/filtres_images_mini'); - - $res = image_reduire("<img src='$fid' alt='' class='miniature_logo' />", $width, $height); + $texteon = $logo_libelles[($id OR $id_objet != 'id_rubrique') ? $id_objet : 'id_racine']; + $objet = substr($id_objet,3); - if ($res){ - $src = extraire_attribut($res,'src'); - $res = inserer_attribut($res, 'src', "$src?$timestamp"); - $res = "<div><a href='" . $fid . "'>$res</a></div>"; - } - else - $res = "<img src='$fid?$timestamp' width='$width' height='$height' alt=\"" . htmlentities($titre) . '" />'; - if ($taille = @getimagesize($fid)) - $taille = _T('info_largeur_vignette', - array('largeur_vignette' => $taille[0], - 'hauteur_vignette' => $taille[1]) - ); + $img = balise_img(chemin_image('image-24.png'), "", 'cadre-icone'); + return recuperer_fond('prive/editer/logo',array('objet'=>$objet,'id_objet'=>$id, 'titre'=>$img.$texteon)); - return array($res, - "<div class='spip_xx-small'>" . $taille - . ($flag_modif - ? "\n<br />[" - . ajax_action_auteur("iconifier", "$id-$nom.$format", - $script, "$id_objet=$id&type=$id_objet", - array(_T('lien_supprimer')), - '',"function(r,status) {this.innerHTML = r; \$('form.form_upload_icon',this).async_upload(async_upload_icon);}") ."]" - : '' - ) - . "</div>"); } ?> diff --git a/prive/editer/logo.html b/prive/editer/logo.html new file mode 100644 index 0000000000000000000000000000000000000000..d519e4f9dec1511b336cd2016013548c6ec90447 --- /dev/null +++ b/prive/editer/logo.html @@ -0,0 +1,8 @@ +[(#REM) + + Un petit descriptif ne serait pas superflu + +] +<div class="ajax"> +#FORMULAIRE_EDITER_LOGO{#ENV{objet,''},#ENV{id_objet,''},#ENV{redirect,''},#ENV**} +</div> diff --git a/prive/formulaires/editer_logo.html b/prive/formulaires/editer_logo.html new file mode 100644 index 0000000000000000000000000000000000000000..60a123fb95889b34040dd83246e58da77eea1abc --- /dev/null +++ b/prive/formulaires/editer_logo.html @@ -0,0 +1,64 @@ +#CACHE{0} +<div class='formulaire_spip formulaire_editer formulaire_editer_logo formulaire_editer_logo_#ENV{objet}'> + [<h3 class="titrem">(#ENV{_options}|table_valeur{titre})</h3>] + [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] + [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] + [(#ENV{editable}) + #SET{valider,''} + <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div> + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} + [(#REM) un submit pour attraper la touche entree] + <div style="display:none;"><input type='submit' class='submit' value='<:bouton_telecharger:>' /></div> + <ul> + <li class="editer_logo_on [ (#ENV**{erreurs}|table_valeur{logo_on}|oui)erreur]"> + [(#ENV{logo_on}|oui) + <div class="apercu"> + [<div class="spip_logos">(#ENV{logo_on}|image_reduire{[(#ENV{_options}|table_valeur{image_reduire}|sinon{170})]}|inserer_attribut{alt,logo_on})</div>] + #SET{largeur,#ENV{logo_on}|largeur} + #SET{hauteur,#ENV{logo_on}|hauteur} + <div class="taille"><:info_largeur_vignette{largeur_vignette=#GET{largeur},hauteur_vignette=#GET{hauteur}}:></div> + [(#ENV{logo_off}|non) + <input type='submit' class='submit supprimer' id="supprimer_logo_on_#ENV{objet}_#ENV{id_objet}" name="supprimer_logo_on" value='<:lien_supprimer|ucfirst|attribut_html:>' /> + ] + </div> + ][(#ENV{logo_on}|non) + <label for="logo_on_#ENV{objet}_#ENV{id_objet}">[(#ENV{_options}|table_valeur{label}|sinon{<:info_telecharger_nouveau_logo:>})]</label>[ + <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{logo_on})</span> + ]<input type='file' class='file' name='logo_on' size="[(#ENV{_options}|table_valeur{size_input}|sinon{15})]" id='logo_on_#ENV{objet}_#ENV{id_objet}' value="" /> + #SET{valider,' '} + ] + </li> + [(#ENV{logo_survol}|ou{#ENV{logo_off}}|oui) + <li class="editer_logo_off [ (#ENV**{erreurs}|table_valeur{logo_off}|oui)erreur]"> + [(#ENV{logo_off}|oui) + <div class="apercu"> + <:logo_survol:> + [<div class="spip_logos">(#ENV{logo_off}|image_reduire{[(#ENV{_options}|table_valeur{image_reduire}|sinon{170})]}|inserer_attribut{alt,logo_off})</div>] + #SET{largeur,#ENV{logo_off}|largeur} + #SET{hauteur,#ENV{logo_off}|hauteur} + <div class="taille"><:info_largeur_vignette{largeur_vignette=#GET{largeur},hauteur_vignette=#GET{hauteur}}:></div> + <input type='submit' class='submit supprimer' id="supprimer_logo_off_#ENV{objet}_#ENV{id_objet}" name="supprimer_logo_off" value='<:lien_supprimer|ucfirst|attribut_html:>' /> + </div> + ][(#ENV{logo_off}|non) + <div [(#ENV**{erreurs}|table_valeur{logo_off}|non) + class="ajouter_survol"><a href="#" onclick="jQuery(this).parent().siblings().show().parents('form').find('.boutons').show();return false;"><:logo_survol:></a></div> + <div style="display:none;" #SET{hide,' '}]> + <label for="logo_off"><:info_telecharger_nouveau_logo:></label>[ + <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{logo_off})</span> + ]<input type='file' class='file' name='logo_off' size="15" id='logo_off_#ENV{objet}_#ENV{id_objet}' value="" /> + #SET{valider,' '} + </div> + ] + </li> + ] + </ul> + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + <!--extra--> + [(#GET{valider}) + <p class="boutons"[(#GET{hide})style='display:none;']><input type='submit' class='submit' value='<:bouton_telecharger:>' /></p> + ] + </div></form> + ] +</div> diff --git a/prive/formulaires/editer_logo.php b/prive/formulaires/editer_logo.php new file mode 100644 index 0000000000000000000000000000000000000000..7dd165cc75a140e6256854dbc71aea4b7cb6bdc8 --- /dev/null +++ b/prive/formulaires/editer_logo.php @@ -0,0 +1,178 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2010 * + * 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. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +/** + * Formulaire #EDITER_LOGO + * + * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP. + * - En dehors d'une boucle, ce formulaire modifie le logo du site. + * - Dans une boucle, il modifie le logo de la table selectionnee. + * Pensez juste que l'appel de #LOGO_{TYPE} s'appuie sur le nom de la cle primaire et non sur le + * nom de l'objet reel. Par exemple on ecrira #LOGO_GROUPE (et non #LOGO_GROUPEMOTS) pour afficher + * un logo issu du formulaire mis dans une boucle GROUPES_MOTS + * - il est possible de lui passer les parametres objet et id : #FORMULAIRE_EDITER_LOGO{article,1} + * - il est possible de spécifier une url de redirection apres traitement : + * ex. #FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE} + */ + +/** + * Chargement du formulaire + * + * @param string $objet Objet SPIP auquel sera lie le document (ex. article) + * @param integer $id_objet Identifiant de l'objet + * @param string $retour Url de redirection apres traitement + * @param Array $options Tableau d'option (exemple : image_reduire => 50) + * @return Array Variables d'environnement pour le fond + */ +function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $options=array()){ + if (!is_array($options)) + $options = unserialize($options); + $res = array( + 'editable'=>($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : ''), + 'logo_survol'=>($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), + 'objet'=>$objet, + 'id_objet'=>$id_objet, + '_options'=>$options + ); + // pas dans une boucle ? formulaire pour le logo du site + // dans ce cas, il faut chercher un 'siteon0.ext' + if (!$objet) + $_id_objet = 'site'; + else + $_id_objet = id_table_objet($objet); + + // rechercher le logo de l'objet + // la fonction prend un parametre '_id_objet' etrange : + // le nom de la cle primaire (et non le nom de la table) + // ou directement le nom du raccourcis a chercher + $chercher_logo = charger_fonction('chercher_logo', 'inc'); + $etats = $res['logo_survol'] ? array('on','off') : array('on'); + foreach($etats as $etat) { + $logo = $chercher_logo($id_objet, $_id_objet, $etat); + if ($logo){ + $res['logo_'.$etat] = $logo[0]; + } + } + // pas de logo_on -> pas de formulaire pour le survol + if (!isset($res['logo_on'])) + $res['logo_survol']=''; + + return $res; +} + +/** + * Verification avant traitement + * + * On verifie que l'upload s'est bien passe et + * que le document recu est une image (d'apres son extension) + * + * @param string $objet + * @param integer $id_objet + * @param string $retour + * @return Array Tableau des erreurs + */ +function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour=''){ + $erreurs = array(); + // verifier les extensions + $sources = formulaire_editer_logo_get_sources(); + foreach($sources as $etat=>$file) { + // seulement si une reception correcte a eu lieu + if ($file AND $file['error'] == 0) { + if (!in_array(strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)),array('jpg','png','gif','jpeg'))) + $erreurs['logo_'.$etat] = _L('Extension non reconnue'); + } + } + return $erreurs; +} + +/** + * Traitement de l'upload d'un logo + * + * Il est affecte au site si la balise n'est pas dans une boucle, + * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel + * + * @param string $objet + * @param integer $id_objet + * @param string $retour + * @return Array + */ +function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour=''){ + $res = array('editable'=>' '); + + // pas dans une boucle ? formulaire pour le logo du site + // dans ce cas, il faut chercher un 'siteon0.ext' + if (!$objet) + $_id_objet = 'site'; + else + $_id_objet = id_table_objet($objet); + + // supprimer l'ancien logo puis copier le nouveau + include_spip('inc/chercher_logo'); + include_spip('inc/flock'); + $type = type_du_logo($_id_objet); + $chercher_logo = charger_fonction('chercher_logo','inc'); + + // effectuer la suppression si demandee d'un logo + $on = _request('supprimer_logo_on'); + if ($on OR _request('supprimer_logo_off')){ + $logo = $chercher_logo($id_objet, $_id_objet, $on ? 'on' : 'off'); + if ($logo) + spip_unlink($logo[0]); + $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle + } + + // sinon supprimer ancien logo puis copier le nouveau + else { + include_spip('action/iconifier'); + $ajouter_image = charger_fonction('spip_image_ajouter','action'); + $sources = formulaire_editer_logo_get_sources(); + foreach($sources as $etat=>$file) { + if ($file and $file['error']==0) { + $logo = $chercher_logo($id_objet, $_id_objet, $etat); + if ($logo) + spip_unlink($logo[0]); + $ajouter_image($type.$etat.$id_objet," ",$file); + $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle + } + } + } + + if ($retour){ + include_spip('inc/headers'); + $res['redirect'] = parametre_url($retour,'var_mode','calcul'); + } + + return $res; +} + + +/** + * Extraction des sources des fichiers uploades correspondant aux 2 logos (normal + survol) + * si leur upload s'est bien passé + * + * @return Array + */ +function formulaire_editer_logo_get_sources(){ + if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES']; + if (!is_array($_FILES)) return array(); + + $sources = array(); + foreach(array('on','off') as $etat) { + if ($_FILES['logo_'.$etat]['error'] == 0) { + $sources[$etat] = $_FILES['logo_'.$etat]; + } + } + return $sources; +} +?> diff --git a/prive/style_prive_formulaires.html b/prive/style_prive_formulaires.html index 143ad6b6d8a5810abd650e27060494ace4f69047..eb200c8981a3a81e1c1df914440f3875545f43bf 100644 --- a/prive/style_prive_formulaires.html +++ b/prive/style_prive_formulaires.html @@ -501,8 +501,8 @@ padding-top:10px; * Formulaires compactes */ -.formulaire_spip_compact{ - font-size: 100%; +.formulaire_spip_compact, #navigation .formulaire_spip,#extra .formulaire_spip{ + margin-top: 20px; } .formulaire_spip_compact ul li, #navigation .formulaire_spip li,#extra .formulaire_spip li { @@ -523,7 +523,6 @@ padding-top:10px; padding-top: 3px; padding-bottom: 3px; margin-#GET{left}:0; - } .formulaire_spip_compact select,#navigation .formulaire_spip select,#extra .formulaire_spip select { font-size: 0.95em; width:auto;padding:1px 0;} @@ -563,3 +562,9 @@ input[type="submit"] { padding: 0; overflow:visible; } + +/* Cas particuliers */ +.formulaire_editer_logo {} +.formulaire_editer_logo .titrem {font-size: 1.1em;} +.formulaire_editer_logo .apercu,.formulaire_editer_logo .ajouter_survol {text-align: center;} +.formulaire_editer_logo .taille {font-size: 0.9em;} \ No newline at end of file diff --git a/prive/themes/spip/images/reaction-48.png b/prive/themes/spip/images/reaction-48.png new file mode 100644 index 0000000000000000000000000000000000000000..18ef862974ce85a1ff7f14aa4a54163c52694ce1 Binary files /dev/null and b/prive/themes/spip/images/reaction-48.png differ