-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
389 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# spip-logos-multiples | ||
|
||
Ce plugin pour SPIP permet d’avoir plus de deux logos par objet éditorial. Mon cas d’usage est de permettre de mettre un logo desktop, un logo tablette et un logo mobile pour les sites adaptatifs. | ||
|
||
Dans la configuration du plugin, vous indiquez le nom du logo ainsi que le label correspondant, par ex : | ||
|
||
``` | ||
tablet|Logo pour tablette | ||
mobile|Logo pour mobile | ||
``` | ||
|
||
Ensuite, dans vos squelettes, vous pourrez utiliser `#LOGO_ARTICLE_TABLET` et `#LOGO_ARTICLE_MOBILE`. | ||
|
||
## Crédits | ||
|
||
La gestion des balises `#LOGO_` a été reprise du core de SPIP avec une légère adaptation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
<?php | ||
|
||
/* | ||
* Plugin Logos Multiples | ||
* (c) 2018 Julien Tessier | ||
* Parties de code issues de SPIP, Copyright (c) 2001-2017 Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James | ||
* Distribué sous licence GPL | ||
* | ||
*/ | ||
|
||
/** | ||
* Fonctions génériques pour les balises `#LOGO_XXXX` | ||
* | ||
* @package SPIP\Core\Compilateur\Balises | ||
**/ | ||
|
||
if (!defined('_ECRIRE_INC_VERSION')) { | ||
return; | ||
} | ||
|
||
|
||
/** | ||
* Compile la balise dynamique `#LOGO_xx` qui retourne le code HTML | ||
* pour afficher l'image de logo d'un objet éditorial de SPIP. | ||
* | ||
* Le type d'objet est récupéré dans le nom de la balise, tel que | ||
* `LOGO_ARTICLE` ou `LOGO_SITE`. | ||
* | ||
* Ces balises ont quelques options : | ||
* | ||
* - La balise peut aussi demander explicitement le logo normal ou de survol, | ||
* avec `LOGO_ARTICLE_NORMAL` ou `LOGO_ARTICLE_SURVOL`. | ||
* - On peut demander un logo de rubrique en absence de logo sur l'objet éditorial | ||
* demandé avec `LOGO_ARTICLE_RUBRIQUE` | ||
* - `LOGO_ARTICLE*` ajoute un lien sur l'image du logo vers l'objet éditorial | ||
* - `LOGO_ARTICLE**` retourne le nom du fichier de logo. | ||
* - `LOGO_ARTICLE{right}`. Valeurs possibles : top left right center bottom | ||
* - `LOGO_DOCUMENT{icone}`. Valeurs possibles : auto icone apercu vignette | ||
* - `LOGO_ARTICLE{200, 0}`. Redimensionnement indiqué | ||
* | ||
* @balise | ||
* @uses logo_survol() | ||
* @example | ||
* ``` | ||
* #LOGO_ARTICLE | ||
* ``` | ||
* | ||
* @param Champ $p | ||
* Pile au niveau de la balise | ||
* @return Champ | ||
* Pile complétée par le code à générer | ||
*/ | ||
function balise_LOGO_($p) { | ||
|
||
$preg = ',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE'; | ||
foreach(_logos_multiples_types() as $type => $label) { | ||
$preg .= '|_'.strtoupper($type); | ||
} | ||
$preg .= ')$,i'; | ||
preg_match($preg, $p->nom_champ, $regs); | ||
$type = strtolower($regs[1]); | ||
$suite_logo = $regs[2]; | ||
|
||
// cas de #LOGO_SITE_SPIP | ||
if ($type == 'site_spip') { | ||
$type = 'site'; | ||
$_id_objet = "\"'0'\""; | ||
} | ||
|
||
$id_objet = id_table_objet($type); | ||
if (!isset($_id_objet)) { | ||
$_id_objet = champ_sql($id_objet, $p); | ||
} | ||
|
||
$fichier = ($p->etoile === '**') ? -1 : 0; | ||
$coord = array(); | ||
$align = $lien = ''; | ||
$mode_logo = ''; | ||
|
||
if ($p->param and !$p->param[0][0]) { | ||
$params = $p->param[0]; | ||
array_shift($params); | ||
foreach ($params as $a) { | ||
if ($a[0]->type === 'texte') { | ||
$n = $a[0]->texte; | ||
if (is_numeric($n)) { | ||
$coord[] = $n; | ||
} elseif (in_array($n, array('top', 'left', 'right', 'center', 'bottom'))) { | ||
$align = $n; | ||
} elseif (in_array($n, array('auto', 'icone', 'apercu', 'vignette'))) { | ||
$mode_logo = $n; | ||
} | ||
} else { | ||
$lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle); | ||
} | ||
} | ||
} | ||
|
||
$coord_x = !$coord ? 0 : intval(array_shift($coord)); | ||
$coord_y = !$coord ? 0 : intval(array_shift($coord)); | ||
|
||
if ($p->etoile === '*') { | ||
include_spip('balise/url_'); | ||
$lien = generer_generer_url_arg($type, $p, $_id_objet); | ||
} | ||
|
||
$connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : ''; | ||
if ($type == 'document') { | ||
$qconnect = _q($connect); | ||
$doc = "quete_document($_id_objet, $qconnect)"; | ||
if ($fichier) { | ||
$code = "quete_logo_file($doc, $qconnect)"; | ||
} else { | ||
$code = "quete_logo_document($doc, " . ($lien ? $lien : "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)"; | ||
} | ||
// (x=non-faux ? y : '') pour affecter x en retournant y | ||
if ($p->descr['documents']) { | ||
$code = '(($doublons["documents"] .= ",". ' | ||
. $_id_objet | ||
. ") ? $code : '')"; | ||
} | ||
} elseif ($connect) { | ||
$code = "''"; | ||
spip_log('Les logos distants ne sont pas prevus'); | ||
} else { | ||
$code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo); | ||
} | ||
|
||
// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0} | ||
if ($coord_x or $coord_y) { | ||
$code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))"; | ||
} | ||
|
||
$p->code = $code; | ||
$p->interdire_scripts = false; | ||
|
||
return $p; | ||
} | ||
|
||
/** | ||
* Calcule le code HTML pour l'image d'un logo | ||
* | ||
* @param string $id_objet | ||
* Nom de la clé primaire de l'objet (id_article, ...) | ||
* @param string $_id_objet | ||
* Code pour la compilation permettant de récupérer la valeur de l'identifiant | ||
* @param string $type | ||
* Type d'objet | ||
* @param string $align | ||
* Alignement demandé du logo | ||
* @param int $fichier | ||
* - -1 pour retourner juste le chemin de l'image | ||
* - 0 pour retourner le code HTML de l'image | ||
* @param string $lien | ||
* Lien pour encadrer l'image avec si présent | ||
* @param Champ $p | ||
* Pile au niveau de la balise | ||
* @param string $suite | ||
* Suite éventuelle de la balise logo, telle que `_SURVOL`, `_NORMAL` ou `_RUBRIQUE`. | ||
* @return string | ||
* Code compilé retournant le chemin du logo ou le code HTML du logo. | ||
**/ | ||
function logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite) { | ||
$suite_lc = strtolower(ltrim($suite, '_')); | ||
$code = "quete_logo('$id_objet', '" . | ||
(($suite == '_SURVOL') ? 'off' : | ||
(($suite == '_NORMAL') ? 'on' : (in_array($suite_lc, array_keys(_logos_multiples_types())) ? $suite_lc : 'ON'))) . | ||
"', $_id_objet," . | ||
(($suite == '_RUBRIQUE') ? | ||
champ_sql('id_rubrique', $p) : | ||
(($type == 'rubrique') ? "quete_parent($_id_objet)" : "''")) . | ||
', ' . intval($fichier) . ')'; | ||
|
||
if ($fichier) { | ||
return $code; | ||
} | ||
|
||
// class spip_logos a supprimer ulterieurement (transition douce vers spip_logo) | ||
// cf http://core.spip.net/issues/2483 | ||
$class = 'spip_logo '; | ||
if ($align) { | ||
$class .= "spip_logo_$align "; | ||
} | ||
$class .= 'spip_logos'; | ||
$style = ''; | ||
if (in_array($align, array('left', 'right'))) { | ||
$style = "float:$align"; | ||
$align = ''; | ||
} | ||
$code = "\n((!is_array(\$l = $code)) ? '':\n (" . | ||
'"<img class=\"' . $class . '\" alt=\"\"' . | ||
($style ? " style=\\\"$style\\\"" : '') . | ||
($align ? " align=\\\"$align\\\"" : '') . | ||
' src=\"$l[0]\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src=\'$l[1]\'\" onmouseout=\"this.src=\'$l[0]\'\"" : "") . \' />\'))'; | ||
|
||
if (!$lien) { | ||
return $code; | ||
} | ||
|
||
return ('(strlen($logo=' . $code . ')?\'<a href="\' .' . $lien . ' . \'">\' . $logo . \'</a>\':\'\')'); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<div class="formulaire_spip formulaire_configurer_logos_multiples"> | ||
|
||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] | ||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] | ||
|
||
|
||
<form action='#ENV{action}' method='post'> | ||
#ACTION_FORMULAIRE{#ENV{action}} | ||
<ul> | ||
[(#SAISIE{textarea, types, label=<:saisies:option_datas_label:>, obligatoire=oui, explication=<:saisies:option_datas_explication:>})] | ||
</ul> | ||
|
||
<input type="hidden" name="_meta_casier" value="logos_multiples/config" /> | ||
|
||
<p class="boutons"><input type="submit" class="submit" value="<:valider:>" /></p> | ||
|
||
</form> | ||
|
||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
/* | ||
* Plugin Logos Multiples | ||
* (c) 2018 Julien Tessier | ||
* Distribué sous licence GPL | ||
* | ||
*/ | ||
|
||
|
||
function formulaires_configurer_logos_multiples_verifier_dist(){ | ||
$erreurs = array(); | ||
// check that mandatory fields are indeed filled out: | ||
$types = explode("\r\n", _request('types')); | ||
$erreur = ''; | ||
foreach($types as $type) { | ||
list($cle, $valeur) = explode('|', $type); | ||
if (!preg_match('/^[a-z0-0_]+$/', $cle)) { | ||
$erreur .= "Clé $cle invalide\r\n"; | ||
} | ||
} | ||
if ($erreur) $erreurs['types'] = nl2br(trim($erreur)); | ||
|
||
return $erreurs; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?php | ||
/* | ||
* Plugin Logos Multiples | ||
* (c) 2018 Julien Tessier | ||
* Distribué sous licence GPL | ||
* | ||
*/ | ||
|
||
function _logos_multiples_types() { | ||
$types = array(); | ||
include_spip('inc/config'); | ||
if ($config = lire_config('logos_multiples/config/types')) { | ||
$fond = ''; | ||
$config = explode("\r\n", $config); | ||
foreach($config as $line) { | ||
list($type, $label) = explode('|', $line); | ||
$type = strtolower(preg_replace('/[^a-z0-0_]/', '', $type)); | ||
$types[$type] = $label; | ||
} | ||
} | ||
return $types; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
<?php | ||
|
||
/* | ||
* Plugin Logos Multiples | ||
* (c) 2018 Julien Tessier | ||
* Distribué sous licence GPL | ||
* | ||
*/ | ||
|
||
function logos_multiples_recuperer_fond($flux) { | ||
if ($flux['args']['fond'] == 'formulaires/editer_logo') { | ||
$objet = $flux['args']['contexte']['objet']; | ||
$id_objet = $flux['args']['contexte']['id_objet']; | ||
$editable = $flux['args']['contexte']['_options']['editable']; | ||
|
||
if ($editable) { | ||
$extra = ''; | ||
$valider = FASLE; | ||
$chercher_logo = charger_fonction('chercher_logo', 'inc'); | ||
foreach(_logos_multiples_types() as $type => $label) { | ||
$objet = objet_type($objet); | ||
$primary = id_table_objet($objet); | ||
$erreur = ''; // @todo '<span class=\'erreur_message\'></span>' | ||
if ($logo = $chercher_logo($id_objet, $primary, $type)) { | ||
$extra .= '<div><h4 class="titre_logos_multiples">'.$label.'</h4></div>'.recuperer_fond('formulaires/inc-apercu-logo', array( | ||
'objet' => $objet, | ||
'id_objet' => $id_objet, | ||
'logo' => $logo[0], | ||
'quoi' => 'logo_'.$type, | ||
'editable' => $editable, | ||
)); | ||
} else { | ||
$valider = TRUE; | ||
$extra .= '<div class="ajouter_'.$type.'"><h4 class="titre_logos_multiples">'.$label.'</h4></div> | ||
<div> | ||
<label for="logo_'.$cle.'">'._T('info_telecharger_nouveau_logo').'</label> | ||
'.$erreur.' | ||
<input type=\'file\' class=\'file\' name=\'logo_'.$type.'\' size="12" id=\'logo_'.$type.'_'.$objet.'_'.$id_objet.'\' value="" /> | ||
</div>'; | ||
} | ||
|
||
} | ||
// si on a pas de bouton, le rajouter (par défaut SPIP masque le bouton si on a le logo normal et survol) | ||
if ($valider) { | ||
if (strpos($flux['data']['texte'], '<p class="boutons"') === FALSE) $extra .= "<p class=\"boutons\"><input type='submit' class='submit' value='"._T('bouton_upload')."' /></p>"; | ||
$flux['data']['texte'] = str_replace('class="boutons" style=\'display:none;\'', 'class="boutons"', $flux['data']['texte']); | ||
} | ||
$flux['data']['texte'] = str_replace('<!--extra-->', $extra.'<!--extra-->', $flux['data']['texte']); | ||
} | ||
} | ||
return $flux; | ||
} | ||
|
||
function logos_multiples_formulaire_traiter($flux) { | ||
if ($flux['args']['form'] == 'editer_logo') { | ||
$objet = $flux['args']['args'][0]; | ||
$id_objet = $flux['args']['args'][1]; | ||
$res = $flux['data']; | ||
include_spip('action/editer_logo'); | ||
|
||
if (!$_FILES) { | ||
$_FILES = isset($GLOBALS['HTTP_POST_FILES']) ? $GLOBALS['HTTP_POST_FILES'] : array(); | ||
} | ||
foreach (_logos_multiples_types() as $type => $label) { | ||
if (_request('supprimer_logo_'.$type)) { | ||
logo_supprimer($objet, $id_objet, $type); | ||
$res['message_ok'] = ''; // pas besoin de message : la validation est visuelle | ||
set_request('logo_up', ' '); | ||
} else if (isset($_FILES['logo_'.$type]) && $_FILES['logo_'.$type]['error'] == 0) { | ||
if ($err = logo_modifier($objet, $id_objet, $type, $_FILES['logo_'.$type])) { | ||
$res['message_erreur'] = $err; | ||
} else { | ||
$res['message_ok'] = ''; | ||
} // pas besoin de message : la validation est visuelle | ||
set_request('logo_up', ' '); | ||
} | ||
} | ||
|
||
$flux['data'] = $res; | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<paquet | ||
prefix="logos_multiples" | ||
categorie="edition" | ||
version="0.0.1" | ||
etat="dev" | ||
compatibilite="[3.2.0;3.2.*]" | ||
> | ||
<nom>Logos multiples</nom> | ||
|
||
<auteur lien="https://www.cahri.com">Julien Tessier, Agence Cahri</auteur> | ||
|
||
<licence>GNU/GPL</licence> | ||
|
||
<necessite nom="saisies" compatibilite="[2.21.4;]" /> | ||
|
||
<pipeline nom="recuperer_fond" inclure="logos_multiples_pipelines.php" /> | ||
<pipeline nom="formulaire_traiter" inclure="logos_multiples_pipelines.php" /> | ||
|
||
</paquet> |
Oops, something went wrong.