dokuwiki_priority = $this->getConf('dw_priority');
}
/*
* Register its handlers with the dokuwiki's event controller
*/
function register(Doku_Event_Handler $controller) {
$controller->register_hook( 'TPL_METAHEADER_OUTPUT', 'AFTER', $this, 'loadScript');
$controller->register_hook( 'HTML_EDITFORM_INJECTION', 'AFTER', $this, 'preprocess');
$controller->register_hook( 'HTML_EDITFORM_OUTPUT', 'BEFORE', $this, 'insertFormElement');
$controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'file_type');
$controller->register_hook('TPL_CONTENT_DISPLAY', 'AFTER', $this, 'setupDWEdit');
$controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'fnencode_check');
}
function insertFormElement(&$event, $param) {
global $FCKG_show_preview;
$param = array();
global $ID;
$dwedit_ns = @$this->getConf('dwedit_ns');
if(isset($dwedit_ns) && $dwedit_ns) {
$ns_choices = explode(',',$dwedit_ns);
foreach($ns_choices as $ns) {
$ns = trim($ns);
if(preg_match("/$ns/",$ID)) {
echo "";
break;
}
}
}
$act = $event->data;
if(is_string($act) && $act != 'edit') {
return;
}
// restore preview button if standard DW editor is in place
// $FCKG_show_preview is set in edit.php in the register() function
if($_REQUEST['fck_preview_mode'] != 'nil' && !isset($_COOKIE['FCKG_USE']) && !$FCKG_show_preview) {
echo '';
}
elseif($FCKG_show_preview) {
echo '';
}
else {
echo '';
}
global $fckg_lang;
if($_REQUEST['fck_preview_mode']== 'preview'){
return;
}
$param = array();
$this->preprocess($event, $param); // create the setDWEditCookie() js function
$button = array
(
'_elem' => 'button',
'type' => 'submit',
'_action' => 'cancel',
'value' => $fckg_lang['btn_fck_edit'],
'class' => 'button',
'id' => 'edbtn__edit',
'title' => $fckg_lang['btn_fck_edit']
);
$pos = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE');
if($pos === false) {
$button['onclick'] = 'return setDWEditCookie(1, this);';
}
else {
$button['onmousedown'] = 'return setDWEditCookie(1, this);';
}
$pos = $event->data->findElementByAttribute('type','submit');
//inserts HTML data after that position.
$event->data->insertElement(++$pos,$button);
return;
}
function preprocess(&$event, $param) {
$act = $event->data;
if(is_string($act) && $act != 'edit') {
return;
}
global $INFO;
$cname = $INFO['draft'];
$dokuwiki_priority =$this->dokuwiki_priority;
echo "\n";
echo <<
SCRIPT;
}
function check_userfiles() {
if($this->getConf('no_symlinks')) {
return;
}
global $INFO;
global $conf;
$userfiles = DOKU_PLUGIN . 'fckg/fckeditor/userfiles/';
$save_dir = trim($conf['savedir']);
// msg('BASE='. DOKU_BASE);
// msg(DOKU_URL);
// msg('REL='. DOKU_REL);
if(!preg_match('#^\.\/data$#',$save_dir)) {
$data_media = $conf['savedir'] . '/media/';
$domain = trim(DOKU_BASE,'/');
$expire = null;
if(! empty($domain )) {
list($prefix,$mdir) = explode(trim(DOKU_BASE, '/'),$userfiles);
$mdir = ltrim($mdir, '/');
$media_dir = DOKU_BASE . $mdir . 'image/';
setcookie('FCK_media',$media_dir, $expire, '/');
}
else $media_dir = '/lib/plugins/ckgedit/fckeditor/userfiles/image/';
}
else {
$data_media = DOKU_INC.'data/media/';
}
if($this->getConf('winstyle')) return;
if(!is_writable($userfiles)){
msg(" fckg cannot write to $userfiles. Please check the permissions.");
return;
}
$version = io_readFile(DOKU_PLUGIN . 'fckg/version');
if(!$version) return;
$meta = metaFN('fckl:symchk','.meta');
$symcheck = io_readFile($meta);
if($symcheck) {
if(trim($version)== trim($symcheck)) { //symlinks should already have been created
return;
}
}
if (function_exists('php_uname')) {
$sys = php_uname() ;
if( preg_match('/Windows/i', $sys) ) {
preg_match('/build\s+(\d+)/',$sys, $matches);
if($matches[1] < 6000) { // we can make symlinks for vista (6000) or later
return;
}
$winlinks = array();
$userfiles = str_replace('/', '\\',$userfiles);
exec("dir " . $userfiles, $output);
foreach($output as $line) {
if(preg_match('/\s+(.*?)\s+\[/i',$line,$matches)) {
$winlinks[] = $matches[1];
}
}
}
}
else if( preg_match('/WINNT/i', PHP_OS) ) { // if we can't get php_uname and a build and this is Windows, just return
return;
}
$show_msg = false;
if($INFO['isadmin'] || $INFO['ismanager'] ) { // only admins and mgrs get messages
$show_msg = true;
}
$link_names = array('flash', 'image', 'media', 'file', 'image');
if(count($winlinks)) {
$link_names = array_diff($link_names, $winlinks);
}
$links = array();
foreach ($link_names as $ln) {
$links[$ln] = $userfiles . $ln;
}
$bad_create = false;
$successes = array();
if(@file_exists($userfiles)) {
foreach($links as $name => $path) {
if(!is_link($path)) {
if(file_exists($path) && is_file($path) ){
unlink($path);
}
if(file_exists($path) && is_dir($path) ){
rmdir($path);
}
if(!@symlink($data_media,$path) ) {
$bad_create = true;
if($show_msg) msg("unable to create $name link: $path",-1);
}
else {
$successes[] = $name;
}
}
}
}
else {
if($show_msg) {
msg("Cannot create symlinks for filebrowser. Cannot access: $userfiles ",-1);
}
}
if($bad_create) {
if($show_msg) {
msg("There was an error when trying to create symbolic links in $userfiles. "
. "See fckg/auto_install.pdf or the fckgLite web site" , 2);
}
}
else {
if(count($successes)) {
$links_created = implode(', ',$successes);
msg('The following links were created in the userfiles directory: ' . $links_created,2);
}
}
io_saveFile($meta,$version);
}
function set_session() {
global $USERINFO, $INFO;
global $conf;
global $ID;
global $ACT;
if($this->session_id) return;
$cname = getCacheName($INFO['client'].$ID,'.draft');
$fckl_draft = $cname . '.fckl';
if((isset($ACT) && is_array($ACT)) || isset($_REQUEST['dwedit_preview'])) {
if(isset($ACT['draftdel']) || isset($ACT['cancel']) || isset($_REQUEST['dwedit_preview'])) {
@unlink($fckl_draft);
@unlink($cname);
}
}
if(file_exists($cname)) {
if(file_exists($fckl_draft)) {
unlink($fckl_draft);
}
@rename($cname, $fckl_draft);
}
$session_string = session_id();
$this->session_id = $session_string;
$_SESSION['dwfck_id'] = $session_string;
$default_fb = $this->getConf('default_fb');
if($default_fb == 'none') {
$acl = 255;
}
else {
$acl = auth_quickaclcheck($ID);
}
$_SESSION['dwfck_acl'] = $acl;
if($this->getConf('openfb') || $acl == 255) {
$_SESSION['dwfck_openfb'] = 'y';
}
else {
$_SESSION['dwfck_openfb'] = 'n';
}
$_SESSION['dwfck_grps'] = $USERINFO['grps'];
$_SESSION['dwfck_client'] = $INFO['client'];
$_SESSION['dwfck_sepchar'] = $conf['sepchar'] ;
$_SESSION['dwfck_conf'] = array('sepchar'=> $conf['sepchar'],
'isadmin'=>($INFO['isadmin'] || $INFO['ismanager']),
'deaccent'=>$conf['deaccent'], 'useslash'=>$conf['useslash']);
$elems = explode(':', $ID);
array_pop($elems);
$_SESSION['dwfck_ns'] = implode(':',$elems);
$_SESSION['dwfck_top'] = implode('/',$elems);
$_SESSION['dwfck_del'] = $this->getConf('acl_del');
// temp fix for puzzling encoding=url bug in frmresourceslist.html,
// where image loading is processed in GetFileRowHtml()
if(preg_match('/fckg:fckeditor:userfiles:image/',$ID)) {
$_SESSION['dwfck_ns'] = "";
$_SESSION['dwfck_top'] = "";
}
// $expire = time()+60*60*24*30;
$expire = null;
setcookie('FCK_NmSp_acl',$session_string, $expire, '/');
setcookie('FCK_SCAYT',$this->getConf('scayt'), $expire, '/');
setcookie('FCK_SCAYT_AUTO',$this->getConf('scayt_auto'), $expire, '/');
$scayt_lang = $this->getConf('scayt_lang');
if(isset($scayt_lang)) {
list($scayt_lang_title,$scayt_lang_code) = explode('/',$scayt_lang);
if($scayt_lang_code!="en_US") {
setcookie('FCK_SCAYT_LANG',$scayt_lang_code, $expire, '/');
}
}
if ($this->getConf('winstyle')) {
setcookie('FCKConnector','WIN', $expire, DOKU_BASE);
}
if ($this->dokuwiki_priority) {
if(isset($_COOKIE['FCKG_USE']) && $_COOKIE['FCKG_USE'] == 'other') {
$expire = time() -60*60*24*30;
setcookie('FCKG_USE','_false_', $expire, '/');
}
else {
setcookie('FCKG_USE','_false_', $expire, '/');
}
}
}
function file_type(&$event, $param) {
global $ACT, $TEXT;
global $USERINFO, $INFO, $ID;
$this->check_userfiles();
if(isset($_COOKIE['FCK_NmSp'])) $this->set_session();
/* set cookie to pass namespace to FCKeditor's media dialog */
// $expire = time()+60*60*24*30;
$expire = null;
setcookie ('FCK_NmSp',$ID, $expire, '/');
/* Remove TopLevel cookie */
if(isset($_COOKIE['TopLevel'])) {
setcookie("TopLevel", $_REQUEST['TopLevel'], time()-3600, '/');
}
if(!isset($_REQUEST['id']) || isset($ACT['preview'])) return;
if(isset($_REQUEST['do']) && isset($_REQUEST['do']['edit'])) {
$_REQUEST['do'] = 'edit';
}
}
function loadScript(&$event) {
echo <<
SCRIPT;
}
/**
* Handle features need for DW Edit:
* 1. load script, if not loaded
* 2. Re-label Cancel Button "Exit" when doing a preview
* 3. set up $REQUEST value to identify a preview when in DW Edit , used in
* set_session to remove fckgLite and DW drafts if present after a DW preview
*/
function setupDWEdit(&$event) {
global $ACT;
$url = DOKU_BASE . 'lib/plugins/fckg/scripts/script-cmpr.js';
echo <<
SCRIPT;
if(isset($_REQUEST['do']) && is_array($_REQUEST['do'])) {
if(isset($_REQUEST['do']['preview'])) {
echo '';
}
}
}
function is_safeUpgraded() {
$safescript = DOKU_PLUGIN . 'fckg/scripts/safeFN_class.js';
if(!file_exists($safescript) ){
return false;
}
$lines = file($safescript );
for($i=0; $i= 31) {
$rencode = true;
}
else {
$list = plugin_list('action');
if(in_array('safefnrecode', $list)){
$rencode = true;
}
elseif(file_exists($conf['datadir'].'_safefn.recoded') ||
file_exists($conf['metadir'].'_safefn.recoded') ||
file_exists($conf['mediadir'].'_safefn.recoded') )
{
$rencode = true;
}
}
if($rencode && !file_exists(DOKU_PLUGIN . 'fckg/saferencode')) {
msg("This version of fckgLite does not support the re-encoded safe filenames. "
. "You risk corrupting your file system. Download an fnrencode version from either gitHub or the fckgLite web site."
. " or the fckgLite web site ",
-1);
}
else if(!$rencode && file_exists(DOKU_PLUGIN . 'fckg/saferencode') && $this->is_safeUpgraded() ) {
msg("This version of fckgLiteSafe requires a newer version of Dokuwiki (2011-05-25 Rincewind or later). You risk corrupting your file system. "
. "To convert this distribution of fckgLite/fckgLiteSafe for use with earlier versions of Dokuwiki, see the README file or "
. " or the fckgLite web site ",
-1);
}
}
function write_debug($data) {
return;
if (!$handle = fopen(DOKU_INC .'meta.txt', 'a')) {
return;
}
if(is_array($data)) {
$data = print_r($data,true);
}
// Write $somecontent to our opened file.
fwrite($handle, "$data\n");
fclose($handle);
}
}