$pth['folder']['base']
MODIFIED FOR CMSimpleSubsites by ge-webdesign.de 2012-09
Search modifications by "CMSimpleSubsites"
MODIFIED FOR CMSimpleCoAuthors by ge-webdesign.de
Moved styles of standard plugins to core.css 2012-07
MODIFIED FOR PLUGINMANAGER by ge-webdesign.de 2012-05
Search modifications by "pluginmanager ("
=========================================================
* Pluginloader Version 2.1 beta 12 (V.2.1.12)
* For the usage in CMSimple up from version V.2.6 unto V.3.2
* (actual release) including CMSimple-XH.
* Handles loading of pluginloader-2.0 and -2.1 compatible plugins.
*
* Created after discussion at CMSimpleforum.com with:
* Martin, mvwd, Till, johnjdoe, Holger and Gert in May 2009.
*
* @author Developer-Team at CMSimpleforum.com
* @link http://www.cmsimpleforum.com
* @version 2.1.11
* @package pluginloader
*
* Download: http://www.cmsimplewiki.com/doku.php/pluginloader/start
*
* Modified after a long discussion at CMSimple forum with Martin, mvwd,
* Till, johnjdoe, Holger and Gert (Mai 2009)
* Changes:
* - The pluginloader contains a new subfolder "page_data" which holds
* synchronised page based data for new plugins like the "meta_tags"
* and "page_params" plugins, written by Martin
* - OOP-written plugins can load a "required_classes.php" from a new
* plugin subfolder "classes"
* - Order of loading plugins changed: 1. classes, 2. config, 3. languages,
* 4. index, 5. css
* - Direct access check changed (code mentioned by Martin & mvwd)
* - For more security, a new constant "PLUGINLOADER_VERSION" included:
* Plugins can check the Pluginloader version for compatibility or to
* perform a direct access check with code like below
* if(!defined('PLUGINLOADER_VERSION') or !constant('PLUGINLOADER_VERSION'))
* die('Direct access not allowed!');
* if(PLUGINLOADER_VERSION < 2.101) die('Your Pluginloader is outdated!');
* - Plugin-Pre-Call: can be used for calling a plugin without CMSimple-Scripting.
* Comes with following improvements:
* - no limitations in size of page (instead of scripting gets not parsed in
* pages >100kB).
* - checks if function is available, prints out an error-message (instead of
* website is dying) or simply nothing.
* - use multiple plugins on one page (instead of just use one script per page).
* - place your plugin wherever you want in content (instead of plugins will be
* returned by standard on bottom of page).
* - you can use the classic CMSimple-Scripting AND pluginPreCall.
*
* Plugin Loader version 2.0 beta 11 for CMSimple v2.6, v2.7 . . . 3.0, 3.2 .....
* Modified by Till after discussion in the German CMSimple forum with Holger and
* Gert (October 2008)
*
* Edited by © Jan Neugebauer (December, 1st 2006)
* http://www.internet-setup.de/cmsimple/
*
* Based on original script by © Michael Svarrer
* http://cmsimpleplugins.svarrer.dk
*
* Updated 22. September 2006 by Peter Andreas Harteg and released under the CMSimple
* license in the CMSimple distrubution with permission by copyright holders.
*
* For licence see notice in /cmsimple/cms.php and http://www.cmsimple.com/?Licence
*
*
* Usage: This plugin loader will load compatible plugins avaliable under
* the plugins folder into CMSimple.
* Step 1 - Create a folder for the plugins (here we call it: "plugins")
* Step 2 - Upload this pluginloader-package to the newly created folder.
* Step 3 - In /cmsimple/config.php set $cf['plugins']['folder']="plugins";
* (or set plugins_folder to plugins under CMSimple configuration settings)
* Step 4 - Installation is done and you should be ready to install plugins
* Install plugins in an extra subfolder per plugin within the folder "plugins"
*/
/**
* Catch all neccessary CMSimple-Variables as global
*
* @global array $cf CMSimple's Config-Array
* @global string $hjs CMSimple's head-/javascript-section
* @global string $sl CMSimple's selected language
* @global string $sn CMSimple's script-name (relative adress including $_GET)
*/
if (stristr($_SERVER['SCRIPT_NAME'], '/plugins/index.php'))
die('Access Denied');
global $cf, $pth, $hjs, $sl, $sn, $title, $pm_datafile_path, $disabled_plugins; // pluginmanager (added ", $pm_datafile_path, $disabled_plugins")
define('PLUGINLOADER', TRUE);
define('PLUGINLOADER_VERSION', 4.1);
// pluginmanager (added)
if(!file_exists('./disabled_plugins.txt'))
{
$pm_datafile_path = $pth['folder']['base'] . 'disabled_plugins.txt';
}
else
{
$pm_datafile_path = './disabled_plugins.txt';
}
if(file_exists($pm_datafile_path))
{
$disabled_plugins = file_get_contents($pm_datafile_path);
}
else
{
$disabled_plugins = ('');
}
// END pluginmanager (added)
/**
* Debug-Mode
* - first: turn off for compatibility with the "original" CMSimple
* - second: call xh_debugmode(), which checks if debug was activated
* @author Holger
* @since V.2.1.09
*/
ini_set('display_errors', 0);
error_reporting(0);
if (function_exists('xh_debugmode'))
{
xh_debugmode();
}
/**
* @global array $pluginloader_cfg Plugin-Loader's Config-Array
*/
global $pluginloader_cfg;
$pluginloader_cfg = array();
$pluginloader_tx = array();
if (!isset($hjs))
{
$hjs = '';
}
if (!isset($cf['plugins']['folder']) OR empty($cf['plugins']['folder']) OR !is_dir($cf['plugins']['folder']))
{
$cf['plugins']['folder'] = 'plugins';
}
$pluginloader_cfg['foldername_pluginloader'] = 'pluginloader';
$pluginloader_cfg['folder_pluginloader'] = $pth['folder']['base'] . $cf['plugins']['folder'] . '/' . $pluginloader_cfg['foldername_pluginloader'] . '/';
$pluginloader_cfg['folder_css'] = $pluginloader_cfg['folder_pluginloader'] . 'css/';
$pluginloader_cfg['folder_languages'] = $pluginloader_cfg['folder_pluginloader'] . 'languages/';
$pluginloader_cfg['file_css'] = $pluginloader_cfg['folder_css'] . 'stylesheet.css';
$pluginloader_cfg['form_namespace'] = 'PL3bbeec384_';
// If pluginloader language is missing, copy default.php or en.php
if (!file_exists($pluginloader_cfg['folder_languages'] . $sl . '.php'))
{
if (file_exists($pluginloader_cfg['folder_languages'] . 'default.php'))
{
copy($pluginloader_cfg['folder_languages'] . 'default.php', $pluginloader_cfg['folder_languages'] . $sl . '.php');
}
elseif
(file_exists($pluginloader_cfg['folder_languages'] . 'en.php'))
{
copy($pluginloader_cfg['folder_languages'] . 'en.php', $pluginloader_cfg['folder_languages'] . $sl . '.php');
}
}
// pluginloader language settings (main, second languages and subsites)
if(file_exists($pluginloader_cfg['folder_languages'] . $sl . '.php'))
{
$pluginloader_cfg['language'] = $sl;
}
else
{
$pluginloader_cfg['language'] = 'en';
}
// END pluginloader language settings (main, second languages and subsites)
// Load default plugin language
if (file_exists($pth['folder']['plugins'] . $pluginloader_cfg['foldername_pluginloader'] . '/languages/default.php'))
{
include $pth['folder']['plugins'] . $pluginloader_cfg['foldername_pluginloader'] . '/languages/default.php';
}
// include Plugin Loader language file
$pluginloader_cfg['file_language'] = $pluginloader_cfg['folder_languages'] . $pluginloader_cfg['language'] . '.php';
if (!include_once($pluginloader_cfg['file_language']))
{
echo 'Language file for Plugin Loader not found!' . tag('br') . 'File: ' . $pluginloader_cfg['file_language'] . tag('br') . 'Current Path: ' . $_SERVER['PHP_SELF'] . tag('hr');
}
/**
* If admin is logged in, create an array with all plugins, having admin.php
*/
if ($adm)
{
$i = 0;
$handle = opendir($pth['folder']['plugins']);
$found_plugins = false;
while (FALSE !== ($plugin = readdir($handle)))
{
if ($plugin != '.' && $plugin != '..' && is_dir($pth['folder']['plugins'] . $plugin))
{
PluginFiles($plugin);
if (file_exists($pth['file']['plugin_admin']))
{
$admin_plugins[$i] = $plugin;
$found_plugins = true;
$i++;
}
}
}
closedir($handle);
natcasesort($admin_plugins);
$o .= ' ';
}
/**
* Bridge to page data
*/
require_once $pth['folder']['plugins'] . $pluginloader_cfg['foldername_pluginloader'] . '/page_data/index.php';
/**
* Include plugin (and plugin files)
*/
$handle = opendir($pth['folder']['plugins']);
while (FALSE !== ($plugin = readdir($handle)))
{
if ($plugin != "." AND $plugin != ".." AND $plugin != $pluginloader_cfg['foldername_pluginloader'] AND is_dir($pth['folder']['plugins'] . $plugin) && !stristr($disabled_plugins, '|||'.$plugin.'|||')) // pluginmanager (added " && !stristr($disabled_plugins, '|||'.$plugin.'|||')")
{
PluginFiles($plugin);
// Load plugin required_classes
if (file_exists($pth['file']['plugin_classes']))
{
include($pth['file']['plugin_classes']);
}
}
}
closedir($handle);
$handle = opendir($pth['folder']['plugins']);
while (FALSE !== ($plugin = readdir($handle)))
{
if ($plugin != "." AND $plugin != ".." AND $plugin != $pluginloader_cfg['foldername_pluginloader'] AND is_dir($pth['folder']['plugins'] . $plugin) && !stristr($disabled_plugins, '|||'.$plugin.'|||')) // pluginmanager (added "&& !stristr($disabled_plugins, '|||'.$plugin.'|||')")
{
PluginFiles($plugin);
// Load plugin config
if (file_exists($pth['folder']['plugins'].$plugin.'/config/defaultconfig.php'))
{
include($pth['folder']['plugins'].$plugin.'/config/defaultconfig.php');
}
if (file_exists($pth['file']['plugin_config']))
{
include($pth['file']['plugin_config']);
}
// If plugin language is missing, copy default.php or en.php
if (!file_exists($pth['file']['plugin_language']))
{
if (file_exists($pth['folder']['plugins'].$plugin.'/languages/default.php'))
{
copy($pth['folder']['plugins'].$plugin.'/languages/default.php', $pth['file']['plugin_language']);
}
elseif
(file_exists($pth['folder']['plugins'].$plugin.'/languages/en.php'))
{
copy($pth['folder']['plugins'].$plugin.'/languages/en.php', $pth['file']['plugin_language']);
}
}
// Load default plugin language
if (file_exists($pth['folder']['plugins'] . $plugin . '/languages/default.php'))
{
include $pth['folder']['plugins'] . $plugin . '/languages/default.php';
}
// Load plugin language
if (file_exists($pth['file']['plugin_language']))
{
include($pth['file']['plugin_language']);
}
// Load plugin index.php or die
if (file_exists($pth['file']['plugin_index']) AND !include($pth['file']['plugin_index']))
{
die($pluginloader_tx['error']['plugin_error'] . $pluginloader_tx['error']['cntopen'] . $pth['file']['plugin_index']);
}
// Add plugin css to the header of CMSimple/Template
if (file_exists($pth['file']['plugin_stylesheet']))
{
$hjs .= tag('link rel="stylesheet" href="' . $pth['file']['plugin_stylesheet'] . '" type="text/css"') . "\n";
}
}
}
closedir($handle);
// Load admin functions (admin.php, if exists) of plugin
if ($adm)
{
if ($found_plugins == true)
{
foreach ($admin_plugins as $plugin)
{
PluginFiles($plugin);
// pluginmanager (changed) - prevent loading admin.php for disabled plugins
if (file_exists($pth['file']['plugin_admin']) && !stristr($disabled_plugins, '|||'.$plugin.'|||'))
{
include($pth['file']['plugin_admin']);
}
else
{
if($_SERVER['QUERY_STRING'] == $plugin.'&normal')
{
$o.='
' . $pluginloader_tx['pluginmanager']['message_plugin_disabled1'] . ' "' . $plugin . '" ' . $pluginloader_tx['pluginmanager']['message_plugin_disabled2'] . '
Pluginmanager »
';
}
}
// END pluginmanager (changed)
}
}
// ########## bridge to page data ##########
$o .= $pd_router->create_tabs($s);
// #########################################
}
// Pre-Call Plugins
preCallPlugins();
// Plugin functions
unset($plugin);
/**
* Function PluginFiles()
* Set plugin filenames.
*
* @param string $plugin Name of the plugin, the filenames
* will be set for.
*
* @global array $cf CMSimple's Config-Array
* @global string $pth CMSimple's configured pathes in an array
* @global string $sl CMSimple's selected language
* @global array $pluginloader_cfg Plugin-Loader's Config-Array
*/
function PluginFiles($plugin)
{
global $cf, $pth, $sl;
global $pluginloader_cfg;
$pth['folder']['plugin'] = $pth['folder']['plugins'] . $plugin . '/';
$pth['folder']['plugin_classes'] = $pth['folder']['plugins'] . $plugin . '/classes/';
// CMSimpleSubsites
if(file_exists('./plugins/' . $plugin . '/config/config.php'))
{
$pth['folder']['plugin_config'] = './plugins/' . $plugin . '/config/';
}
else
{
$pth['folder']['plugin_config'] = $pth['folder']['plugins'] . $plugin . '/config/';
}
if(file_exists('./plugins/' . $plugin . '/languages/' . $sl . '.php'))
{
$pth['folder']['plugin_languages'] = './plugins/' . $plugin . '/languages/';
}
else
{
$pth['folder']['plugin_languages'] = $pth['folder']['plugins'] . $plugin . '/languages/';
}
if(file_exists('./plugins/' . $plugin . '/css/stylesheet.css'))
{
$pth['folder']['plugin_css'] = './plugins/' . $plugin . '/css/';
}
else
{
$pth['folder']['plugin_css'] = $pth['folder']['plugins'] . $plugin . '/css/';
}
// END CMSimpleSubsites
$pth['folder']['plugin_content'] = $pth['folder']['plugins'] . $plugin . '/content/';
$pth['folder']['plugin_help'] = $pth['folder']['plugins'] . $plugin . '/help/';
$pth['folder']['plugin_includes'] = $pth['folder']['plugins'] . $plugin . '/includes/';
$pth['file']['plugin_index'] = $pth['folder']['plugin'] . 'index.php';
$pth['file']['plugin_admin'] = $pth['folder']['plugin'] . 'admin.php';
$pth['file']['plugin_language'] = $pth['folder']['plugin_languages'] . $sl . '.php';
$pth['file']['plugin_classes'] = $pth['folder']['plugin_classes'] . 'required_classes.php';
$pth['file']['plugin_config'] = $pth['folder']['plugin_config'] . 'config.php';
$pth['file']['plugin_stylesheet'] = $pth['folder']['plugin_css'] . 'stylesheet.css';
$pth['file']['plugin_help'] = $pth['folder']['plugin_help'] . 'help_' . strtolower($pluginloader_cfg['language']) . '.htm';
if (!file_exists($pth['file']['plugin_help']))
{
$pth['file']['plugin_help'] = $pth['folder']['plugin_help'] . 'help_en.htm';
}
if (!file_exists($pth['file']['plugin_help']) AND file_exists($pth['folder']['plugin_help'] . 'help.htm'))
{
$pth['file']['plugin_help'] = $pth['folder']['plugin_help'] . 'help.htm';
}
}
/**
* Function PluginMenu()
* Create menu of plugin (add row, add tab), constructed as a table.
*
* @param string $add Add a ROW, a TAB or DATA (Userdefineable content). SHOW will return the menu.
* @param string $link The link, the TAB will lead to.
* @param string $target Target of the link (with(!) 'target=').
* @param string $text Description of the TAB.
* @param array $style Array with style-data for the containing table-cell
*/
function PluginMenu($add='', $link='', $target='', $text='', $style=ARRAY())
{
$add = strtoupper($add);
if (!isset($GLOBALS['pluginloader']['plugin_menu']))
{
$GLOBALS['pluginloader']['plugin_menu'] = '';
}
if (!isset($style['row']))
{
$style['row'] = 'class="edit" style="width: 100%; border-collapse: collapse;"';
}
if (!isset($style['tab']))
{
$style['tab'] = '';
}
if (!isset($style['link']))
{
$style['link'] = '';
}
if (!isset($style['data']))
{
$style['data'] = '';
}
$menu_row = '' . "\n" . '' . "\n" . '{{TAB}}
' . "\n" . '
' . "\n" . "\n";
$menu_tab = '{{TEXT}} | ' . "\n";
$menu_tab_data = '{{TEXT}} | ' . "\n";
// Add new row for menu of plugin (or Plugin Loader)
if ($add == 'ROW')
{
$new_menu_row = $menu_row;
$new_menu_row = str_replace('{{STYLE_ROW}}', $style['row'], $new_menu_row);
$GLOBALS['pluginloader']['plugin_menu'] .= $new_menu_row;
}
// Add a new tab to the menu row
if ($add == 'TAB')
{
$new_menu_tab = $menu_tab;
$new_menu_tab = str_replace('{{STYLE_TAB}}', $style['tab'], $new_menu_tab);
$new_menu_tab = str_replace('{{STYLE_LINK}}', $style['link'], $new_menu_tab);
$new_menu_tab = str_replace('{{LINK}}', $link, $new_menu_tab);
$new_menu_tab = str_replace('{{TARGET}}', $target, $new_menu_tab);
$new_menu_tab = str_replace('{{TEXT}}', $text, $new_menu_tab);
// Add tab to row
$GLOBALS['pluginloader']['plugin_menu'] = str_replace('{{TAB}}', $new_menu_tab . '{{TAB}}', $GLOBALS['pluginloader']['plugin_menu']);
}
// Add a new tab to the menu row
// Here: user defineable data
if ($add == 'DATA')
{
$new_menu_tab_data = $menu_tab_data;
$new_menu_tab_data = str_replace('{{STYLE_DATA}}', $style['data'], $new_menu_tab_data);
$new_menu_tab_data = str_replace('{{TEXT}}', $text, $new_menu_tab_data);
// Add tab to row
$GLOBALS['pluginloader']['plugin_menu'] = str_replace('{{TAB}}', $new_menu_tab_data . '{{TAB}}', $GLOBALS['pluginloader']['plugin_menu']);
}
// Show complete menu
if ($add == 'SHOW')
{
$GLOBALS['pluginloader']['plugin_menu'] = str_replace('{{TAB}}', '', $GLOBALS['pluginloader']['plugin_menu']);
$menu = $GLOBALS['pluginloader']['plugin_menu'];
$GLOBALS['pluginloader']['plugin_menu'] = '';
return $menu;
}
}
/**
* Function PluginReadFile()
* Read content from a given file.
*
* @param string $file Name of the file to read.
*
* @return array If succesfull, return an array with data and success-message.
*/
function PluginReadFile($file='')
{
global $pluginloader_tx;
$is_read = ARRAY();
$is_read['success'] = FALSE;
$is_read['msg'] = '';
$is_read['content'] = '';
if (!file_exists($file))
{
$is_read['msg'] = $pluginloader_tx['error']['cntopen'] . $file;
}
else
{
if (!is_readable($file))
{
$is_read['msg'] = $pluginloader_tx['error']['notreadable'] . $file;
}
else
{
if ($fh = fopen($file, "rb"))
{
$is_read['content'] = fread($fh, filesize($file));
fclose($fh);
$is_read['content'] = str_replace("\r\n", "\n", $is_read['content']);
$is_read['content'] = str_replace("\r", "\n", $is_read['content']);
$is_read['msg'] = $pluginloader_tx['success']['saved'] . $file;
$is_read['success'] = TRUE;
}
}
}
return $is_read;
}
/**
* Function PluginWriteFile()
* Write content to a given file.
*
* @global array $pluginloader_tx Plugin-loader's text-array
*
* @param string $file Name of the file to write.
* @param string $content Content, that will be written in the file.
* @param string $exists If set to TRUE, the function returns error-message if file is not available.
* @param string $append If set to TRUE, data will be appended to existing data in the file.
*
* @return array If succesfull, return an array with success-message.
*/
function PluginWriteFile($file='', $content='', $exists=FALSE, $append=FALSE)
{
global $pluginloader_tx;
if ($append == TRUE)
{
$write_mode = 'a+b';
}
else
{
$write_mode = 'w+b';
}
$is_written = ARRAY();
$is_written['success'] = FALSE;
$is_written['msg'] = '';
$do_write = TRUE;
if (!file_exists($file) AND $exists == TRUE)
{
$do_write = FALSE;
$is_written['msg'] = $pluginloader_tx['error']['cntopen'] . $file;
}
if (file_exists($file) AND !is_writeable($file))
{
$do_write = FALSE;
$is_written['msg'] = '' . $pluginloader_tx['error']['cntwriteto'] . $file . '
';
}
if ($do_write == TRUE)
{
if ($fh = fopen($file, $write_mode))
{
fwrite($fh, $content);
fclose($fh);
$is_written['msg'] = $pluginloader_tx['success']['saved'] . $file;
$is_written['success'] = TRUE;
}
}
return $is_written;
}
/**
* Function PluginPrepareConfigData()
* Prepare config data for writing to file.
*
* @param string $var_name Name of the variable ($cf => $var_name = cf)
* @param string $data Array of data, that will be converted to text for saving in (php-)textfile.
* @param string $plugin If filled, the created variable will be extended by a sub-array with this index.
*
* @return string Returns the prepared data for saving.
*/
function PluginPrepareConfigData($var_name='', $data=ARRAY(), $plugin='')
{
$save_data = " $value)
{
$save_data .= "\t" . '$' . $var_name;
if (!empty($plugin))
{
$save_data .= '[\'' . $plugin . '\']';
}
$save_data .= '[\'' . $key . '\']="' . trim(str_replace("\\'", "'", ((get_magic_quotes_gpc() === 1) ? $value : addslashes($value)))) . '";' . "\n";
}
$save_data .= "\n?>";
return $save_data;
}
/**
* Function PluginPrepareTextData()
* Prepare text data for writing to file.
*
* @param string $data The text-data, that will be prepared for saving to file.
*
* @return string Returns the prepared data for saving.
*/
function PluginPrepareTextData($data)
{
return (get_magic_quotes_gpc() === 1) ? stripslashes($data) : $data;
}
/**
* Function PluginSaveForm()
* Creates form for config data.
*
* If $hint['mode_donotshowvarnames'] == TRUE, variable
* indexes are not shown, but text information.
* (e.g. for index 'my_name' -> $plugin_tx['example_plugin']['cf_my_name'])
*
* @global array $pluginloader_tx Plugin-loader's text-array
*
* @param array $form Array, that contains data how the form will be created.
* @param array $style Array, that contains style-data for the div and the form.
* @param array $data Data, that will be shown in the form (in a textarea or in input-fields).
* @param array $hint Array with hints in popups for the config-variables.
*
* @return string Returns the created form.
*/
function PluginSaveForm($form=ARRAY(), $style=ARRAY(), $data=ARRAY(), $hint=ARRAY())
{
global $pluginloader_tx, $admin;
$saveform = '';
if (!isset($form['type']) OR ($form['type'] != 'TEXT' AND $form['type'] != 'CONFIG'))
{
$saveform .= PluginDebugger('invalid_value', debug_backtrace(), $$data, $form['type']);
}
elseif ($form['type'] == 'CONFIG' AND (!is_array($data) OR count($data) == 0))
{
$saveform .= PluginDebugger('empty', debug_backtrace(), $$data, '');
}
else
{
$form_keys = ARRAY('action', 'caption', 'errormsg', 'method', 'value_action', 'value_admin', 'value_submit');
$style_keys = ARRAY('div', 'divcaption', 'form', 'submit', 'table', 'tdcaption', 'tdconfig', 'tdhint', 'textarea', 'input', 'inputmax');
foreach ($form_keys AS $key)
{
if (!isset($form[$key]))
{
$form[$key] = '';
}
}
foreach ($style_keys AS $key)
{
if (!isset($style[$key]))
{
$style[$key] = '';
}
}
$saveform .= $form['errormsg'];
$saveform .= '' . "\n";
$saveform .= '
' . "\n";
}
$saveform .= "\n" . '
' . "\n";
return $saveform;
}
/**
* Function print_plugin_admin()
* Create plugin menu tabs.
*
* @param string $main Set to OFF, if menu is not needed.
*
* @return string Returns the created plugin-menu.
*/
function print_plugin_admin($main)
{
global $sn, $plugin, $pth, $sl, $cf;
global $pluginloader_tx, $plugin_tx;
initvar('plugin_text');
initvar('action');
initvar('admin');
$t = '';
$css = '';
$config = '';
$language = '';
$help = '';
$main = strtoupper($main);
PluginFiles($plugin);
if (file_exists($pth['file']['plugin_stylesheet']))
{
$css = 'ON';
}
if (file_exists($pth['file']['plugin_config']))
{
//include($pth['file']['plugin_config']);
$config = 'ON';
}
if (file_exists($pth['file']['plugin_language']))
{
//include($pth['file']['plugin_language']);
$language = 'ON';
}
if (file_exists($pth['file']['plugin_help']))
{
$help = 'ON';
}
/**
* Use preset texts for the menu, if the plugin itself did not define text for the menu
*/
if (isset($plugin_tx[$plugin]['menu_main']) AND !empty($plugin_tx[$plugin]['menu_main']))
{
$pluginloader_tx['menu']['tab_main'] = $plugin_tx[$plugin]['menu_main'];
}
if (isset($plugin_tx[$plugin]['menu_css']) AND !empty($plugin_tx[$plugin]['menu_css']))
{
$pluginloader_tx['menu']['tab_css'] = $plugin_tx[$plugin]['menu_css'];
}
if (isset($plugin_tx[$plugin]['menu_config']) AND !empty($plugin_tx[$plugin]['menu_config']))
{
$pluginloader_tx['menu']['tab_config'] = $plugin_tx[$plugin]['menu_config'];
}
if (isset($plugin_tx[$plugin]['menu_language']) AND !empty($plugin_tx[$plugin]['menu_language']))
{
$pluginloader_tx['menu']['tab_language'] = $plugin_tx[$plugin]['menu_language'];
}
if (isset($plugin_tx[$plugin]['menu_help']) AND !empty($plugin_tx[$plugin]['menu_help']))
{
$pluginloader_tx['menu']['tab_help'] = $plugin_tx[$plugin]['menu_help'];
}
$plugin_menu_style = ARRAY();
PluginMenu('ROW', '', '', '', $plugin_menu_style);
if ($main == 'ON')
{
PluginMenu('TAB', $sn . '?&' . $plugin . '&admin=plugin_main&action=plugin_text', '', $pluginloader_tx['menu']['tab_main'], $plugin_menu_style);
}
if($css == 'ON')
{
PluginMenu('TAB', $sn.'?&'.$plugin.'&admin=plugin_stylesheet&action=plugin_text', '', $pluginloader_tx['menu']['tab_css'], $plugin_menu_style);
}
if($config == 'ON')
{
PluginMenu('TAB', $sn.'?&'.$plugin.'&admin=plugin_config&action=plugin_edit', '', $pluginloader_tx['menu']['tab_config'], '');
}
if ($language == 'ON')
{
PluginMenu('TAB', $sn . '?&' . $plugin . '&admin=plugin_language&action=plugin_edit', '', $pluginloader_tx['menu']['tab_language'], '');
}
if ($help == 'ON')
{
PluginMenu('TAB', $pth['file']['plugin_help'], 'target="_blank"', $pluginloader_tx['menu']['tab_help'], '');
}
$t .= PluginMenu('SHOW');
return $t;
}
/**
* Function plugin_admin_common()
*
* Handles reading and writing of plugin files
* (e.g. en.php, config.php, stylesheet.css)
*
* @param bool $action Possible values: 'empty' = Error: empty value detected
* @param array $admin Array, that contains debug_backtrace()-data
* @param bool $plugin The called varname
* @param bool $hint Array with hints for the variables (will be shown as popup)
*
* @global string $sn CMSimple's script-name (relative adress including $_GET)
* @global string $action Ordered action
* @global string $admin Ordered admin-action
* @global string $plugin Name of the plugin, that called this function
* @global string $pth CMSimple's configured pathes in an array
* @global string $tx CMSimple's text-array
* @global string $pluginloader_tx Plugin-Loader's text-array
* @global string $plugin_tx Plugin's text-array
* @global string $plugin_cf Plugin's config-array
*
* @return string Returns the created form or the result of saving the data
*/
function plugin_admin_common($action, $admin, $plugin, $hint=ARRAY())
{
global $sn, $action, $admin, $plugin, $pth, $tx;
global $pluginloader_tx, $plugin_tx, $plugin_cf;
$data = '';
$t = '';
$error_msg = ($admin == '' OR is_writeable($pth['file'][$admin])) ? '' : '' . "\n" . '' . $tx['error']['notwritable'] . ':' . "\n" . '
' . "\n" . '' . "\n" . '- ' . $pth['file'][$admin] . '
' . "\n" . '
' . "\n";
if ($admin == 'plugin_config')
{
$var_name = 'plugin_cf';
$data = $plugin_cf[$plugin];
}
if ($admin == 'plugin_language')
{
$var_name = 'plugin_tx';
$data = $plugin_tx[$plugin];
}
if ($admin == 'plugin_stylesheet')
{
$var_name = 'plugin_text';
}
if ($admin == 'plugin_main')
{
$var_name = 'plugin_text';
}
if ($action == 'plugin_text' OR $action == 'plugin_edit')
{
if (isset($plugin_tx[$plugin]))
{
$hint = array_merge($hint, $plugin_tx[$plugin]);
}
$form = ARRAY();
$style = ARRAY();
$style['form'] = 'class="plugineditform"';
$style['divcaption'] = 'class="plugineditcaption"';
$style['submit'] = 'class="submit"';
$form['action'] = $sn . '?&' . $plugin;
$form['method'] = 'POST';
$form['value_admin'] = $admin;
$form['value_submit'] = ucfirst($tx['action']['save']);
$form['caption'] = ucfirst(str_replace("_", " ", $plugin));
$form['errormsg'] = $error_msg;
if ($action == 'plugin_text')
{
$file_data = PluginReadFile($pth['file'][$admin]);
$data = $file_data['content'];
$form['type'] = 'TEXT';
$form['value_action'] = 'plugin_textsave';
$form['textarea_name'] = 'plugin_text';
$style['div'] = 'class="plugintext"';
$style['textarea'] = 'class="plugintextarea"';
}
if ($action == 'plugin_edit')
{
$form['type'] = 'CONFIG';
$form['value_action'] = 'plugin_save';
$style['div'] = 'class="pluginedit"';
$style['table'] = 'class="pluginedittable"';
$style['tdcaption'] = 'class="plugincfcap"';
$style['tdhint'] = 'class="plugincfhint"';
$style['tdconfig'] = 'class="plugincf"';
$style['input'] = 'class="plugininput"';
$style['inputmax'] = 'class="plugininputmax"';
}
$t .= PluginSaveForm($form, $style, $data, $hint);
}
if ($action == 'plugin_save' OR $action == 'plugin_textsave')
{
if ($action == 'plugin_save')
{
$config_data = ARRAY();
foreach ($data as $key => $value)
{
global $pluginloader_cfg;
$config_data[$key] = $_POST[$pluginloader_cfg['form_namespace'] . $key];
}
$save_data = PluginPrepareConfigData($var_name, $config_data, $plugin);
}
if ($action == 'plugin_textsave')
{
$text_data = $_POST[$var_name];
$save_data = PluginPrepareTextData($text_data);
}
$is_saved = PluginWriteFile($pth['file'][$admin], $save_data);
$t .= tag('br') . '' . $is_saved['msg'] . '' . tag('br');
}
return $t;
}
/**
* Function PluginDebugger()
*
* @param bool $error Possible values: 'empty' = Error: empty value detected
* @param array $caller Array, that contains debug_backtrace()-data
* @param bool $varname The called varname
* @param bool $value The value of the var
*
* @global array $pluginloader_tx Plugin-loader's text-array
*
* @return string Returns result of debugging as text
*/
function PluginDebugger($error=FALSE, $caller=FALSE, $varname=FALSE, $value=FALSE)
{
global $pluginloader_tx;
$debug = '';
$debug .= $pluginloader_tx['error']['plugin_error'] . '';
switch ($error)
{
case 'empty': $debug .= 'empty/no data (' . $varname . ')';
break;
default: $debug .= 'undefined error (' . $varname . ')';
}
$debug .= tag('br') . 'in' . tag('br');
foreach ($caller AS $call)
{
$debug .= 'File: ' . $call['file'] . ' - ' . $call['function'] . ' - Line: ' . $call['line'] . tag('br');
}
return $debug;
}
/**
* Function preCallPlugins() => Pre-Call of Plugins.
*
* All Plugins which are called through a function-call
* can use this. At the moment it is'nt possible to do
* this with class-based plugins. They need to be called
* through standard-CMSimple-Scripting.
*
* Call a plugin: place this in your code (example):
* {{{PLUGIN:pluginfunction('parameters');}}}
*
* Call a built-in function (at the moment only one for
* demonstration):
* {{{HOME}}} or: {{{HOME:name_of_Link}}}
* This creates a link to the first page of your CMSimple-
* Installation.
*
* @param pageIndex - added for search
* @global bool $edit TRUE if edit-mode is active
* @global array $c Array containing all contents of all CMSimple-pages
* @global integer $s Pagenumber of active page
* @global array $u Array containing URLs to all CMSimple-pages
*
* @author mvwd
* @since V.2.1.02
*/
function preCallPlugins($pageIndex = -1)
{
global $edit, $c, $s, $u;
if (!$edit)
{
if ((int) $pageIndex > - 1 && (int) $pageIndex < count($u))
{
$as = $pageIndex;
}
else
{
$as = $s < 0 ? 0 : $s;
}
$c[$as] = evaluate_plugincall($c[$as]);
}
}
?>