Browse Source

PhpDoc complet du Porte Plume

+ suppression de vieilleries
+ utilisation du pipeline header_prive_css
3.0 v1.12.0
marcimat@rezo.net 10 years ago
parent
commit
dbc1c3b5b3
  1. 2
      .gitattributes
  2. 17
      action/porte_plume_previsu.php
  3. 38
      barre_outils/edition.php
  4. 14
      barre_outils/forum.php
  5. 44
      inc/barre.php
  6. 2
      javascript/xregexp-min.js
  7. 9
      paquet.xml
  8. 506
      porte_plume_fonctions.php
  9. 22
      porte_plume_ieconfig.php
  10. 126
      porte_plume_pipelines.php
  11. 74
      porte_plume_start.js_fonctions.php
  12. 23
      prive/porte_plume_preview_fonctions.php

2
.gitattributes vendored

@ -46,12 +46,10 @@ images/porte-plume-16.png -text
images/porte-plume-24.png -text
images/porte-plume-32.png -text
images/sources.txt -text
inc/barre.php -text
javascript/jquery.markitup.js -text
javascript/jquery.markitup_pour_spip.js -text
javascript/jquery.previsu_spip.js -text
javascript/porte_plume_forcer_hauteur.js -text
javascript/xregexp-min.js -text
lang/barreoutils.xml -text
lang/barreoutils_ar.php -text
lang/barreoutils_de.php -text

17
action/porte_plume_previsu.php

@ -1,4 +1,14 @@
<?php
/**
* Gestion de l'action porte_plume_previsu
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\Actions
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Action affichant la prévisualisation de porte plume
*
@ -9,10 +19,7 @@
* $forcer_lang=true;
* cf : ecrire/public.php ligne 80
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
function action_porte_plume_previsu_dist(){
function action_porte_plume_previsu_dist() {
// $_POST a ete sanitise par SPIP
// et le fond injecte des interdire_scripts pour empecher les injections PHP
@ -24,6 +31,6 @@ function action_porte_plume_previsu_dist(){
if (!autoriser('previsualiser','porteplume'))
$contexte = array();
echo recuperer_fond('prive/porte_plume_preview',$contexte);
echo recuperer_fond('prive/porte_plume_preview', $contexte);
}
?>

38
barre_outils/edition.php

@ -1,14 +1,18 @@
<?php
/*
* Plugin Porte Plume pour SPIP 2
* Licence GPL
* Auteur Matthieu Marcillaud
/**
* Déclaration de la barre d'outil d'édition de SPIP
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Definition de la barre 'edition' pour markitup
* Définition de la barre 'edition' pour markitup
*
* @return Barre_outils La barre d'outil
*/
function barre_outils_edition(){
$set = new Barre_outils(array(
@ -57,7 +61,7 @@ function barre_outils_edition(){
"display" => true,
"selectionType" => "word",
),
// montrer une suppression
array(
"id" => 'stroke_through',
@ -79,7 +83,7 @@ function barre_outils_edition(){
"selectionType" => "line",
"forceMultiline" => true,
"dropMenu" => array(
// liste -#
// liste -#
array(
"id" => 'liste_ol',
"name" => _T('barreoutils:barre_liste_ol'),
@ -89,7 +93,7 @@ function barre_outils_edition(){
"selectionType" => "line",
"forceMultiline" => true,
),
// desindenter
// desindenter
array(
"id" => 'desindenter',
"name" => _T('barreoutils:barre_desindenter'),
@ -99,7 +103,7 @@ function barre_outils_edition(){
"selectionType" => "line",
"forceMultiline" => true,
),
// indenter
// indenter
array(
"id" => 'indenter',
"name" => _T('barreoutils:barre_indenter'),
@ -110,10 +114,9 @@ function barre_outils_edition(){
"forceMultiline" => true,
),
),
),
),
// separation
array(
"id" => "sepLink", // trouver un nom correct !
@ -140,7 +143,7 @@ function barre_outils_edition(){
"display" => true,
"selectionType" => "word",
),
// separation
array(
@ -248,7 +251,7 @@ function barre_outils_edition(){
)
),
// separation
array(
"id" => "sepCaracteres",
@ -368,7 +371,7 @@ function barre_outils_edition(){
"name" => _T('barreoutils:barre_inserer_code'),
"className" => 'outil_code',
"openWith" => "<code>",
"closeWith" => "</code>",
"closeWith" => "</code>",
"display" => true,
"dropMenu" => array(
// bouton <cadre>
@ -484,7 +487,10 @@ function barre_outils_edition(){
/**
* Definitions des liens entre css et icones
* Définitions des liens entre css et icones
*
* @return array
* Couples identifiant de bouton => nom de l'image (ou tableau nom, position haut, position bas)
*/
function barre_outils_edition_icones(){
return array(

14
barre_outils/forum.php

@ -1,15 +1,19 @@
<?php
/*
* Plugin Porte Plume pour SPIP 2
* Licence GPL
* Auteur Matthieu Marcillaud
/**
* Déclaration de la barre d'outil de forum de SPIP
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Definition de la barre 'forum' pour markitup
* Définition de la barre 'forum' pour markitup
*
* @return Barre_outils La barre d'outil
*/
function barre_outils_forum(){
// on modifie simplement la barre d'edition

44
inc/barre.php

@ -1,44 +0,0 @@
<?php
/**
*
* Ce fichier est la uniquement pour compatibilite avec SPIP < 2.1
* Il est inutile ensuite
*
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
// construit un bouton (ancre) de raccourci avec icone et aide
// http://doc.spip.org/@bouton_barre_racc
function bouton_barre_racc($action, $img, $help, $champhelp) {
return;
}
// construit un tableau de raccourcis pour un noeud de DOM
// http://doc.spip.org/@afficher_barre
if (!function_exists('afficher_barre')) {
function afficher_barre($champ, $forum=false, $lang='') {
return;
}
}
// expliciter les 3 arguments pour avoir xhtml strict
// http://doc.spip.org/@afficher_textarea_barre
function afficher_textarea_barre($texte, $forum=false, $form='')
{
global $spip_ecran;
$rows = ($spip_ecran == "large") ? 28 : 15;
$class = 'formo' . ($forum ? ' textarea_forum':'');
return
"<textarea name='texte' id='texte' "
. " rows='$rows' class='$class' cols='40'>"
. entites_html($texte)
. "</textarea>\n";
}
?>

2
javascript/xregexp-min.js vendored

File diff suppressed because one or more lines are too long

9
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="porte_plume"
categorie="edition"
version="1.11.6"
version="1.12.0"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="images/porte-plume-32.png"
@ -23,9 +23,10 @@
<pipeline nom="porte_plume_barre_charger" action=''/>
<pipeline nom="porte_plume_lien_classe_vers_icone" action=''/>
<pipeline nom="autoriser" inclure="porte_plume_pipelines.php" />
<pipeline nom="insert_head" action="insert_head_public" inclure="porte_plume_pipelines.php" />
<pipeline nom="insert_head_css" action="insert_head_css" inclure="porte_plume_pipelines.php" />
<pipeline nom="header_prive" action="insert_head_prive" inclure="porte_plume_pipelines.php" />
<pipeline nom="insert_head" action="insert_head_public" inclure="porte_plume_pipelines.php" />
<pipeline nom="insert_head_css" action="insert_head_css" inclure="porte_plume_pipelines.php" />
<pipeline nom="header_prive" action="insert_head_prive" inclure="porte_plume_pipelines.php" />
<pipeline nom="header_prive_css" action="insert_head_prive_css" inclure="porte_plume_pipelines.php" />
<pipeline nom="affiche_milieu" inclure="porte_plume_pipelines.php" />
<pipeline nom="configurer_liste_metas" inclure="porte_plume_pipelines.php" />
<pipeline nom="ieconfig_metas" inclure="porte_plume_ieconfig.php" />

506
porte_plume_fonctions.php

@ -1,36 +1,100 @@
<?php
/*
* Plugin Porte Plume pour SPIP 2
* Licence GPL
* Auteur Matthieu Marcillaud
/**
* Fonctions utiles pour le Porte Plume
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\BarreOutils
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* La class Barre_outils est un objet contenant les differents
* parametres definissant une barre markitup
* Objet contenant les différents paramètres definissant une barre d'outils
* Markitup et permettant d'agir dessus
*
* @example
* $barre = new Barre_Outil($description);
*
* @package Plugins\PortePlume\BarreOutils
*/
class Barre_outils{
var $id = "";
var $nameSpace = "";
var $lang = "";
var $previewAutoRefresh = false;
var $previewParserPath = "";
var $onEnter = array();
var $onShiftEnter = array();
var $onCtrlEnter = array();
var $onTab = array();
var $beforeInsert = "";
var $afterInsert = "";
var $markupSet = array();
// liste de fonctions supplementaires a mettre apres le json
var $functions = "";
/**
* Identifiant HTML de la barre
* @todo À supprimer car non utilisé !
* @var string */
public $id = "";
/**
* Nom de la barre d'outil
* @var string */
public $nameSpace = "";
/**
* Langue
* @todo À supprimer car non utilisé !
* @var string */
public $lang = "";
/**
* Option de markitup : rafraîchir la prévisu ?
* @todo À supprimer car non utilisé !
* @var bool */
public $previewAutoRefresh = false;
/**
* Option de markitup : nom de la fonction de prévisu
* @todo À supprimer car on le redéfini dans l'appel javascript !
* @var bool */
public $previewParserPath = "";
/**
* Option de markitup : que faire sur l'appuie de Entrée ?
* @var array */
public $onEnter = array();
// private
var $_liste_params_autorises = array(
/**
* Option de markitup : que faire sur l'appuie de Shift+Entrée ?
* @example array('keepDefault'=>false, 'replaceWith'=>"\n_ ")
* @var array */
public $onShiftEnter = array();
/**
* Option de markitup : que faire sur l'appuie de Control+Entrée ?
* @var array */
public $onCtrlEnter = array();
/**
* Option de markitup : que faire sur l'appuie d'une tabulation ?
* @var array */
public $onTab = array();
/**
* Option de markitup : Code JS à exécuter avant une insertion
* @var string */
public $beforeInsert = "";
/**
* Option de markitup : Code JS à exécuter après une insertion
* @var string */
public $afterInsert = "";
/**
* Description des outils/boutons et leurs sous boutons éventuels
* @var array */
public $markupSet = array();
/**
* Fonctions JS supplémentaires à écrire après la déclaration JSON
* des outils. Ces fonctions peuvent servir aux boutons.
* @var string */
public $functions = "";
/**
* Liste des paramètres valides pour une description d'outils (markupSet)
* @var array */
private $_liste_params_autorises = array(
'replaceWith',
'openWith',
@ -65,10 +129,16 @@ class Barre_outils{
// donner un identifiant unique au bouton (pour le php)
'id',
);
/**
* Initialise les parametres
* @param array $params : param->valeur
* Constructeur
*
* Initialise la barre avec les paramètres transmis
* en n'adressant que les paramètres effectivement valides
*
* @api
* @param array $params Paramètres de la barre d'outil
* @return void
*/
function Barre_outils($params=array()){
foreach ($params as $p=>$v) {
@ -81,13 +151,18 @@ class Barre_outils{
}
}
}
/**
* Verifie que les parametres transmis existent
* et retourne un tableau des parametres valides
* Vérifie que les paramètres d'une clé existent
* et retourne un tableau des paramètres valides
*
* @param string $nom : cle du parametre (eventuel)
* @param array $params : parametres du parametre (param->valeur)
* @param string $nom
* Clé à vérifier (ex: 'markupSet')
* @param array $params
* Paramètres de cette clé (description des boutons ou sous boutons)
* @return array
* Paramètres, soustrait de ceux qui ne sont pas valides
*/
function verif_params($nom, $params=array()) {
// si markupset, on boucle sur les items
@ -106,40 +181,46 @@ class Barre_outils{
}
return $params;
}
/**
* Permet d'affecter des parametres a un element de la barre
* La fonction retourne les parametres, de sorte qu'on peut s'en servir pour simplement recuperer ceux-ci.
* Permet d'affecter des paramètres à un élément de la barre
*
* Il est possible d'affecter des parametres avant/apres l'element trouve
* en definisant une valeur differente pour le $lieu : 'dedans','avant','apres'
* par defaut 'dedans' (modifie l'element trouve).
* La fonction retourne les paramètres, de sorte qu'on peut s'en servir
* pour simplement récupérer ceux-ci.
*
* Lorsqu'on demande d'inserer avant ou apres, la fonction retourne les parametres inseres
* Il est possible d'affecter des paramètres avant/après l'élément trouvé
* en definisant une valeur différente pour le $lieu : 'dedans','avant','apres'
* par defaut 'dedans' (modifie l'élément trouvé).
*
* @param false/array $tableau
* tableau ou chercher les elements (sert pour la recursion)
* Lorsqu'on demande d'insérer avant ou après, la fonction retourne
* les paramètres inserés
*
* @param array $tableau
* Tableau ou chercher les elements (sert pour la recursion)
* @param string $identifiant
* identifiant du bouton a afficher
* Identifiant du bouton a afficher
* @param array $params
* parametres a affecter a la trouvaille.
* Peut etre tableau cle/valeur ou
* Tableau de tableaux cle/valeur (sauf pour $lieu = dedans)
* Paramètres à affecter à la trouvaille (ou avant ou après).
* Peut être un tableau clé/valeur ou un tableau de tableaux
* clé/valeur (sauf pour $lieu = dedans)
* @param string $lieu
* lieu d'affectation des parametres (dedans, avant, apres)
* Lieu d'affectation des paramètres (dedans, avant, apres)
* @param bool $plusieurs
* definit si $params est une forme simple (tableau cle/valeur)
* ou comporte plusieurs boutons (tableau de tableaux cle/valeur).
* Définit si $params est une forme simple (tableau cle/valeur)
* ou comporte plusieurs boutons (tableau de tableaux cle/valeur).
* @return array|bool
* Paramètres de l'élément modifié ou paramètres ajoutés
* False si l'identifiant cherché n'est pas trouvé
*/
function affecter(&$tableau, $identifiant, $params=array(), $lieu='dedans', $plusieurs=false){
static $cle_de_recherche = 'id'; // ou className ?
if ($tableau === null)
if ($tableau === null) // utile ?
$tableau = &$this->markupSet;
if (!in_array($lieu, array('dedans','avant','apres')))
$lieu = 'dedans';
// present en premiere ligne ?
$trouve = false;
foreach ($tableau as $i=>$v){
@ -173,7 +254,7 @@ class Barre_outils{
}
return $tableau[$trouve];
}
// recursivons sinon !
foreach ($tableau as $i=>$v){
if (is_array($v)) {
@ -188,12 +269,18 @@ class Barre_outils{
/**
* Permet d'affecter des parametres toutes les elements de la barre
* Permet d'affecter des paramètres à tous les éléments de la barre
* ou à une liste d'identifiants d'éléments indiqués.
*
* @param array $params : parametres a affecter a la trouvaille
* @param array $ids : tableau identifiants particuliers a qui on affecte les parametres
* si vide, tous les identifiants seront modifies
* @param false/array $tableau : tableau ou chercher les elements (sert pour la recursion)
* @param array $tableau
* Tableau où chercher les éléments
* @param array $params
* Paramètres à affecter aux éléments
* @param array $ids
* Tableau d'identifiants particuliers à qui on affecte les paramètres.
* Si vide, tous les identifiants seront modifiés
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function affecter_a_tous(&$tableau, $params=array(), $ids=array()){
if (!$params)
@ -217,69 +304,90 @@ class Barre_outils{
return true;
}
/**
* Affecte les valeurs des parametres indiques au bouton demande
* et retourne l'ensemble des parametres du bouton (sinon false)
*
* @param string/array $identifiant : id du ou des boutons a afficher
* @param array $params : param->valeur
* @return mixed
* Affecte les valeurs des paramètres indiqués au bouton demandé
* et retourne l'ensemble des paramètres du bouton (sinon false)
*
* @api
* @param string|array $identifiant
* Identifiant du ou des boutons.
* @param array $params
* Paramètres de l'ajout (tableau paramètre=>valeur)
* @return bool|array
* false si l'identifiant n'a pas été trouvé
* true si plusieurs identifiants,
* array sinon : description de l'identifiant cherché.
*/
function set($identifiant, $params=array()) {
// prudence tout de meme a pas tout modifier involontairement (si array)
if (!$identifiant) return false;
if (is_string($identifiant)) {
return $this->affecter($this->markupSet, $identifiant, $params);
}
elseif (is_array($identifiant)) {
return $this->affecter_a_tous($this->markupSet, $params, $identifiant);
}
return false;
return false;
}
/**
* Retourne les parametres du bouton demande
*
* @param string $identifiant : nom (de la classe du) bouton
* @return mixed
*
* @api
* @param string|array $identifiant
* Identifiant du ou des boutons.
* @return bool|array
* false si l'identifiant n'est pas trouvé
* array sinon : Description de l'identifiant cherché.
*/
function get($identifiant) {
if ($a = $this->affecter($this->markupSet, $identifiant)) {
return $a;
}
return false;
return false;
}
/**
* Affiche le bouton demande
*
* @param string $identifiant : nom (de la classe du) bouton a afficher
* @return true/false
* Affiche le ou les boutons demandés
*
* @api
* @param string|array $identifiant
* Identifiant du ou des boutons
* @return bool|array
* false si l'identifiant n'a pas été trouvé
* true si plusieurs identifiants,
* array sinon : description de l'identifiant cherché.
*/
function afficher($identifiant){
return $this->set($identifiant,array('display'=>true));
}
/**
* Cache le bouton demande
*
* @param string $identifiant : nom (de la classe du) bouton a afficher
* @return true/false
* Cache le ou les boutons demandés
*
* @api
* @param string|array $identifiant
* Identifiant du ou des boutons
* @return bool|array
* false si l'identifiant n'a pas été trouvé
* true si plusieurs identifiants,
* array sinon : description de l'identifiant cherché.
*/
function cacher($identifiant){
return $this->set($identifiant,array('display'=>false));
return $this->set($identifiant, array('display'=>false));
}
/**
* Affiche tous les boutons
*
* @param string $identifiant : nom (de la classe du) bouton a afficher
* @return true/false
*
* @api
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function afficherTout(){
return $this->affecter_a_tous($this->markupSet, array('display'=>true));
@ -287,9 +395,10 @@ class Barre_outils{
/**
* Cache tous les boutons
*
* @param string $identifiant : nom (de la classe du) bouton a afficher
* @return true/false
*
* @api
* @return bool
* false si aucun paramètre à affecter, true sinon.
*/
function cacherTout(){
return $this->affecter_a_tous($this->markupSet, array('display'=>false));
@ -297,78 +406,98 @@ class Barre_outils{
/**
* ajouter un bouton ou quelque chose, avant un autre deja present
*
* @param string $identifiant : identifiant du bouton ou l'on doit se situer
* Ajoute un bouton ou quelque chose, avant un autre déjà présent
*
* @api
* @param string $identifiant
* Identifiant du bouton où l'on doit se situer
* @param array $params
* Parametres de l'ajout.
* Description d'1 bouton (tableau cle/valeurs)
* Paramètres de l'ajout.
* Description d'un bouton (tableau clé/valeurs).
* @return array|bool
* Paramètres ajoutés avant
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterAvant($identifiant, $params){
return $this->affecter($this->markupSet, $identifiant, $params, 'avant');
}
/**
* ajouter plusieurs boutons, avant un autre deja present
*
* @param string $identifiant : identifiant du bouton ou l'on doit se situer
* Ajoute plusieurs boutons, avant un autre déjà présent
*
* @api
* @param string $identifiant
* Identifiant du bouton où l'on doit se situer
* @param array $tableau_params
* Parametres de l'ajout.
* Description de plusieurs boutons (tableau de tableaux cle/valeurs).
* Paramètres de l'ajout.
* Description de plusieurs boutons (tableau de tableaux clé/valeurs).
* @return array|bool
* Paramètres ajoutés avant
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterPlusieursAvant($identifiant, $tableau_params){
return $this->affecter($this->markupSet, $identifiant, $tableau_params, 'avant', true);
}
/**
* ajouter un bouton ou quelque chose, apres un autre deja present
*
* Ajoute un bouton ou quelque chose, après un autre déjà présent
*
* @api
* @param string $identifiant
* identifiant du bouton ou l'on doit se situer
* Identifiant du bouton où l'on doit se situer
* @param array $params
* parametres de l'ajout.
* Description d'1 bouton (tableau cle/valeurs)
* Paramètres de l'ajout.
* Description d'un bouton (tableau clé/valeurs).
* @return array|bool
* Paramètres ajoutés après
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterApres($identifiant, $params){
return $this->affecter($this->markupSet, $identifiant, $params, 'apres');
}
/**
* ajouter plusieurs boutons, apres un autre deja present
*
* Ajoute plusieurs boutons, après un autre déjà présent
*
* @api
* @param string $identifiant
* identifiant du bouton ou l'on doit se situer
* Identifiant du bouton où l'on doit se situer
* @param array $tableau_params
* Parametres de l'ajout.
* Description de plusieurs boutons (tableau de tableaux cle/valeurs).
* Paramètres de l'ajout.
* Description de plusieurs boutons (tableau de tableaux clé/valeurs).
* @return array|bool
* Paramètres ajoutés après
* False si l'identifiant cherché n'est pas trouvé
*/
function ajouterPlusieursApres($identifiant, $tableau_params){
return $this->affecter($this->markupSet, $identifiant, $tableau_params, 'apres', true);
}
/**
* ajouter une fonction js pour etre utilises dans les boutons
*
* @param string $fonction : code de la fonction js
* @return null
* Ajoute une fonction JS qui pourra être utilisée par les boutons
*
* @api
* @param string $fonction Code de la fonction JS
* @return void
*/
function ajouterFonction($fonction){
if (false === strpos($this->functions, $fonction)){
$this->functions .= "\n" . $fonction . "\n";
}
}
/**
* Supprimer les elements non affiches (display:false)
* Supprimer les éléments non affichés (display:false)
* Et les séparateurs (li vides) selon la configuration
*
* @param false/array $tableau : tableau a analyser (sert pour la recursion)
* @param array $tableau Tableau de description des outils
* @return void
*/
function enlever_elements_non_affiches(&$tableau){
if ($tableau === null)
if ($tableau === null) // utile ?
$tableau = &$this->markupSet;
foreach ($tableau as $p=>$v){
foreach ($tableau as $p=>$v) {
if (isset($v['display']) AND !$v['display']) {
unset($tableau[$p]);
@ -386,22 +515,21 @@ class Barre_outils{
}
}
}
}
}
/**
* Enleve les separateurs pour ameliorer l'accessibilite
* au detriment du stylage possible de ces separateurs.
* Enlève les séparateurs pour améliorer l'accessibilité
* au détriment du stylage possible de ces séparateurs.
*
* Le bouton precedent le separateur recoit une classe CSS 'separateur_avant'
* Le bouton précédent le séparateur reçoit une classe CSS 'separateur_avant'
* Celui apres 'separateur_apres'
*
* @param
* @return
* @param array Tableau de description des outils
* @return void
**/
function enlever_separateurs(&$tableau) {
if ($tableau === null)
if ($tableau === null) // utile ?
$tableau = &$this->markupSet;
foreach ($tableau as $p=>$v) {
@ -423,13 +551,13 @@ class Barre_outils{
}
}
}
/**
* Supprime les elements vides (uniquement a la racine de l'objet)
* et uniquement si chaine ou tableau.
* Supprime les éléments vides (uniquement à la racine de l'objet)
* et uniquement si chaîne ou tableau.
*
* Supprime les parametres prives
* Supprime les parametres inutiles a markitup/json dans les parametres markupSet
* Supprime les paramètres privés
* Supprime les paramètres inutiles a markitup/json dans les paramètres markupSet
* (id, display, icone)
*/
function enlever_parametres_inutiles() {
@ -454,10 +582,9 @@ class Barre_outils{
/**
* Cree la sortie json pour le javascript des parametres de la barre
* et la retourne
* Crée la sortie json pour le javascript des paramètres de la barre
*
* @return string : declaration json de la barre
* @return string claration json de la barre
*/
function creer_json(){
$barre = $this;
@ -475,13 +602,14 @@ class Barre_outils{
// lorsqu'on clique sur l'icone
include_spip('inc/charsets');
$json = unicode2charset(html2unicode($json));
return "\n\nbarre_outils_$type = ".$json . "\n\n $fonctions";
return "\n\nbarre_outils_$type = ".$json . "\n\n $fonctions";
}
/**
* Transform a variable into its javascript equivalent (recursive)
* (depuis ecrire/inc/json, mais modifie pour que les fonctions
* js ne soient pas mises dans un string
* Transforme une variable PHP dans un équivalent javascript (json)
*
* Copié depuis ecrire/inc/json, mais modifié pour que les fonctions
* JavaScript ne soient pas encapsulées dans une chaîne (string)
*
* @access private
* @param mixed the variable
@ -532,16 +660,17 @@ class Barre_outils{
}
/**
* Cette fonction cree la css pour les images
* des icones des barres d'outils
* en s'appuyant sur la description des jeux de barres disponibles.
* Crée le code CSS pour les images des icones des barres d'outils
*
* elle cherche une fonction barre_outils_($barre)_icones pour chaque
* barre et l'appelle si existe.
* S'appuie sur la description des jeux de barres disponibles et cherche
* une fonction barre_outils_($barre)_icones pour chaque barre et
* l'exécute si existe, attendant alors en retour un tableau de couples :
* nom de l'outil => nom de l'image
*
* @pipeline porte_plume_lien_classe_vers_icone
*
* @return string : declaration css des icones
* @return string Déclaration CSS des icones
*/
function barre_outils_css_icones(){
// recuperer la liste, extraire les icones
@ -562,8 +691,19 @@ function barre_outils_css_icones(){
}
}
// passer le tout dans un pipeline pour ceux qui ajoutent de simples icones a des barres existantes
$classe2icone = pipeline('porte_plume_lien_classe_vers_icone',$classe2icone);
/**
* Permettre aux plugins d'étendre les icones connues du porte plume
*
* On passe la liste des icones connues au pipeline pour ceux qui
* ajoutent de simples icones à des barres existantes
*
* @pipeline porte_plume_lien_classe_vers_icone
* @var array $classe2icone
* Couples identifiant de bouton => nom de l'image (ou tableau)
* Dans le cas d'un tableau, cela indique une sprite : (nom de l'image , position haut, position bas)
* Exemple : 'outil_header1' => array('spt-v1.png','-10px -226px')
*/
$classe2icone = pipeline('porte_plume_lien_classe_vers_icone', $classe2icone);
// passage en css
foreach ($classe2icone as $n=>$i) {
@ -581,10 +721,15 @@ function barre_outils_css_icones(){
/**
* Retourne une instance de Barre_outils
* cree a partir du type de barre demande
* crée à partir du type de barre demandé
*
* Une fonction barre_outils_{type}_dist() retournant la barre doit
* donc exister.
*
* @param string $set : type de barre
* @return object/false : objet de type barre_outil
* @param string $set
* Type de barre (ex: 'edition')
* @return Barre_Outils|bool
* La barre d'outil si la fonction a été trouvée, false sinon
*/
function barre_outils_initialiser($set){
if ($f = charger_fonction($set, 'barre_outils')) {
@ -597,13 +742,15 @@ function barre_outils_initialiser($set){
/**
* Retourne la liste des barres d'outils connues
*
* @return array/false : tableau des noms de barres trouvees
* @return array|bool
* Tableau des noms de barres d'outils trouvées
* False si on ne trouve aucune barre.
*/
function barre_outils_liste(){
static $sets = -1;
if ($sets !== -1)
return $sets;
// on recupere l'ensemble des barres d'outils connues
if (!$sets = find_all_in_path('barre_outils/','.*[.]php')
or !is_array($sets)) {
@ -611,48 +758,65 @@ function barre_outils_liste(){
$sets = false;
return $sets;
}
foreach($sets as $fichier=>$adresse) {
$sets[$fichier] = substr($fichier,0,-4); // juste le nom
}
return $sets;
return $sets;
}
/**
* filtre appliquant les traitements SPIP d'un champ (et eventuellement d'un type d'objet) sur un texte
* (voir la fonction champs_traitements($p) dans : public/references.php)
* ce mecanisme est a preferer au traditionnel #TEXTE*|propre
* traitements_previsu() consulte la globale $table_des_traitements et applique le traitement adequat
* si aucun traitement n'est trouve, alors propre() est applique
* Filtre appliquant les traitements SPIP d'un champ
*
* Applique les filtres prévus sur un champ (et eventuellement un type d'objet)
* sur un texte donné. Sécurise aussi le texte en appliquant safehtml().
*
* Ce mécanisme est à préférer au traditionnel #TEXTE*|propre
*
* @param string $texte : texte source
* @param string $nom_champ : champ (en majuscules)
* @param string $type_objet : objet (en minuscules)
* @return string : texte traite
* traitements_previsu() consulte la globale $table_des_traitements et
* applique le traitement adequat. Si aucun traitement n'est trouvé,
* alors propre() est appliqué.
*
* @package Plugins\PortePlume\Fonctions
* @see champs_traitements() dans public/references.php
* @global table_des_traitements
*
* @param string $texte
* Texte source
* @param string $nom_champ
* Nom du champ (nom de la balise, en majuscules)
* @param string $type_objet
* L'objet a qui appartient le champ (en minuscules)
* @param string $connect
* Nom du connecteur de base de données
* @return string
* Texte traité avec les filtres déclarés pour le champ.
*/
function traitements_previsu($texte, $nom_champ='', $type_objet='', $connect=null) {
include_spip('public/interfaces'); // charger les traitements
safehtml($t);
global $table_des_traitements;
if(!strlen($nom_champ) || !isset($table_des_traitements[$nom_champ])) {
if (!strlen($nom_champ) || !isset($table_des_traitements[$nom_champ])) {
$texte = propre($texte, $connect);
}
else {
include_spip('base/abstract_sql');
$table = table_objet($type_objet);
$ps = $table_des_traitements[$nom_champ];
if(is_array($ps))
if (is_array($ps)) {
$ps = $ps[(strlen($table) && isset($ps[$table])) ? $table : 0];
if(!$ps)
}
if (!$ps) {
$texte = propre($texte, $connect);
else
} else {
// remplacer le placeholder %s par le texte fourni
eval('$texte=' . str_replace('%s', '$texte', $ps) . ';');
}
}
// il faut toujours securiser le texte preivusalise car il peut contenir n'importe quoi
// il faut toujours securiser le texte prévisualisé car il peut contenir n'importe quoi
// et servir de support a une attaque xss ou vol de cookie admin
// on ne peut donc se fier au statut de l'auteur connecte car le contenu ne vient pas
// forcement de lui
// on ne peut donc se fier au statut de l'auteur connecté car le contenu ne vient pas
// forcément de lui
return safehtml($texte);
}
?>

22
porte_plume_ieconfig.php

@ -1,13 +1,31 @@
<?php
/**
* Déclarations des configurations qui peuvent être sauvegardées
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\Pipelines
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Ajoute les metas sauvegardables du porte plume pour le plugin IEConfig
*
* @pipelined ieconfig_metas
*
* @param array $table
* Déclaration des sauvegardes
* @return array
* Déclaration des sauvegardes complétées
**/
function porte_plume_ieconfig_metas($table){
$table['porte_plume']['titre'] = _T('barreoutils:info_barre_outils_public');
$table['porte_plume']['icone'] = 'porte-plume-16.png';
$table['porte_plume']['metas_brutes'] = 'barre_outils_public';
return $table;
}
?>
?>

126
porte_plume_pipelines.php

@ -1,25 +1,33 @@
<?php
/*
* Plugin Porte Plume pour SPIP 2
* Licence GPL
* Auteur Matthieu Marcillaud
*/
/**
* Déclarations d'autorisations et utilisations de pipelines
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\Pipelines
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
#define('PORTE_PLUME_PUBLIC', true);
function porte_plume_autoriser($flux){return $flux;}
/**
* Fonction du pipeline autoriser. N'a rien à faire
* @pipelined autoriser
*/
function porte_plume_autoriser(){}
/**
* Autoriser l'action de previsu : la fermer aux non identifies
* si pas de porte plume dans le public
* @param string $faire
* @param string $type
* @param int $id
* @param array $qui
* @param array $opt
* @return bool
* Autoriser l'action de previsu
*
* La fermer aux non identifiés si pas de porte plume dans le public
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
*/
function autoriser_porteplume_previsualiser_dist($faire, $type, $id, $qui, $opt){
return
@ -27,7 +35,16 @@ function autoriser_porteplume_previsualiser_dist($faire, $type, $id, $qui, $opt)
OR (!test_espace_prive() AND autoriser('afficher_public','porteplume'));
}
// autoriser le porte plume dans le public ?
/**
* Autoriser le porte plume dans l'espace public ?
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
*/
function autoriser_porteplume_afficher_public_dist($faire, $type, $id, $qui, $opt) {
// compatibilite d'avant le formulaire de configuration
if (defined('PORTE_PLUME_PUBLIC')) {
@ -39,6 +56,16 @@ function autoriser_porteplume_afficher_public_dist($faire, $type, $id, $qui, $op
# return $qui['id_auteur'] ? PORTE_PLUME_PUBLIC : false;
}
/**
* Ajout des scripts du porte-plume dans le head des pages publiques
*
* Uniquement si l'on est autorisé à l'afficher le porte plume dans
* l'espace public !
*
* @pipelined insert_head
* @param string $flux Contenu du head
* @return string Contenu du head
*/
function porte_plume_insert_head_public($flux){
include_spip('inc/autoriser');
if (autoriser('afficher_public', 'porteplume')) {
@ -47,6 +74,13 @@ function porte_plume_insert_head_public($flux){
return $flux;
}
/**
* Ajout des scripts du porte-plume dans le head des pages privées
*
* @pipelined header_prive
* @param string $flux Contenu du head
* @return string Contenu du head
*/
function porte_plume_insert_head_prive($flux){
$js = find_in_path('javascript/porte_plume_forcer_hauteur.js');
$flux = porte_plume_inserer_head($flux, $GLOBALS['spip_lang'], $prive=true)
@ -55,31 +89,51 @@ function porte_plume_insert_head_prive($flux){
return $flux;
}
/**
* Ajout des scripts du porte-plume au texte (un head) transmis
*
* @param string $flux Contenu du head
* @param string $lang Langue en cours d'utilisation
* @param bool $prive Est-ce pour l'espace privé ?
* @return string Contenu du head complété
*/
function porte_plume_inserer_head($flux, $lang, $prive = false){
$xregexp = find_in_path('javascript/xregexp-min.js');
$markitup = find_in_path('javascript/jquery.markitup_pour_spip.js');
$js_previsu = find_in_path('javascript/jquery.previsu_spip.js');
$js_start = parametre_url(generer_url_public('porte_plume_start.js'), 'lang', $lang);
if (defined('_VAR_MODE') AND _VAR_MODE=="recalcul")
$js_start = parametre_url($js_start, 'var_mode', 'recalcul');
$flux
.= porte_plume_insert_head_css('', $prive) // compat SPIP 2.0
//. "<script type='text/javascript' src='$xregexp'></script>\n" // pour IE... pff
. "<script type='text/javascript' src='$markitup'></script>\n"
$flux .=
"<script type='text/javascript' src='$markitup'></script>\n"
. "<script type='text/javascript' src='$js_previsu'></script>\n"
. "<script type='text/javascript' src='$js_start'></script>\n";
return $flux;
}
// pour charger tous les CSS avant les JS
// uniquement dans le public. (SPIP 2.1+)
// ici aussi appele depuis le prive avec le parametre $prive a true.
/**
* Ajout des CSS du porte-plume au head privé
*
* @pipelined header_prive_css
* @param string $flux Contenu du head
* @return string Contenu du head complété
*/
function porte_plume_insert_head_css($flux){
return porte_plume_insert_head_css($flux, true);
}
/**
* Ajout des CSS du porte-plume au head public
*
* Appelé aussi depuis le privé avec $prive à true.
*
* @pipelined insert_head_css
* @param string $flux Contenu du head
* @param bool $prive Est-ce pour l'espace privé ?
* @return string Contenu du head complété
*/
function porte_plume_insert_head_css($flux='', $prive = false){
static $done = false;
if ($done) return $flux;
$done = true;
include_spip('inc/autoriser');
// toujours autoriser pour le prive.
if ($prive or autoriser('afficher_public', 'porteplume')) {
@ -98,14 +152,28 @@ function porte_plume_insert_head_css($flux='', $prive = false){
return $flux;
}
// valeur par defaut des configurations
/**
* Valeur par défaut des configurations
*
* @pipelined configurer_liste_metas
* @param array $metas
* Tableaux des metas et valeurs par défaut
* @return array
* Tableaux des metas et valeurs par défaut
*/
function porte_plume_configurer_liste_metas($metas){
$metas['barre_outils_public'] = 'oui';
return $metas;
}
/**
* Ajoute le formulaire de configuration du porte-plume sur la page
* des configurations avancées.
*
* @pipelined affiche_milieu
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function porte_plume_affiche_milieu($flux){
if ($flux['args']['exec']=='configurer_avancees')
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_porte_plume'));

74
porte_plume_start.js_fonctions.php

@ -1,16 +1,28 @@
<?php
/**
* Déclarations de fonctions servant à la construction du javascript
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\Javascript
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Retourne la definition de la barre markitup designee.
* (cette declaration est au format json)
* Retourne la définition de la barre markitup désignée.
* (cette déclaration est au format json)
*
* Deux pipelines 'porte_plume_pre_charger' et 'porte_plume_charger'
* permettent de recuperer l'objet de classe Barre_outil
* permettent de récuperer l'objet de classe Barre_outil
* avant son export en json pour modifier des elements.
*
* @pipeline porte_plume_barre_pre_charger
* Charge des nouveaux boutons au besoin
* @pipeline porte_plume_barre_charger
* Affiche ou cache certains boutons
*
* @return string : declaration json
* @return string claration json
*/
function porte_plume_creer_json_markitup(){
// on recupere l'ensemble des barres d'outils connues
@ -19,39 +31,49 @@ function porte_plume_creer_json_markitup(){
return null;
}
// 1 on initialise tous les jeux de barres
// 1) On initialise tous les jeux de barres
$barres = array();
foreach($sets as $set) {
if (($barre = barre_outils_initialiser($set)) AND is_object($barre))
$barres[$set] = $barre;
}
// 2 prechargement
// charge des nouveaux boutons au besoin
// exemples :
// $barre = &$flux['spip'];
// $barre->ajouterApres('bold',array(params));
// $barre->ajouterAvant('bold',array(params));
//
// $bold = $barre->get('bold');
// $bold['id'] = 'bold2';
// $barre->ajouterApres('italic',$bold);
// 2) Préchargement
/**
* Charger des nouveaux boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->ajouterApres('bold',array(params));
* $barre->ajouterAvant('bold',array(params));
*
* $bold = $barre->get('bold');
* $bold['id'] = 'bold2';
* $barre->ajouterApres('italic',$bold);
* @pipeline porte_plume_barre_pre_charger
*/
$barres = pipeline('porte_plume_barre_pre_charger', $barres);
// 3 chargement
// permet de cacher ou afficher certains boutons au besoin
// exemples :
// $barre = &$flux['spip'];
// $barre->afficher('bold');
// $barre->cacher('bold');
//
// $barre->cacherTout();
// $barre->afficher(array('bold','italic','header1'));
// 3) Chargement
/**
* Cacher ou afficher certains boutons au besoin
*
* @example
* $barre = &$flux['spip'];
* $barre->afficher('bold');
* $barre->cacher('bold');
*
* $barre->cacherTout();
* $barre->afficher(array('bold','italic','header1'));
* @pipeline porte_plume_barre_charger
*/
$barres = pipeline('porte_plume_barre_charger', $barres);
// 4 on cree les jsons
// 4 On crée les jsons
$json = "";
foreach($barres as $set=>$barre) {
$json .= $barre->creer_json();

23
prive/porte_plume_preview_fonctions.php

@ -1,11 +1,26 @@
<?php
/**
* Fonctions pour la prévisualisation
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package Plugins\PortePlume\Fonctions
**/
if (!defined('_ECRIRE_INC_VERSION')) return;
// retourner le charset SQL si on le connait, en priorite
// sinon, on utilise le charset de l'affichage HTML.
// Cependant, on peut forcer un charset donne avec une constante :
// define('PORTE_PLUME_PREVIEW_CHARSET','utf-8');
/**
* Retourner le charset SQL
*
* Retourne le charset SQL si on le connait, en priorité
* sinon, on utilise le charset de l'affichage HTML.
*
* Cependant, on peut forcer un charset donné avec une constante :
* define('PORTE_PLUME_PREVIEW_CHARSET','utf-8');
*
* @return string Nom du charset (ex: 'utf-8')
*/
function filtre_pp_charset() {
if (defined('PORTE_PLUME_PREVIEW_CHARSET')) {
return PORTE_PLUME_PREVIEW_CHARSET;

Loading…
Cancel
Save