PSR et indentation

pull/2/head
Cerdic 2 years ago
parent 9a35f7e923
commit e159bfcc66

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -11,12 +12,11 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
function action_skeleditor_delete_dist(){
function action_skeleditor_delete_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$file_name = $securiser_action();
if (autoriser('supprimer', 'squelette', $file_name)){
if (autoriser('supprimer', 'squelette', $file_name)) {
spip_unlink($file_name);
}
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,15 +7,15 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_skeleditor_dl_dist(){
function action_skeleditor_dl_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$file_name = $securiser_action();
if (autoriser('download', 'squelette', $file_name)){
if (autoriser('download', 'squelette', $file_name)) {
include_spip('inc/livrer_fichier');
spip_livrer_fichier($file_name, 'application/octet-stream', ['attachment' => true]);
exit;

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,38 +7,36 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function action_skeleditor_new_from_dist(){
function action_skeleditor_new_from_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
// $arg est le fichier que l'on veut personaliser
if (strncmp($arg, _DIR_RACINE, strlen(_DIR_RACINE)!==0)){
if (strncmp($arg, _DIR_RACINE, strlen(_DIR_RACINE) !== 0)) {
$arg = _DIR_RACINE . $arg;
}
include_spip('inc/skeleditor');
$file = skeleditor_nom_copie($arg);
if ($file){
if ($file) {
include_spip('inc/skeleditor');
$path_base = skeleditor_path_editable();
list($chemin,) = skeleditor_cree_chemin($path_base, $file);
if ($chemin){
if ($chemin) {
$file = basename($file);
if (!file_exists($chemin . $file)){
if (!file_exists($chemin . $file)) {
lire_fichier($arg, $contenu);
ecrire_fichier($chemin . $file, skeleditor_commente_copie($arg, $contenu));
}
if (file_exists($f = $chemin . $file)){
if (file_exists($f = $chemin . $file)) {
$GLOBALS['redirect'] = parametre_url(_request('redirect'), 'f', $f);
}
}
}
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,36 +7,36 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/skeleditor');
function formulaires_creer_squelette_charger_dist($path_base){
$valeurs = array('filename' => '');
function formulaires_creer_squelette_charger_dist($path_base) {
$valeurs = ['filename' => ''];
$valeurs['editable'] = autoriser('creerdans', 'squelette', $path_base);
return $valeurs;
}
function formulaires_creer_squelette_verifier_dist($path_base){
$erreurs = array();
function formulaires_creer_squelette_verifier_dist($path_base) {
$erreurs = [];
$filename = _request('filename');
if ($e = skeleditor_verifie_nouveau_nom($path_base, $filename)){
if ($e = skeleditor_verifie_nouveau_nom($path_base, $filename)) {
$erreurs['filename'] = $e;
}
return $erreurs;
}
function formulaires_creer_squelette_traiter_dist($path_base){
$res = array();
function formulaires_creer_squelette_traiter_dist($path_base) {
$res = [];
$filename = _request('filename');
if (ecrire_fichier($path_base . $filename, "")){
$res = array('message_ok' => _T('ok'), 'redirect' => parametre_url(self(), 'f', $path_base . $filename));
if (ecrire_fichier($path_base . $filename, '')) {
$res = ['message_ok' => _T('ok'), 'redirect' => parametre_url(self(), 'f', $path_base . $filename)];
} else {
$res['message_erreur'] = _T('skeleditor:erreur_ecriture_fichier');
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,7 +7,7 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -25,9 +26,9 @@ include_spip('inc/skeleditor');
* @param string $fichier
* @return array
*/
function formulaires_editer_squelette_charger_dist($path_base, $fichier){
function formulaires_editer_squelette_charger_dist($path_base, $fichier) {
$valeurs = array(
$valeurs = [
'fichier' => $fichier,
'date' => '',
'size' => '',
@ -36,10 +37,10 @@ function formulaires_editer_squelette_charger_dist($path_base, $fichier){
'_hidden' => '',
'_info_copie' => '',
'editable' => true
);
];
if ($fichier){
if (!file_exists($fichier)){
if ($fichier) {
if (!file_exists($fichier)) {
$valeurs['editable'] = false;
$valeurs['message_erreur'] = _T('skeleditor:erreur_fichier_inexistant');
$valeurs['fichier'] = '';
@ -47,7 +48,7 @@ function formulaires_editer_squelette_charger_dist($path_base, $fichier){
}
include_spip('inc/autoriser');
if (!autoriser('voir', 'squelette', $fichier)){
if (!autoriser('voir', 'squelette', $fichier)) {
$valeurs['editable'] = false;
$valeurs['message_erreur'] = _T('skeleditor:erreur_type_interdit');
$valeurs['fichier'] = '';
@ -56,22 +57,23 @@ function formulaires_editer_squelette_charger_dist($path_base, $fichier){
$valeurs['date'] = filemtime($fichier);
$valeurs['size'] = filesize($fichier);
if (autoriser('modifier', 'squelette', $fichier)
and strncmp($fichier, $path_base, strlen($path_base))==0){
if (
autoriser('modifier', 'squelette', $fichier)
and strncmp($fichier, $path_base, strlen($path_base)) == 0
) {
$valeurs['filename'] = substr($fichier, strlen($path_base));
if (!is_writable($fichier)){
if (!is_writable($fichier)) {
$valeurs['editable'] = false;
}
} // pour le renommage
elseif (strncmp($fichier, $path_base, strlen($path_base))!=0) {
elseif (strncmp($fichier, $path_base, strlen($path_base)) != 0) {
// c'est une copie dans le dossier squelettes/
$valeurs['filename'] = skeleditor_nom_copie($fichier);
$valeurs['_hidden'] .= "<input type='hidden' name='copie_squelette' value='" . $valeurs['filename'] . "' />";
$filename_copie = joli_repertoire($path_base) . $valeurs['filename'];
$valeurs['_info_copie'] = _T('skeleditor:info_copie_fichier', array('file' => $filename_copie));
$valeurs['_info_copie'] = _T('skeleditor:info_copie_fichier', ['file' => $filename_copie]);
}
}
else {
if (!autoriser('creerdans', 'squelette', $path_base)) {
@ -89,39 +91,39 @@ function formulaires_editer_squelette_charger_dist($path_base, $fichier){
return $valeurs;
}
function formulaires_editer_squelette_verifier_dist($path_base, $fichier){
$erreurs = array();
function formulaires_editer_squelette_verifier_dist($path_base, $fichier) {
$erreurs = [];
if ($fichier){ // cas d'une modif
if (!file_exists($fichier)){
if ($fichier) { // cas d'une modif
if (!file_exists($fichier)) {
$erreurs['code'] = _T('skeleditor:erreur_fichier_supprime');
} // fichier supprime entre temps
else {
if (!_request('copie_squelette') and !autoriser('modifier', 'squelette', $fichier)){
if (!_request('copie_squelette') and !autoriser('modifier', 'squelette', $fichier)) {
$erreurs['code'] = _T('skeleditor:erreur_fichier_modif_interdite');
} else {
list($content, $type, $ctrl) = skeleditor_get_file_content_type_ctrl($fichier);
if ($ctrl!=_request('ctrl_md5')){
if ($ctrl != _request('ctrl_md5')) {
// fichier modifie entre temps
$erreurs['code'] = _T('skeleditor:erreur_fichier_modif_coucourante');
if ($type=='txt'){
if ($type == 'txt') {
$erreurs['code'] .=
"<textarea readonly='readonly' cols='80' rows='30'>$content</textarea>"
. _T('skeleditor:erreur_fichier_modif_coucourante_votre_version');
}
}
if ($filename = _request('filename') and $path_base . $filename!=$fichier){
if ($e = skeleditor_verifie_nouveau_nom($path_base, $filename, $type=='img')){
if ($filename = _request('filename') and $path_base . $filename != $fichier) {
if ($e = skeleditor_verifie_nouveau_nom($path_base, $filename, $type == 'img')) {
$erreurs['filename'] = $e;
}
}
}
}
} else { // creation d'un fichier
if (!$filename = _request('filename')){
if (!$filename = _request('filename')) {
$erreurs['filename'] = _T('info_obligatoire');
} else {
if (!autoriser('creerdans', 'squelette', $path_base)){
if (!autoriser('creerdans', 'squelette', $path_base)) {
$erreurs['filename'] = _T('skeleditor:erreur_sansgene');
} elseif ($e = skeleditor_verifie_nouveau_nom($path_base, $filename)) {
$erreurs['filename'] = $e;
@ -133,18 +135,18 @@ function formulaires_editer_squelette_verifier_dist($path_base, $fichier){
}
function formulaires_editer_squelette_traiter_dist($path_base, $fichier){
$res = array();
if ($fichier){
function formulaires_editer_squelette_traiter_dist($path_base, $fichier) {
$res = [];
if ($fichier) {
list($content, $type, $ctrl) = skeleditor_get_file_content_type_ctrl($fichier);
if ($type=='txt'){
if ($type == 'txt') {
$code = _request('code');
if (_request('copie_squelette')){
if (_request('copie_squelette')) {
$code = skeleditor_commente_copie($fichier, $code);
$fichier = $path_base . _request('filename');
$res['redirect'] = parametre_url(self(), 'f', $fichier);
}
if (ecrire_fichier($fichier, $code)){
if (ecrire_fichier($fichier, $code)) {
$res['message_ok'] = _T('skeleditor:fichier_enregistre');
} else {
$res['message_erreur'] = _T('skeleditor:erreur_ecriture_fichier');
@ -155,16 +157,18 @@ function formulaires_editer_squelette_traiter_dist($path_base, $fichier){
$fichier = $dest;
$res['redirect'] = parametre_url(self(), 'f', $fichier);
}
if (!isset($res['message_erreur'])
if (
!isset($res['message_erreur'])
and $filename = _request('filename')
and $path_base . $filename!=$fichier
and autoriser('modifier', 'squelette', $fichier)){
if (rename($fichier, $path_base . $filename)){
and $path_base . $filename != $fichier
and autoriser('modifier', 'squelette', $fichier)
) {
if (rename($fichier, $path_base . $filename)) {
$res['redirect'] = parametre_url(self(), 'f', $path_base . $filename);
}
}
} elseif ($filename = _request('filename')) {
if (ecrire_fichier($path_base . $filename, "")){
if (ecrire_fichier($path_base . $filename, '')) {
$res['message_ok'] = _T('skeleditor:fichier_enregistre');
$res['redirect'] = parametre_url(self(), 'f', $path_base . $filename);
}
@ -172,4 +176,3 @@ function formulaires_editer_squelette_traiter_dist($path_base, $fichier){
return $res;
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,7 +7,7 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -46,25 +47,25 @@ function inc_bigup_medias_formulaire_upload_squelette_dist($args, $formulaire) {
* @param string $fichier
* @return array
*/
function formulaires_upload_squelette_charger_dist($path_base){
function formulaires_upload_squelette_charger_dist($path_base) {
$valeurs = array(
$valeurs = [
'fichier_upload' => '',
'editable' => true,
'_path_base' => $path_base,
'_bigup_rechercher_fichiers' => true,
'_multiple' => ' ',
);
];
return $valeurs;
}
function formulaires_upload_squelette_verifier_dist($path_base){
function formulaires_upload_squelette_verifier_dist($path_base) {
$erreurs = [];
$res = skeleditor_check_upload($path_base);
if (is_string($res)){
if (is_string($res)) {
$erreurs['fichier_upload'] = $res;
} elseif (!count($res)) {
$erreurs['fichier_upload'] = _T('skeleditor:erreur_fichier_inexistant');
@ -74,22 +75,21 @@ function formulaires_upload_squelette_verifier_dist($path_base){
}
function formulaires_upload_squelette_traiter_dist($path_base){
function formulaires_upload_squelette_traiter_dist($path_base) {
$files = skeleditor_check_upload($path_base);
$ok = true;
//spip_log($files, 'skeleditor' . _LOG_DEBUG);
$erreurs = [];
include_spip('inc/documents');
foreach ($files as $file){
if (!deplacer_fichier_upload($file['tmp_name'], $path_base . $file['name'], true)){
$erreurs[] = "Erreur lors du deplacement du fichier " . $file['name'] . " dans $path_base";
foreach ($files as $file) {
if (!deplacer_fichier_upload($file['tmp_name'], $path_base . $file['name'], true)) {
$erreurs[] = 'Erreur lors du deplacement du fichier ' . $file['name'] . " dans $path_base";
$ok = false;
}
}
if ($ok){
if ($ok) {
$res['message_ok'] = 'ok';
$url_redirect = parametre_url(self(), 'f', $path_base . $file['name']);
$url_redirect = parametre_url($url_redirect, 'upload', 'non', '&');
@ -103,24 +103,22 @@ function formulaires_upload_squelette_traiter_dist($path_base){
}
function skeleditor_check_upload($path_base){
function skeleditor_check_upload($path_base) {
static $files;
if (is_null($files)) {
include_spip('inc/joindre_document');
$files = skeleditor_trouver_http_post_files();
spip_log($files, 'skeleditor');
if (is_array($files)){
foreach ($files as $file){
if ($e = skeleditor_verifie_nouveau_nom($path_base, $file['name'], true)){
if (is_array($files)) {
foreach ($files as $file) {
if ($e = skeleditor_verifie_nouveau_nom($path_base, $file['name'], true)) {
return $e;
}
}
}
}
return $files;
@ -128,7 +126,7 @@ function skeleditor_check_upload($path_base){
/**
* Récupérer et mettre en forme la liste des fichiers postes
* Récupérer et mettre en forme la liste des fichiers postes
* que ce soit via plusieurs input file ou via un input file multiple
*
* @see joindre_trouver_http_post_files
@ -182,4 +180,3 @@ function skeleditor_trouver_http_post_files($name = null) {
return $files;
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,43 +7,44 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
define('_SE_EXTENSIONS_IMG', "jpg|png|gif|ico|bmp|svg");
define('_SE_EXTENSIONS', _SE_EXTENSIONS_IMG . "|htm|html|xml|yaml|json|php|py|sh|sql|css|scss|less|rdf|txt|nfo|log|js|as|csv");
define('_SE_EXTENSIONS_IMG', 'jpg|png|gif|ico|bmp|svg');
define('_SE_EXTENSIONS', _SE_EXTENSIONS_IMG . '|htm|html|xml|yaml|json|php|py|sh|sql|css|scss|less|rdf|txt|nfo|log|js|as|csv');
/**
* Determiner le dossier de travail
*
* @return string
*/
function skeleditor_path_editable(){
function skeleditor_path_editable() {
static $path = null;
if (!is_null($path)){
if (!is_null($path)) {
return $path;
}
// charger les plugin qui peuvent definir un squelette
if (@is_readable(_DIR_SESSIONS . "charger_plugins_fonctions.php")){
if (@is_readable(_DIR_SESSIONS . 'charger_plugins_fonctions.php')) {
// chargement optimise precompile
include_once(_DIR_SESSIONS . "charger_plugins_fonctions.php");
include_once(_DIR_SESSIONS . 'charger_plugins_fonctions.php');
}
$c = creer_chemin();
while (count($c)){
while (count($c)) {
$d = array_shift($c);
if ($path and strncmp($d, $path, strlen($d))!==0){
if ($path and strncmp($d, $path, strlen($d)) !== 0) {
break;
}
if (strncmp($d, _DIR_PLUGINS, strlen(_DIR_PLUGINS))!==0
and strncmp($d, _DIR_PLUGINS_DIST, strlen(_DIR_PLUGINS_DIST))!==0
and strncmp($d, _DIR_RACINE . 'prive/', strlen(_DIR_RACINE . 'prive/'))!==0
and strncmp($d, _DIR_RACINE . 'squelettes-dist', strlen(_DIR_RACINE . 'squelettes-dist'))!==0
and $d!==_DIR_RACINE
and (!defined('_DIR_SITE') or $d!==_DIR_SITE)
if (
strncmp($d, _DIR_PLUGINS, strlen(_DIR_PLUGINS)) !== 0
and strncmp($d, _DIR_PLUGINS_DIST, strlen(_DIR_PLUGINS_DIST)) !== 0
and strncmp($d, _DIR_RACINE . 'prive/', strlen(_DIR_RACINE . 'prive/')) !== 0
and strncmp($d, _DIR_RACINE . 'squelettes-dist', strlen(_DIR_RACINE . 'squelettes-dist')) !== 0
and $d !== _DIR_RACINE
and (!defined('_DIR_SITE') or $d !== _DIR_SITE)
and sous_repertoire($d, '', false, true)
){
) {
$path = $d;
}
}
@ -52,10 +54,10 @@ function skeleditor_path_editable(){
// Traiter le cas des sites mutualises
$dir_squelettes_site = (defined('_DIR_SITE')) ? _DIR_SITE : _DIR_RACINE;
if (!$path or defined('_DIR_SITE')){
$path = sous_repertoire($dir_squelettes_site, "squelettes", false, true);
if (!$path or defined('_DIR_SITE')) {
$path = sous_repertoire($dir_squelettes_site, 'squelettes', false, true);
// sous_repertoire renvoie '' en cas d'echec
if ($path==''){
if ($path == '') {
$path = null;
}
}
@ -70,12 +72,12 @@ function skeleditor_path_editable(){
* @param null|string $path
* @return array
*/
function skeleditor_files_editables($path = null){
if (is_null($path)){
function skeleditor_files_editables($path = null) {
if (is_null($path)) {
$path = skeleditor_path_editable();
}
if (!$path){
return array();
if (!$path) {
return [];
}
$files_editable = preg_files($path, '[.](' . _SE_EXTENSIONS . ')$');
@ -94,15 +96,15 @@ function skeleditor_files_editables($path = null){
* @param string $root
* @return array
*/
function skeleditor_sort_directory_first($files, $root_path = null){
function skeleditor_sort_directory_first($files, $root_path = null) {
if (is_null($root_path)) {
$root_path = skeleditor_path_editable();
}
$files_root = array();
$files_directory = array();
foreach ($files as $file){
if (dirname($file) . "/" !== $root_path){
$files_root = [];
$files_directory = [];
foreach ($files as $file) {
if (dirname($file) . '/' !== $root_path) {
$files_directory[] = $file;
} else {
$files_root[] = $file;
@ -112,12 +114,12 @@ function skeleditor_sort_directory_first($files, $root_path = null){
return array_merge($files_directory, $files_root);
}
function skeleditor_get_file_content_type_ctrl($fichier){
if (!$fichier){
function skeleditor_get_file_content_type_ctrl($fichier) {
if (!$fichier) {
$type = 'txt';
$content = '';
$ctrl = md5($content);
} elseif (preg_match(",(" . _SE_EXTENSIONS_IMG . ")$,ims", $fichier)) {
} elseif (preg_match(',(' . _SE_EXTENSIONS_IMG . ')$,ims', $fichier)) {
$type = 'img';
$ctrl = md5(filemtime($fichier));
$content = null;
@ -126,28 +128,30 @@ function skeleditor_get_file_content_type_ctrl($fichier){
lire_fichier($fichier, $content);
$ctrl = md5($content);
}
return array($content, $type, $ctrl);
return [$content, $type, $ctrl];
}
function skeleditor_verifie_nouveau_nom($path_base, $filename, $img = false){
$erreur = "";
if (strpos($filename, '../')!==FALSE){
function skeleditor_verifie_nouveau_nom($path_base, $filename, $img = false) {
$erreur = '';
if (strpos($filename, '../') !== false) {
$erreur = _T('skeleditor:erreur_sansgene'); // fichier existe deja
} elseif (file_exists($path_base . $filename)) {
$erreur = _T('skeleditor:erreur_overwrite');
} // fichier existe deja
else {
if (!preg_match(",[.](" . _SE_EXTENSIONS . ")$,i", $filename)
or (!$img and preg_match(",[.](" . _SE_EXTENSIONS_IMG . ")$,i", $filename))){
if (
!preg_match(',[.](' . _SE_EXTENSIONS . ')$,i', $filename)
or (!$img and preg_match(',[.](' . _SE_EXTENSIONS_IMG . ')$,i', $filename))
) {
$erreur = _T('skeleditor:erreur_type_interdit');
} else {
list($chemin, $echec) = skeleditor_cree_chemin($path_base, $filename);
if (!$chemin){
if (!is_dir($echec)){
$erreur = _T('skeleditor:erreur_creation_sous_dossier', array('dir' => joli_repertoire("$echec")));
if (!$chemin) {
if (!is_dir($echec)) {
$erreur = _T('skeleditor:erreur_creation_sous_dossier', ['dir' => joli_repertoire("$echec")]);
} else {
$erreur = _T('skeleditor:erreur_ecrire_dans_sous_dossier', array('dir' => joli_repertoire("$echec")));
$erreur = _T('skeleditor:erreur_ecrire_dans_sous_dossier', ['dir' => joli_repertoire("$echec")]);
}
}
}
@ -155,18 +159,18 @@ function skeleditor_verifie_nouveau_nom($path_base, $filename, $img = false){
return $erreur;
}
function skeleditor_cree_chemin($path_base, $file){
function skeleditor_cree_chemin($path_base, $file) {
$chemin = $path_base;
$sous = explode('/', $file);
$filename = array_pop($sous); // inutilise ici
$chemin_ok = "";
while ($chemin and count($sous) and $s = array_shift($sous)){
$chemin_ok = '';
while ($chemin and count($sous) and $s = array_shift($sous)) {
$chemin_ok = $chemin;
$chemin = sous_repertoire($chemin, $s, false, true);
}
return array($chemin, $chemin ? '' : "$chemin_ok$s");
return [$chemin, $chemin ? '' : "$chemin_ok$s"];
}
/**
@ -177,18 +181,18 @@ function skeleditor_cree_chemin($path_base, $file){
* @param string $source
* @return string
*/
function skeleditor_nom_copie($source){
$file = "";
function skeleditor_nom_copie($source) {
$file = '';
// cas particulier des squelettes obtenus par scaffolding
if (strncmp($source, _DIR_CACHE . "scaffold/", $l = strlen(_DIR_CACHE . "scaffold/"))==0){
if (strncmp($source, _DIR_CACHE . 'scaffold/', $l = strlen(_DIR_CACHE . 'scaffold/')) == 0) {
return substr($source, $l);
}
$spip_path = creer_chemin();
$spip_path = array_diff($spip_path, array(_DIR_RACINE));
$spip_path = array_diff($spip_path, [_DIR_RACINE]);
$spip_path[] = _DIR_RACINE;
foreach ($spip_path as $dir){
if (strncmp($source, $dir, strlen($dir))==0){
foreach ($spip_path as $dir) {
if (strncmp($source, $dir, strlen($dir)) == 0) {
$possible = substr($source, strlen($dir));
if (!$file or strlen($possible) < strlen($file)) {
$file = $possible;
@ -205,19 +209,18 @@ function skeleditor_nom_copie($source){
* @param string $content
* @return string
*/
function skeleditor_commente_copie($source, $content){
function skeleditor_commente_copie($source, $content) {
/* preparer un commenaite */
$comment = _T('skeleditor:copy_comment', array('date' => date('Y-m-d H:i:s'), 'nom' => $GLOBALS['visiteur_session']['nom'], 'source' => joli_repertoire($source)));
$comment = _T('skeleditor:copy_comment', ['date' => date('Y-m-d H:i:s'), 'nom' => $GLOBALS['visiteur_session']['nom'], 'source' => joli_repertoire($source)]);
$infos = pathinfo($source);
if (in_array($infos['extension'], array('php', 'php3', 'php4', 'php5', 'php6', 'css', 'js', 'as'))){
if (in_array($infos['extension'], ['php', 'php3', 'php4', 'php5', 'php6', 'css', 'js', 'as'])) {
$comment = "/*\n$comment\n*/\n";
} elseif ($infos['extension']==_EXTENSION_SQUELETTES and preg_match(',(<BOUCLE|<INCLU[RD]E|#ENV|#ID_|#REM|#INCLU[RD]E|#TITRE|#[F-Z][A-Z]*),Ums', $content)) {
} elseif ($infos['extension'] == _EXTENSION_SQUELETTES and preg_match(',(<BOUCLE|<INCLU[RD]E|#ENV|#ID_|#REM|#INCLU[RD]E|#TITRE|#[F-Z][A-Z]*),Ums', $content)) {
$comment = "[(#REM)\n$comment\n]\n";
} elseif (in_array($infos['extension'], array('htm', 'html', 'xml', 'svg', 'rdf'))) {
} elseif (in_array($infos['extension'], ['htm', 'html', 'xml', 'svg', 'rdf'])) {
$comment = "<!--\n$comment\n-->\n";
} else {
$comment = '';
}
return $comment . $content;
}

@ -1,4 +1,5 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
@ -6,7 +7,7 @@
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
@ -16,13 +17,13 @@ if (!defined('_ECRIRE_INC_VERSION')){
* @param string $extension
* @return array
*/
function skeleditor_inline_inc($extension){
if (!$extension){
return array("", "");
function skeleditor_inline_inc($extension) {
if (!$extension) {
return ['', ''];
}
$dir = _DIR_PLUGIN_SKELEDITOR;
$css = $js = "";
$css = $js = '';
switch ($extension) {
case 'sh':
case 'txt':
@ -33,19 +34,19 @@ function skeleditor_inline_inc($extension){
break;
case 'as':
case 'js':
$mode = array("javascript");
$mode = ['javascript'];
// autoMatchParens: true
break;
case 'css':
case 'scss':
case 'less':
$mode = array("css");
$mode = ['css'];
break;
case 'xml':
case 'yaml':
case 'svg':
case 'rdf':
$mode = array("xml");
$mode = ['xml'];
#continuousScanning: 500,
break;
/*
@ -57,10 +58,10 @@ function skeleditor_inline_inc($extension){
case 'py':
$parsers = array("../contrib/python/js/parsepython.js");
$css = array("css/pythoncolors.css");
# lineNumbers: true,
# textWrapping: false,
# indentUnit: 4,
# parserConfig: {'pythonVersion': 2, 'strictErrors': true}
# lineNumbers: true,
# textWrapping: false,
# indentUnit: 4,
# parserConfig: {'pythonVersion': 2, 'strictErrors': true}
break;
*/
case 'php':
@ -69,21 +70,21 @@ function skeleditor_inline_inc($extension){
// break;
case 'htm':
default:
$mode = array("xml", "htmlmixed", "css", "javascript", "clike", "php");
$mode = ['xml', 'htmlmixed', 'css', 'javascript', 'clike', 'php'];
break;
}
foreach ($mode as $m){
foreach ($mode as $m) {
$test = $dir . "codemirror/mode/$m/$m";
if (file_exists($f = $test . ".css")){
if (file_exists($f = $test . '.css')) {
$css .= "<link rel='stylesheet' href='$f' type='text/css' />\n";
}
if (file_exists($f = $test . ".js")){
if (file_exists($f = $test . '.js')) {
$js .= "<script src='$f' type='text/javascript'></script>\n";
}
}
return array($css, $js);
return [$css, $js];
}
/**
@ -92,8 +93,8 @@ function skeleditor_inline_inc($extension){
*
* @return array
*/
function skeleditor_codemirror_boot(){
$css = $js = "";
function skeleditor_codemirror_boot() {
$css = $js = '';
$dir = _DIR_PLUGIN_SKELEDITOR;
lire_fichier(find_in_path('javascript/codemirror.addons.json'), $json);
@ -104,25 +105,25 @@ function skeleditor_codemirror_boot(){
$js .= "<script src='" . $dir . "codemirror/lib/codemirror.js' type='text/javascript'></script>\n";
// Charger le/les themes
foreach ($assets['themes'] as $theme){
if (file_exists($f = $dir . "codemirror/theme/" . $theme . ".css")){
foreach ($assets['themes'] as $theme) {
if (file_exists($f = $dir . 'codemirror/theme/' . $theme . '.css')) {
$css .= "<link rel='stylesheet' href='" . $f . "' type='text/css' />\n";
}
}
// Charger les addons
foreach ($assets['extensions'] as $ext){
if (file_exists($e = find_in_path($ext . ".js"))){
foreach ($assets['extensions'] as $ext) {
if (file_exists($e = find_in_path($ext . '.js'))) {
$js .= "<script src='" . $e . "' type='text/javascript'></script>\n";
}
}
// Charger les addons
foreach ($assets['addons'] as $addon){
if (file_exists($s = $dir . "codemirror/addon/" . $addon . ".css")){
foreach ($assets['addons'] as $addon) {
if (file_exists($s = $dir . 'codemirror/addon/' . $addon . '.css')) {
$css .= "<link rel='stylesheet' href='" . $s . "' type='text/css' />\n";
}
if (file_exists($j = $dir . "codemirror/addon/" . $addon . ".js")){
if (file_exists($j = $dir . 'codemirror/addon/' . $addon . '.js')) {
$js .= "<script src='" . $j . "' type='text/javascript'></script>\n";
}
}
@ -130,7 +131,7 @@ function skeleditor_codemirror_boot(){
// Surcharger si besoin
$css .= "<link rel='stylesheet' href='" . find_in_path('css/skeleditor.css') . "' type='text/css' />\n";
return array($css, $js);
return [$css, $js];
}
/**
@ -139,9 +140,9 @@ function skeleditor_codemirror_boot(){
* @param string $extension
* @return string
*/
function skeleditor_codemirror_determine_mode($extension){
$mode = "";
$modes = array(
function skeleditor_codemirror_determine_mode($extension) {
$mode = '';
$modes = [
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
@ -151,8 +152,8 @@ function skeleditor_codemirror_determine_mode($extension){
'js' => 'javascript', //codemirror2 ne doit pas avoir de mode d<>finit pour les js
'json' => 'application/json',
'xml' => 'application/xml',
);
if (array_key_exists($extension, $modes)){
];
if (array_key_exists($extension, $modes)) {
$mode = $modes[$extension];
}
return $mode;
@ -165,9 +166,9 @@ function skeleditor_codemirror_determine_mode($extension){
* @param bool $editable
* @return string
*/
function skeleditor_codemirror($filename, $editable = true){
if (!$filename){
return "";
function skeleditor_codemirror($filename, $editable = true) {
if (!$filename) {
return '';
}
$infos = pathinfo($filename);
@ -182,11 +183,13 @@ function skeleditor_codemirror($filename, $editable = true){
. $modecss
. $corejs
. $modejs
. "<script src='" . find_in_path("javascript/codemirror_init.js") . "' type='text/javascript'></script>\n";
. "<script src='" . find_in_path('javascript/codemirror_init.js') . "' type='text/javascript'></script>\n";
// compresser le tout si possible !
if (include_spip('compresseur_fonctions')
and function_exists('compacte_head')){
if (
include_spip('compresseur_fonctions')
and function_exists('compacte_head')
) {
$script = compacte_head($script);
}

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<ruleset>
<file>.</file>
<exclude-pattern>vendor/*</exclude-pattern>
<exclude-pattern>lib/*</exclude-pattern>
<exclude-pattern>codemirror/*</exclude-pattern>
<exclude-pattern>lang/*</exclude-pattern>
<rule ref="SPIP40"/>
<rule ref="PSR1"/>
<config name="ignore_warnings_on_exit" value="1"/>
<arg name="cache" value=".php_cs.cache"/>
<arg name="report-full" value=".php_cs.txt"/>
<arg name="report-summary"/>
<arg value="s"/>
</ruleset>

@ -1,212 +1,216 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
* (c) depuis 2007 Collectif SPIP
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
return;
}
include_spip('inc/skeleditor_codemiror');
function skeleditor_dossier(){
include_spip('inc/skeleditor');
return skeleditor_path_editable();
}
// build select menu to choose directory
function editor_form_directory($path, $depth = ""){
$output = "";
foreach ($path as $dir){
$tdir = explode('/', $dir);
$myfile = array_pop($tdir);
$depth = "";
while (array_pop($tdir)) $depth .= "&nbsp;&nbsp;";
$output .= "<option value='$dir'>$depth$myfile</option>\n";
}
return $output;
}
// add file form
function skeleditor_addfile($path_list){
//$output = bouton_block_invisible('editor_newfile');
$output .= "<img src='" . _DIR_PLUGIN_SKELEDITOR . "images/action_add.png' alt='new' />" . _T("skeleditor:fichier_nouveau");
//$output .= debut_block_invisible('editor_newfile');
$output .= "<form method='get'>\n";
$output .= "<input type='hidden' name='exec' value='skeleditor' />";
$output .= "<input type='hidden' name='operation' value='new' />";
//$output .= "nom du fichier:<br />\n";
$output .= "<input type='text' name='f' value='untitled.html' onfocus=\"this.value=''\" />";
$output .= _T("skeleditor:target") . "<br />\n";
$output .= "<select name='target'><br />\n";
$output .= editor_form_directory($path_list);
$output .= "</select><br /><input type='submit' name='sub' value='" . _T("skeleditor:creer") . "' />";
$output .= "</form>\n";
$output .= fin_block();
return $output;
}
// upload file form
function skeleditor_uploadfile($path_list){
//$output = "<br />".bouton_block_invisible('editor_uploadfile');
$output .= "<img src='" . _DIR_PLUGIN_SKELEDITOR . "images/action_add.png' alt='new' />" . _T("skeleditor:fichier_upload");
//$output .= debut_block_invisible('editor_uploadfile');
$output .= "<form method='post' enctype='multipart/form-data' >\n";
$output .= "<input type='hidden' name='exec' value='skeleditor' />";
$output .= "<input type='hidden' name='operation' value='upload' />";
$output .= "<input type='hidden' name='MAX_FILE_SIZE' value='200000' />";
$output .= "<input type='file' name='upf'/>";
$output .= _T("skeleditor:target") . "<br />\n";
$output .= "<select name='target'><br />\n";
$output .= editor_form_directory($path_list);
$output .= "</select><br /><input type='submit' name='sub' value='" . _T("skeleditor:upload") . "' />";
$output .= "</form>\n";
$output .= fin_block();
return $output;
}
// skeleton parsing (more details: public/phrase_html)
function skel_parser($skel_str){
include_spip("public/interfaces");
include_spip("public/phraser_html");
//include_spip("public/debug");
//$output .= _T('skeleditor:parseur_titre');
$output .= "<div style='background: #eef; border:1px solid #eee;padding:10px;font-size:0.82em;font-family:Verdana'>";
$boucles = array();
$b = public_phraser_html($skel_str, 0, $boucles, 'skel_editor');
$boucles = array_reverse($boucles, TRUE);
/* parse outside boucles */
//$output .= bouton_block_invisible("hors_boucle")._T("skeleditor:parseur_horsboucle");
//$output .= debut_block_invisible("hors_boucle");
$output .= "<div style='background: #fff;padding:10px;'>";
foreach ($b as $k => $val){
if ($val->type=="champ"){
$output .= "<span style='color:#c30;background:#eee'>#" . $val->nom_champ . "</span>";
} else {
if ($val->type=="texte"){
$output .= "<pre style='background:#ddd;margin:0;display:inline;'>&nbsp;" . htmlspecialchars($val->texte) . "</pre>";
} else {
if ($val->type=="include"){
$output .= "<span style='color:#30c;background:#cff;'>(INCLURE)</span>";
}
}
}
}
$output .= "</div>\n";
$output .= fin_block() . "<br />";
/* parse boucles */
foreach ($boucles as $k => $val){
/* version gentle */
//$output .= bouton_block_invisible("skel_parser_$k")." BOUCLE$k";
$output .= " <span style='color:#888'>(" . strtoupper($val->type_requete) . ")</span>";
//$output .= debut_block_invisible("skel_parser_$k");
$output .= "<div style='background: #fff;padding:10px;'>";
if ($val->id_parent){
$output .= "<strong>id_parent:</strong> BOUCLE$val->id_parent<br />";
}
if ($val->param){
$output .= "<strong>" . _T('skeleditor:parseur_param') . "</strong>" . skel_parser_param($val->param) . "<br />";
}
$output .= "<strong>" . _T('skeleditor:parseur_contenu') . "</strong><br />";
$output .= skel_parser_affiche(_T('skeleditor:parseur_avant'), $val->avant, '#cc9');
$output .= skel_parser_affiche(_T('skeleditor:parseur_milieu'), $val->milieu, '#fc6');
$output .= skel_parser_affiche(_T('skeleditor:parseur_apres'), $val->apres, '#fcc');
$output .= skel_parser_affiche(_T('skeleditor:parseur_altern'), $val->altern, '#cfc');
$output .= "</div>\n";
$output .= fin_block() . "<br />";
/* version brute */
/*
$output .= "<strong>BOUCLE$k</strong><br />\n";
foreach (get_object_vars($val) as $prop => $val2) {
$output .= "\t<br />$prop = $val2\n";
if (is_array($val2)) {
foreach($val2 as $k3=>$val3) {
$output .= "\t\t<br>........................$k3 = $val3\n";
if (is_object($val3)) {
foreach (get_object_vars($val3) as $prop4 => $val4) {
$output .= "\t\t<br>+++........................( $prop4 = $val4 )\n";
if (is_array($val4 )) {
foreach($val4 as $k5=>$val5) {
$output .= "\t\t<br>++++++...............$k5 = $val5 )\n";
foreach($val5 as $k6=>$val6) {
$output .= "\t\t<br>+++++++++++.........$k6 = $val6 )\n";
}
}
}
}
}
}
}
}*/
}
$output .= "</div>";
return $output;
}
// affiche le code pour le parseur
function skel_parser_affiche($titre, $content, $bgcolor = '#fc6'){
$output = "";
$output .= "<div style='background:$bgcolor'>$titre</div>";
foreach ($content as $k => $str){
if ($str->type=="champ"){
$output .= "<span style='color:#c30;background:#eee'>#" . $str->nom_champ . "</span>";
} else {
if ($str->type=="texte"){
$output .= "<pre style='background:#ddd;margin:0;display:inline;'>&nbsp;" . htmlspecialchars($str->texte) . "</pre>";
} else {
if ($str->type=="include"){
$output .= "<span style='color:#30c;background:#cff;'>(INCLUDE)</span>";
}
}
}
}
return $output;
}
// parse param value
function skel_parser_param($str, $output = ''){
$output = "";
if (is_array($str)){
foreach ($str as $k2 => $val2){
//$output .= ".....$k2=>$val2 ($c)<br />";
$output .= skel_parser_param($val2, $output); // recursive
}
} else {
if (is_object($str)){
$output .= " {" . $str->texte . "} ";
/*foreach (get_object_vars($str) as $prop4 => $val4) {
$output .= "\t\t<br>...........( $prop4 = $val4 )\n";
} */
}
}
return $output;
}
// recupere les plugins de type squelette
function get_plugin_squelette(){
// alternative 1: liste des plugins squelettes manuelle (blip, sarka, ...?)
// alternative 2: on scanne les plugins: si article.html et sommaire.html present ? sans doute un plugin squelette
$plugin_squelette = array();
if ($GLOBALS['plugins']){
foreach ($GLOBALS['plugins'] as $k){
if (@is_file(_DIR_PLUGINS . "$k/article.html") && @is_file(_DIR_PLUGINS . "$k/sommaire.html")){
$plugin_squelette[] = _DIR_PLUGINS . $k . "/";
}
}
}
return $plugin_squelette;
}
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
* (c) depuis 2007 Collectif SPIP
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/skeleditor_codemiror');
function skeleditor_dossier() {
include_spip('inc/skeleditor');
return skeleditor_path_editable();
}
// build select menu to choose directory
function editor_form_directory($path, $depth = '') {
$output = '';
foreach ($path as $dir) {
$tdir = explode('/', $dir);
$myfile = array_pop($tdir);
$depth = '';
while (array_pop($tdir)) {
$depth .= '&nbsp;&nbsp;';
}
$output .= "<option value='$dir'>$depth$myfile</option>\n";
}
return $output;
}
// add file form
function skeleditor_addfile($path_list) {
//$output = bouton_block_invisible('editor_newfile');
$output .= "<img src='" . _DIR_PLUGIN_SKELEDITOR . "images/action_add.png' alt='new' />" . _T('skeleditor:fichier_nouveau');
//$output .= debut_block_invisible('editor_newfile');
$output .= "<form method='get'>\n";
$output .= "<input type='hidden' name='exec' value='skeleditor' />";
$output .= "<input type='hidden' name='operation' value='new' />";
//$output .= "nom du fichier:<br />\n";
$output .= "<input type='text' name='f' value='untitled.html' onfocus=\"this.value=''\" />";
$output .= _T('skeleditor:target') . "<br />\n";
$output .= "<select name='target'><br />\n";
$output .= editor_form_directory($path_list);
$output .= "</select><br /><input type='submit' name='sub' value='" . _T('skeleditor:creer') . "' />";
$output .= "</form>\n";
$output .= fin_block();
return $output;
}
// upload file form
function skeleditor_uploadfile($path_list) {
//$output = "<br />".bouton_block_invisible('editor_uploadfile');
$output .= "<img src='" . _DIR_PLUGIN_SKELEDITOR . "images/action_add.png' alt='new' />" . _T('skeleditor:fichier_upload');
//$output .= debut_block_invisible('editor_uploadfile');
$output .= "<form method='post' enctype='multipart/form-data' >\n";
$output .= "<input type='hidden' name='exec' value='skeleditor' />";
$output .= "<input type='hidden' name='operation' value='upload' />";
$output .= "<input type='hidden' name='MAX_FILE_SIZE' value='200000' />";
$output .= "<input type='file' name='upf'/>";
$output .= _T('skeleditor:target') . "<br />\n";
$output .= "<select name='target'><br />\n";
$output .= editor_form_directory($path_list);
$output .= "</select><br /><input type='submit' name='sub' value='" . _T('skeleditor:upload') . "' />";
$output .= "</form>\n";
$output .= fin_block();
return $output;
}
// skeleton parsing (more details: public/phrase_html)
function skel_parser($skel_str) {
include_spip('public/interfaces');
include_spip('public/phraser_html');
//include_spip("public/debug");
//$output .= _T('skeleditor:parseur_titre');
$output .= "<div style='background: #eef; border:1px solid #eee;padding:10px;font-size:0.82em;font-family:Verdana'>";
$boucles = [];
$b = public_phraser_html($skel_str, 0, $boucles, 'skel_editor');
$boucles = array_reverse($boucles, true);
/* parse outside boucles */
//$output .= bouton_block_invisible("hors_boucle")._T("skeleditor:parseur_horsboucle");
//$output .= debut_block_invisible("hors_boucle");
$output .= "<div style='background: #fff;padding:10px;'>";
foreach ($b as $k => $val) {
if ($val->type == 'champ') {
$output .= "<span style='color:#c30;background:#eee'>#" . $val->nom_champ . '</span>';
} else {
if ($val->type == 'texte') {
$output .= "<pre style='background:#ddd;margin:0;display:inline;'>&nbsp;" . htmlspecialchars($val->texte) . '</pre>';
} else {
if ($val->type == 'include') {
$output .= "<span style='color:#30c;background:#cff;'>(INCLURE)</span>";
}
}
}
}
$output .= "</div>\n";
$output .= fin_block() . '<br />';
/* parse boucles */
foreach ($boucles as $k => $val) {
/* version gentle */
//$output .= bouton_block_invisible("skel_parser_$k")." BOUCLE$k";
$output .= " <span style='color:#888'>(" . strtoupper($val->type_requete) . ')</span>';
//$output .= debut_block_invisible("skel_parser_$k");
$output .= "<div style='background: #fff;padding:10px;'>";
if ($val->id_parent) {
$output .= "<strong>id_parent:</strong> BOUCLE$val->id_parent<br />";
}
if ($val->param) {
$output .= '<strong>' . _T('skeleditor:parseur_param') . '</strong>' . skel_parser_param($val->param) . '<br />';
}
$output .= '<strong>' . _T('skeleditor:parseur_contenu') . '</strong><br />';
$output .= skel_parser_affiche(_T('skeleditor:parseur_avant'), $val->avant, '#cc9');
$output .= skel_parser_affiche(_T('skeleditor:parseur_milieu'), $val->milieu, '#fc6');
$output .= skel_parser_affiche(_T('skeleditor:parseur_apres'), $val->apres, '#fcc');
$output .= skel_parser_affiche(_T('skeleditor:parseur_altern'), $val->altern, '#cfc');
$output .= "</div>\n";
$output .= fin_block() . '<br />';
/* version brute */
/*
$output .= "<strong>BOUCLE$k</strong><br />\n";
foreach (get_object_vars($val) as $prop => $val2) {
$output .= "\t<br />$prop = $val2\n";
if (is_array($val2)) {
foreach($val2 as $k3=>$val3) {
$output .= "\t\t<br>........................$k3 = $val3\n";
if (is_object($val3)) {
foreach (get_object_vars($val3) as $prop4 => $val4) {
$output .= "\t\t<br>+++........................( $prop4 = $val4 )\n";
if (is_array($val4 )) {
foreach($val4 as $k5=>$val5) {
$output .= "\t\t<br>++++++...............$k5 = $val5 )\n";
foreach($val5 as $k6=>$val6) {
$output .= "\t\t<br>+++++++++++.........$k6 = $val6 )\n";
}
}
}
}
}
}
}
}*/
}
$output .= '</div>';
return $output;
}
// affiche le code pour le parseur
function skel_parser_affiche($titre, $content, $bgcolor = '#fc6') {
$output = '';
$output .= "<div style='background:$bgcolor'>$titre</div>";
foreach ($content as $k => $str) {
if ($str->type == 'champ') {
$output .= "<span style='color:#c30;background:#eee'>#" . $str->nom_champ . '</span>';
} else {
if ($str->type == 'texte') {
$output .= "<pre style='background:#ddd;margin:0;display:inline;'>&nbsp;" . htmlspecialchars($str->texte) . '</pre>';
} else {
if ($str->type == 'include') {
$output .= "<span style='color:#30c;background:#cff;'>(INCLUDE)</span>";
}
}
}
}
return $output;
}
// parse param value
function skel_parser_param($str, $output = '') {
$output = '';
if (is_array($str)) {
foreach ($str as $k2 => $val2) {
//$output .= ".....$k2=>$val2 ($c)<br />";
$output .= skel_parser_param($val2, $output);
// recursive
}
} else {
if (is_object($str)) {
$output .= ' {' . $str->texte . '} ';
/*foreach (get_object_vars($str) as $prop4 => $val4) {
$output .= "\t\t<br>...........( $prop4 = $val4 )\n";
} */
}
}
return $output;
}
// recupere les plugins de type squelette
function get_plugin_squelette() {
// alternative 1: liste des plugins squelettes manuelle (blip, sarka, ...?)
// alternative 2: on scanne les plugins: si article.html et sommaire.html present ? sans doute un plugin squelette
$plugin_squelette = [];
if ($GLOBALS['plugins']) {
foreach ($GLOBALS['plugins'] as $k) {
if (@is_file(_DIR_PLUGINS . "$k/article.html") && @is_file(_DIR_PLUGINS . "$k/sommaire.html")) {
$plugin_squelette[] = _DIR_PLUGINS . $k . '/';
}
}
}
return $plugin_squelette;
}

@ -1,136 +1,124 @@
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
* (c) depuis 2007 Collectif SPIP
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')){
return;
}
include_spip('prive/squelettes/contenu/skeleditor_fonctions');
/**
* Afficher l'arborescence du dossier squelette
*
* @param string $path_base
* @param string $current_file
* @return string
*/
function skeleditor_afficher_arborescence($path_base, $current_file){
include_spip('inc/skeleditor');
$icons = [];
foreach (['file', 'image'] as $quoi){
$icons[$quoi] = chemin_image("se-{$quoi}-16.svg");
}
$icons['cadenas'] = chemin_image("cadenas-12.svg");
$balise_img = chercher_filtre('balise_img');
$file_list = skeleditor_files_editables($path_base);
$file_list = skeleditor_sort_directory_first($file_list, $path_base);
$current_file = substr($current_file, strlen($path_base));
$output = "<div id='file-browser'><ul class='item-files'>\n";
$init_dir = $current_dir = "";
foreach ($file_list as $file){
$dir = substr(dirname($file), strlen($path_base));
$file = substr($file, strlen($path_base));
if ($dir!=$current_dir){
$output .= skeleditor_tree_open_close_dir($current_dir, $dir, $current_file);
}
$class = "";
$icon = "file";
if (preg_match(',(' . _SE_EXTENSIONS_IMG . ')$,', $file)){
$icon = "image";
}
$class .= " $icon";
$readonly = false;
if (!is_writable($path_base . $dir) or !is_writable($path_base . $file)){
$readonly = true;
$class .= " readonly";
}
$class .= ($file==$current_file ? " on" : '');
$cadenas = ($readonly ? "&nbsp;" . (inserer_attribut($balise_img($icons['cadenas'], '16x16'), 'title', attribut_html(_T('texte_inc_meta_2')))) : "");
$url = generer_url_ecrire('skeleditor', 'f=' . urlencode($f = $path_base . $file));
if ($icon === 'image') {
$url .= '&amp;nomediabox';
}
$output .=
"<li class='item-file$class'>"
. "<a href='$url' onclick=\"jQuery('#contenu > :first').ajaxReload({history:true,args:{f:'$f'}});jQuery('.item-file.on').removeClass('on');jQuery(this).parent().addClass('on');return false;\">"
. $balise_img($icons[$icon], $icon, 'picto ' . $icon)
. basename($file)
. $cadenas
. "</a></li>";
}
$output .= skeleditor_tree_open_close_dir($current_dir, $init_dir, $current_file);
$output .= "</ul></div>\n";
return $output;
}
/**
* Gestion de l'ouverture/fermeture des repertoires dans le browser de fichiers
* @param string $current
* @param string $target
* @param string $current_file
* @return string
*/
function skeleditor_tree_open_close_dir(&$current, $target, $current_file){
static $icon_folder;
if (empty($icon_folder)){
$balise_img = chercher_filtre('balise_img');
$icon_folder = chemin_image("se-folder-16.svg");
$icon_folder = $balise_img($icon_folder, 'directory', 'picto directory');
}
if ($current==$target){
return "";
}
$tcur = explode("/", $current);
$ttarg = explode("/", $target);
$tcom = array();
$output = "";
// la partie commune
while (reset($tcur)==reset($ttarg)){
$tcom[] = array_shift($tcur);
array_shift($ttarg);
}
// fermer les repertoires courant jusqu'au point de fork
while ($close = array_pop($tcur)){
$output .= "</ul></li>";
}
$chemin = implode("/", $tcom) . "/";
// ouvrir les repertoires jusqu'a la cible
while ($open = array_shift($ttarg)){
$chemin .= $open . "/";
$closed = ((strncmp($current_file, ltrim($chemin, '/'), strlen(ltrim($chemin, '/')))==0) ? "" : " closed");
$class = "folder" . ($closed ? '' : ' open');
$output .=
"<li class='item-file directory'>"
. "<button class='btn btn_link $class' onclick='jQuery(this).toggleClass(\"open\");'><b class='caret'></b>$icon_folder $open</button>"
. "<ul class='item-files'>\n";
}
$current = $target;
return $output;
}
<?php
/**
* Plugin SkelEditor
* Editeur de squelette en ligne
* (c) depuis 2007 Collectif SPIP
* Licence GPL-v3
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('prive/squelettes/contenu/skeleditor_fonctions');
/**
* Afficher l'arborescence du dossier squelette
*
* @param string $path_base
* @param string $current_file
* @return string
*/
function skeleditor_afficher_arborescence($path_base, $current_file) {
include_spip('inc/skeleditor');
$icons = [];
foreach (['file', 'image'] as $quoi) {
$icons[$quoi] = chemin_image("se-{$quoi}-16.svg");
}
$icons['cadenas'] = chemin_image('cadenas-12.svg');
$balise_img = chercher_filtre('balise_img');
$file_list = skeleditor_files_editables($path_base);
$file_list = skeleditor_sort_directory_first($file_list, $path_base);
$current_file = substr($current_file, strlen($path_base));
$output = "<div id='file-browser'><ul class='item-files'>\n";
$init_dir = $current_dir = '';
foreach ($file_list as $file) {
$dir = substr(dirname($file), strlen($path_base));
$file = substr($file, strlen($path_base));
if ($dir != $current_dir) {
$output .= skeleditor_tree_open_close_dir($current_dir, $dir, $current_file);
}
$class = '';
$icon = 'file';
if (preg_match(',(' . _SE_EXTENSIONS_IMG . ')$,', $file)) {
$icon = 'image';
}
$class .= " $icon";
$readonly = false;
if (!is_writable($path_base . $dir) or !is_writable($path_base . $file)) {
$readonly = true;
$class .= ' readonly';
}
$class .= ($file == $current_file ? ' on' : '');
$cadenas = ($readonly ? '&nbsp;' . (inserer_attribut($balise_img($icons['cadenas'], '16x16'), 'title', attribut_html(_T('texte_inc_meta_2')))) : '');
$url = generer_url_ecrire('skeleditor', 'f=' . urlencode($f = $path_base . $file));
if ($icon === 'image') {
$url .= '&amp;nomediabox';
}
$output .=
"<li class='item-file$class'>"
. "<a href='$url' onclick=\"jQuery('#contenu > :first').ajaxReload({history:true,args:{f:'$f'}});jQuery('.item-file.on').removeClass('on');jQuery(this).parent().addClass('on');return false;\">"
. $balise_img($icons[$icon], $icon, 'picto ' . $icon)
. basename($file)
. $cadenas
. '</a></li>';
}
$output .= skeleditor_tree_open_close_dir($current_dir, $init_dir, $current_file);
$output .= "</ul></div>\n";
return $output;
}
/**
* Gestion de l'ouverture/fermeture des repertoires dans le browser de fichiers
* @param string $current
* @param string $target
* @param string $current_file
* @return string
*/
function skeleditor_tree_open_close_dir(&$current, $target, $current_file) {
static $icon_folder;
if (empty($icon_folder)) {
$balise_img = chercher_filtre('balise_img');
$icon_folder = chemin_image('se-folder-16.svg');
$icon_folder = $balise_img($icon_folder, 'directory', 'picto directory');
}
if ($current == $target) {
return '';
}
$tcur = explode('/', $current);
$ttarg = explode('/', $target);
$tcom = [];
$output = '';
// la partie commune
while (reset($tcur) == reset($ttarg)) {
$tcom[] = array_shift($tcur);
array_shift($ttarg);
}
// fermer les repertoires courant jusqu'au point de fork
while ($close = array_pop($tcur)) {
$output .= '</ul></li>';
}
$chemin = implode('/', $tcom) . '/';
// ouvrir les repertoires jusqu'a la cible
while ($open = array_shift($ttarg)) {
$chemin .= $open . '/';
$closed = ((strncmp($current_file, ltrim($chemin, '/'), strlen(ltrim($chemin, '/'))) == 0) ? '' : ' closed');
$class = 'folder' . ($closed ? '' : ' open');
$output .=
"<li class='item-file directory'>"
. "<button class='btn btn_link $class' onclick='jQuery(this).toggleClass(\"open\");'><b class='caret'></b>$icon_folder $open</button>"
. "<ul class='item-files'>\n";
}
$current = $target;
return $output;
}