Files
dokuwiki-plugins/lib/plugins/ckgedit/helper.php
Trevor Batley bce7dd054a add contents
2025-10-09 15:04:29 +11:00

366 lines
11 KiB
PHP

<?php
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Myron Turner <turnermm02@shaw.ca>
*/
// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();
class helper_plugin_ckgedit extends DokuWiki_Plugin {
function getMethods(){
$result = array();
$result[] = array(
'name' => 'registerOnLoad',
'desc' => 'register some javascript to the window.onload js event',
'params' => array('js' => 'string'),
'return' => array('html' => 'string'),
);
return $result;
}
/**
* Convert string configuration value into an array
*/
function get_conf_array($val) {
$str = $this->getConf($val);
$str = preg_replace('/\s+/',"",$str);
return explode(',', $str);
}
function get_ckgedit_ImageAllowedExtensions() {
$uploadImageTypes = ARRAY();
foreach (getMimeTypes() as $ext=>$mtype) {
if(preg_match("/image/", $mtype)) {
$uploadImageTypes[] = $ext;
}
}
return '.(' . implode('|',$uploadImageTypes) .')$';
}
function is_outOfScope(&$which="") {
if(isset($_REQUEST['target']) && $_REQUEST['target'] == 'plugin_data') return true;
return false;
}
function has_plugin($plugin) {
$plugins_list = plugin_list();
return in_array($plugin, $plugins_list);
}
/**
* function dw_edit_displayed
* @author Myron Turner
* determines whether or not to show or hide the
* 'DW Edit' button
*/
function dw_edit_displayed()
{
global $INFO;
$dw_edit_display = @$this->getConf('dw_edit_display');
if(!isset($dw_edit_display))return ""; //version 0.
if($dw_edit_display != 'all') {
$admin_exclusion = false;
if($dw_edit_display == 'admin' && ($INFO['isadmin'] || $INFO['ismanager']) ) {
$admin_exclusion = true;
}
if($dw_edit_display == 'none' || $admin_exclusion === false) {
return ' style = "display:none"; ';
}
return "";
}
return "";
}
function registerOnLoad($js){
global $ID;
global $lang;
global $skip_styling;
global $JSINFO;
$ckgedit_conf_direction = $this->getConf('direction');
if($ckgedit_conf_direction == "dokuwiki") {
$ckgedit_lang_direction = $lang['direction'];
}
else {
$ckgedit_lang_direction = $ckgedit_conf_direction;
}
$ImageUploadAllowedExtensions = $this->get_ckgedit_ImageAllowedExtensions() ;
$media_tmp_ns = preg_match('/:/',$ID) ? preg_replace('/:\w+$/',"",$ID,1) : "";
$locktimer_msg = "Your lock for editing this page is about to expire in a minute.\\n"
. "You can reset the timer by clicking the Back-up button.";
$meta_fn = metaFN($ID,'.ckgedit');
$meta_id = 'meta/' . str_replace(':','/',$ID) . '.ckgedit';
global $INFO;
global $conf;
global $USERINFO;
$_OS = strtolower(PHP_OS);
$cname = getCacheName($INFO['client'].$ID,'.draft');
$useheading = $conf['useheading'];
if($useheading && $useheading != 'navigation') {
$useheading = 'y';
}
else $useheading = 'n';
//msg('uh='.$useheading);
$open_upload = $this->getConf('open_upload');
$editor_backup = $this->getConf('editor_bak');
$create_folder = $this->getConf('create_folder');
$interface_lang = $this->getConf('other_lang');
$scayt_lang = $this->getConf('scayt_lang');
list($name,$scayt_lang) = explode('/', $scayt_lang);
$scayt_auto = $this->getConf('scayt_auto');
$color_opts = $this->getConf('color_options');
$font_opts = $this->getConf('font_options');
$toolbar_opts = $this->getConf('alt_toolbar');
$mfiles = $this->getConf('mfiles');
$extra_plugins = $this->getConf('extra_plugins');
$ckg_gui = $this->getConf('gui');
if(!isset($INFO['userinfo']) && !$open_upload) {
$user_type = 'visitor';
}
else {
$user_type = 'user';
}
$save_dir = DOKU_BASE . ltrim($conf['savedir'],'/.\/');
$fbsz_increment = isset($_COOKIE['fbsz']) && $_COOKIE['fbsz'] ? $_COOKIE['fbsz'] : '0';
$use_pastebase64 = (isset($_COOKIE['ckgEdPaste']) && $_COOKIE['ckgEdPaste'] == 'on' ) ? 'on' : 'off';
// if no ACL is used always return upload rights
if($conf['useacl']) {
$client = $_SERVER['REMOTE_USER'];
}
else $client = "";
$user_name = $USERINFO['name'];
$user_email = $USERINFO['mail'];
$fnencode = isset($conf['fnencode']) ? $conf['fnencode'] : 'url';
$user_groups = $USERINFO['grps'];
if(!$user_groups) $user_groups = array();
if (@in_array("guest", $user_groups)) {
$create_folder = 'n';
$user_type = 'visitor';
}
$user_groups = str_replace('"','\"',implode(";;",$user_groups));
if($INFO['isadmin'] || $INFO['ismanager']) {
$client = "";
}
$ver_anteater = mktime(0,0,0,11,7,2010);
$dwiki_version=mktime(0,0,0,01,01,2008);
if(isset($conf['fnencode'])) {
$ver_anteater = mktime(0,0,0,11,7,2010);
$dwiki_version=mktime(0,0,0,11,7,2010);
}
else if(function_exists('getVersionData')) {
$verdata= getVersionData();
if(isset($verdata) && preg_match('/(\d+)-(\d+)-(\d+)/',$verdata['date'],$ver_date)) {
if($ver_date[1] >= 2005 && ($ver_date[3] > 0 && $ver_date[3] < 31) && ($ver_date[2] > 0 && $ver_date[2] <= 12)) {
// month day year
$dwiki_version=@mktime(0, 0, 0, $ver_date[2],$ver_date[3], $ver_date[1]);
if(!$dwiki_version) $dwiki_version = mktime(0,0,0,01,01,2008);
$ver_anteater = mktime(0,0,0,11,7,2010);
}
}
}
$ckg_brokenimg = $this->getLang('broken_image');
$default_fb = $this->getConf('default_fb');
if($default_fb == 'none') {
$client = "";
}
$doku_base = DOKU_BASE;
return <<<end_of_string
<script type='text/javascript'>
//<![CDATA[
if(window.dw_locktimer) {
var locktimer = dw_locktimer;
}
var FCKRecovery = "";
var oldonload = window.onload;
var ourLockTimerINI = false;
var ckgedit_onload = function() { $js };
window.onload = ckgedit_onload;
function getCurrentWikiNS() {
var DWikiMediaManagerCommand_ns = '$media_tmp_ns';
return DWikiMediaManagerCommand_ns;
}
var ourFCKEditorNode = null;
function revert_to_prev() {
if(!(GetE('saved_wiki_html').innerHTML.length)) {
if(!confirm(backup_empty)) {
return;
}
}
CKEDITOR.instances.wiki__text.setData( GetE('saved_wiki_html').innerHTML);
window.dwfckTextChanged = true;
}
function draft_delete() {
var debug = false;
var params = "draft_id=$cname";
jQuery.ajax({
url: DOKU_BASE + 'lib/plugins/ckgedit/scripts/draft_delete.php',
data: params,
type: 'POST',
dataType: 'html',
success: function(data){
if(debug) {
alert(data);
}
}
});
window.textChanged = false;
}
var DWFCK_EditorWinObj;
function FCKEditorWindowObj(w) {
DWFCK_EditorWinObj = w;
}
function ckgedit_isRTL() {
var direction = "$ckgedit_lang_direction";
return direction == 'rtl';
}
function remove_styling() {
//'TextColor,BGColor, FontAssist,Font,FontSize';
var opts = "";
var color_opts = parseInt( "$color_opts");
var font_opts = parseInt("$font_opts");
var skip_styling=parseInt("$skip_styling");
if(color_opts) {
opts ='TextColor,BGColor,FontAssist';
}
else if(!skip_styling) {
opts = 'FontAssist';
}
if(font_opts) {
if(color_opts || !skip_styling) opts+=',';
opts +='Font,FontSize';
}
if("$toolbar_opts") {
if(opts) opts+=',';
opts+="$toolbar_opts";
}
return opts;
}
function extra_plugins(config) {
if("$use_pastebase64" == 'on') config.addPaste();
return "$extra_plugins";
}
function ckgedit_language_chk(config) {
if("$scayt_auto" == 'on') {
config.scayt_autoStartup = true;
}
else config.scayt_autoStartup = false;
if("$scayt_auto" == 'disable') {
config.scayt__disable = true;
}
config.scayt_sLang="$scayt_lang";
var lang = "$interface_lang";
if(lang == 'default') return; ;
config.language = lang;
}
function getCKEditorGUI() {
return "$ckg_gui";
}
var oDokuWiki_FCKEditorInstance;
function FCKeditor_OnComplete( editorInstance )
{
oDokuWiki_FCKEditorInstance = editorInstance;
editorInstance.on( 'key', handlekeypress, editorInstance );
CKEDITOR.instances.wiki__text.on('change', function(event) {
window.dwfckTextChanged = true;
window.textChanged = true;
});
editorInstance.on("focus", function(e) {
window.dwfckTextChanged = true;
});
var broken_image ='http://' + location.host + DOKU_BASE + '/lib/plugins/ckgedit/fckeditor/userfiles/blink.jpg?nolink&33x34';
editorInstance.on("paste", function(e) {
// https://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
var formatBytes = function(bytes,decimals) {
if(bytes == 0) return '0 Bytes';
var k = 1024,
dm = decimals <= 0 ? 0 : decimals || 2,
sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}
var len = e.data.dataValue.length;
var len = e.data.dataValue.length - 'data:image/png;base64,'.length;
var size = formatBytes(len,1);
var broken_msg = ckg_RawImgMsg();
broken_msg += " " + size;
if(e.data.dataValue.match(/data:image\/\w+;base64/) && len > 2500000) {
alert(broken_msg);
e.data.dataValue = '<img src ='+ broken_image + '/>';
}
});
oDokuWiki_FCKEditorInstance.dwiki_user = "$user_type";
oDokuWiki_FCKEditorInstance.dwiki_client = "$client";
oDokuWiki_FCKEditorInstance.dwiki_usergroups = "$user_groups";
oDokuWiki_FCKEditorInstance.dwiki_doku_base = "$doku_base";
oDokuWiki_FCKEditorInstance.dwiki_create_folder = "$create_folder";
oDokuWiki_FCKEditorInstance.dwiki_fnencode = "$fnencode";
oDokuWiki_FCKEditorInstance.dwiki_version = $dwiki_version;
oDokuWiki_FCKEditorInstance.dwiki_anteater = $ver_anteater;
oDokuWiki_FCKEditorInstance.isLocalDwikiBrowser = false;
oDokuWiki_FCKEditorInstance.isUrlExtern = false;
oDokuWiki_FCKEditorInstance.isDwikiMediaFile = false;
oDokuWiki_FCKEditorInstance.imageUploadAllowedExtensions="$ImageUploadAllowedExtensions";
oDokuWiki_FCKEditorInstance.fckgUserName = "$user_name";
oDokuWiki_FCKEditorInstance.fckgUserMail="$user_email";
oDokuWiki_FCKEditorInstance.useheading = "$useheading";
oDokuWiki_FCKEditorInstance.mfiles = parseInt("$mfiles");
oDokuWiki_FCKEditorInstance.fbsz_increment=parseInt("$fbsz_increment");
}
window.DWikifnEncode = "$fnencode";
//]]>
</script>
end_of_string;
}
}
?>