Esempio n. 1
0
function ckeditor_cfgCK_Smileys() {
	if (ckeditor_tweaks_actifs('smileys')) {
		if (function_exists('smileys_installe')) { // le plugins couteau suisse smileys doit être activé
			$result = smileys_installe() ;
			$smileys = $result['smileys'] ;
			if (is_array($smileys)) {
				$sm_desc = array() ;
				$sm_img = array() ;
				foreach($smileys[2] as $ndx => $img) { // ceci permet d'éliminer automatiquement des doublons
					$sm_desc[$img] = preg_replace("~'~", "\\\\'",$smileys[0][$ndx]) ;
					$sm_img[$img] = $img ;
				}
				$sm_desc = array_values($sm_desc) ;
				$sm_img  = array_values($sm_img) ;
				$sm_path = _CKE_DIR_SMILEYS ;
				return array($sm_desc,$sm_img,$sm_path) ;
			}
		}
	}
	return false ;
}
function formulaires_configurer_ckeditor_p2_traiter_dist() {
	if (_request("_cfg_delete")) {
		$valeurs = formulaires_configurer_ckeditor_p2_charger_dist() ;
		foreach($valeurs as $cle => $valeur) {
			if (preg_match('~^tool_~',$cle)) { 
				effacer_config("ckeditor/$cle") ;
				// éviter que les champs ne soit préremplis avec les valeurs précédentes
				unset($_POST[$cle]) ;
			}
		}
		return array('message_erreur' => _T('ckeditor:ck_delete')) ;
	} else {
		foreach($GLOBALS['toolbars'] as $toolbar) {
			foreach($toolbar as $tool => $size) {
				if (!ckeditor_tweaks_actifs('smileys') && ($tool == 'Smiley')) continue ;
				ecrire_config("ckeditor/tool_$tool", _request("tool_$tool")==='on'?1:0) ;
			}
		}
		return array('message_ok' => _T('ckeditor:ck_ok')) ;
	}
}
function formulaires_configurer_ckeditor_p7_charger_dist() {
	($cfg = lire_config("ckeditor")) || ($cfg = array()) ;
	$plugin_dir = find_in_path('plugins/ckeditor') ;
	$plugins_cpt = 0 ;
	if (is_dir($plugin_dir)) {
		$dir = @opendir($plugin_dir) ;
		$fieldsets_plugin = array() ;
		while($item = @readdir($dir)) {

			if (is_file($plugin_dir.'/'.$item.'/plugin.js')) {
				$plugins_cpt++ ;
				$plugins_list[$plugins_cpt] = $item ;

			}
		}
		$error = 'ckeditor:aucun_plugin' ;
	} else {
		$error = 'ckeditor:aide_plugin' ;
	}
	if ($plugins_cpt>0) {
		$valeurs = array(
			'plugin_position_reference' => $cfg['plugin_position_reference'],
			'pluginbarreposition' => $cfg['pluginbarreposition']
		) ;
		$fieldsets_plugin[] = array(
			'saisie' => 'hidden', 
			'options' => array(
				'nom' => 'liste_plugins'
			)
		) ;
		$valeurs['liste_plugins'] = serialize($plugins_list) ;
		$datas = range(1, $plugins_cpt) ;
		foreach($plugins_list as $cpt => $nom) {
			$valeurs['chemin_'.$cpt] = $plugin_dir.'/'.$nom ;
			$valeurs['actif_'.$cpt] = $cfg['plugins'][$nom]['actif']?'on':'off' ;
			$valeurs['bouton_'.$cpt] = $cfg['plugins'][$nom]['bouton']?'on':'off' ;
			$valeurs['nom_bouton_'.$cpt] = $cfg['plugins'][$nom]['nom_bouton'] ;
			$valeurs['ordre_bouton_'.$cpt] = $cfg['plugins'][$nom]['ordre_bouton'] ;
			$fieldsets_plugin[] = array(
				'saisie' => 'fieldset',
				'options' => array(
					'nom' => 'plugin_fs_'.$nom,
					'label' => 'plugin : '.ucfirst($nom),
					'pliable' => 'oui', 'plie' => 'nom'
				),
				'saisies' => array(
					array(
						'saisie' => 'hidden',
						'options' => array(
							'nom' => 'chemin_'.$cpt
						)
					),
					array(
						'saisie' => 'case',
						'options' => array(
							'nom' => 'actif_'.$cpt,
							'label_case' => _T('ckeditor:plugin_active')
						)
					),
					array(
						'saisie' => 'case',
						'options' => array(
							'nom' => 'bouton_'.$cpt,
							'label_case' => _T('ckeditor:plugin_bouton')
						)
					),
					array(
						'saisie' => 'input',
						'options' => array(
							'nom' => 'nom_bouton_'.$cpt,
							'label' => _T('ckeditor:nom_du_bouton')
						)
					),
					array(
						'saisie' => 'selection',
						'options' => array(
							'nom' => 'ordre_bouton_'.$cpt,
							'label' => _T('ckeditor:ordre_du_bouton'),
							'datas' => $datas
						)
					)
				)
			) ;

		}
		
		$toolbar_datas = array() ;

		foreach($GLOBALS['toolbars'] as $toolbar) {
			foreach($toolbar as $tool => $size) {
				if (!ckeditor_tweaks_actifs('smileys') && ($tool == 'Smiley')) continue ;
				$toolbar_datas[$tool] = _T('ckeditor:tool_'.$tool) ;
			}
		}

		$valeurs['saisies_cke_page7'] = array(
			array(
				'saisie' => 'fieldset',
				'options' => array(
					'nom' => 'liste_ck_plugins',
					'label' => _T('ckeditor:liste_plugins_ckeditor')
				),
				'saisies' => $fieldsets_plugin
			),
			array(
				'saisie' => 'fieldset',
				'options' => array(
					'nom' => 'options_position',
					'label' => _T('ckeditor:plugins_barre_position')
				),
				'saisies' => array(
					array(
						'saisie' => 'radio',
						'options' => array(
							'nom' => 'pluginbarreposition',
							'defaut' => 'apres',
							'datas' => array(
								'avant'=>_T('ckeditor:avant'),
								'apres'=>_T('ckeditor:apres')
							)
						)
					),
					array(
						'saisie' => 'selection',
						'options' => array(
							'nom' => 'plugin_position_reference',
							'datas' => $toolbar_datas
						)
					)
				)
			)
		) ;
	} else {
		$valeurs['saisies_cke_page7'] = array(
			array(
				'saisie' => 'explication_spip',
				'options' => array(
					'nom' => 'erreur_plugin',
					'texte' => _T($error)
				)
			)
		) ;
	}
	return $valeurs ;
}
Esempio n. 4
0
function ckeditor_html2spip($texte) {
	$ckeditor_html2spip_pre = charger_fonction('ckeditor_html2spip_pre','');
	$texte = $ckeditor_html2spip_pre($texte);

	$search[] = "~<br/?>(\s|\r|\n)*</li>(\s|\r|\n)*~" ; // fix: http://contrib.spip.net/CKeditor-3-0#forum468504
	$replace[] = "</li>" ;

	if (PROTECTED_SPIP_TAGS) {
		$search[] = "#&lt;(".PROTECTED_SPIP_TAGS.".*?)&gt;#s" ;
		$replace[] = "<$1>" ;
	}
	if (CLOSED_PROTECTED_SPIP_TAGS) {
		$search[] = "#<(".CLOSED_PROTECTED_SPIP_TAGS.")([^>]*)>(.*?)</\\1>#se" ;
		$replace[] = "ckeditor_tag_protect('$3','$1','$2')" ;
	}

	if (ckeditor_tweaks_actifs('decoupe')) {
		$search[] = "#\s*<div\s*style=\"page-break-after:\s*always\s*;\s*\">.*?</div>\s*#si" ; // saut de page
		if (ckeditor_lire_config("html2spip", _CKE_HTML2SPIP_DEF)) {
			$replace[] = "\n\n<p>++++</p>\n" ;
		} else {
			$replace[] = "\n\n++++\n\n" ;
		}
	}

	$search[] = "#<a\s+([^>]*?)\s*href=(\"|')(.*?)\\2\s*([^>]*?)\s*>(.*?)</a>#sei" ; // les liens
	$replace[] = "ckeditor_traite_lien_html('$5','$3','$1','$4')" ;

	$search[] = "#<a[^>]+name=(\"|')(.*?)\\1[^>]*></a>#si" ; // les ancres
	$replace[] = '[#$2<-]' ;

	$search[] = "#<img\s*([^>]*?)\s*src=\"([^\"]*?)\?docid=(\d+)(?:&amp;|&)doctype=(\w+)(?:(?:&amp;|&)docparam=([^\"]*))?\"\s*([^>]*?)\s*>#sei" ; // les images
	$replace[] = "ckeditor_traite_img_html('$3','$4','$5','$1','$6')" ;

	$search[] = "#<img\s*([^>]*?)\s*src=\"data:([^\"]*?)\"\s*([^>]*?)\s*>#sei" ; // les images incorporées/encodées en base64
	$replace[] = "ckeditor_traite_img_data('$2','$1','$3')" ;

	// nettoyage des attribus ajoutés par ckeditor
	$search[] = "#(<\w+\s*[^>]*\b)data-cke-saved-\w+=([\"']).*?\\2([^>]*>)#si" ;
	$replace[] = "$1$3" ;
	
	if (ckeditor_tweaks_actifs('smileys')) {
		$cs_path = preg_split("~/~", _DIR_PLUGIN_COUTEAU_SUISSE) ;
		$search[] = "#<img[^>]+src=\"[^\"]*".$cs_path[count($cs_path)-1]."/img/smileys/[^\"]*\"[^>]+title=\"([^\"]*)\"[^>]+/>#si" ;
		$replace[] = "$1" ;
	}

	if (ckeditor_lire_config("spiplinks")) {
		$search[] = "#(\[[^\]]*?-)&gt;([^\]]*?\])#s" ; // les liens spip
		$replace[] = "$1>$2" ;

		$search[] = "#(\[.*?)&lt;(-\])#s" ; // les ancres spip
		$replace[] = "$1<$2" ;
	}

	$search[] = "#<br/?>(\r|\n|\s)*<(td|caption|tr|tbody|/td|/caption|/tr|/tbody)[^>]*>(\r|\n|\s)*#si" ;
	$replace[] = "<$2>" ;

	/* plus de nettoyage : */
	$search[] = "#(\s*<p>\s*</p>)*\s*$#s" ;
	$replace[] = '' ;

	$search[] = '~<br/?>$~' ;
	$replace[] = '' ;

	$texte = preg_replace($search, $replace, $texte) ;

	if (ckeditor_lire_config("conversion", _CKE_CONVERSION_DEF) == 'complete') {
		/*
		 * Protection des modeles SPIP dans des
		 * <script type="ckeditor_wrap"> pour que le parser HTML
		 * ne bloque pas dessus comme non compliant HTML.
		 */
		$search_regex = sprintf("#<%s[^>]*>#s", PROTECTED_SPIP_TAGS);
		$texte = preg_replace_callback($search_regex,
					       ckeditor_wrap_callback,
					       $texte);

		/*
		 * Reconversion HTML vers typo SPIP
		 */
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/misc_tools.php'));
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/HTMLEngine.class'));
		require_once(find_in_path('lib/'._CKE_HTML2SPIP_VERSION.'/HTML2SPIPEngine.class'));
		include_spip('inc/ckeditor_class') ;

		$identity_tags = ckeditor_lire_config("html2spip_identite", _CKE_HTML2SPIP_IDENTITE);

		define('_HTML2SPIP_PRESERVE_DISTANT', true);
		$parser = new CKE_HTML2SPIPEngine($GLOBALS['db_ok']['link'], _DIR_IMG);
		$parser->loggingEnable();
		if (trim($identity_tags) != '')
			$parser->addIdentityTags(explode(';', $identity_tags));
		$output = $parser->translate($texte);
		$texte = $output['default'];

		/*
		 * Recuperation des modeles SPIP proteges
		 */
		$search_regex = '|<script type="ckeditor_wrap">([^>]*)</script>|si';
		$texte = preg_replace_callback($search_regex,
				      	       ckeditor_unwrap_callback,
					       $texte);
	}

	$ckeditor_html2spip_post = charger_fonction('ckeditor_html2spip_post','');
	$texte = $ckeditor_html2spip_post($texte);

	return $texte;
}