[
'um_data' => 'none',
],
]
];
$section = 'admin';
require_once('tiki-setup.php');
$dcslib = TikiLib::lib('dcs');
$bannerlib = TikiLib::lib('banner');
$rsslib = TikiLib::lib('rss');
$polllib = TikiLib::lib('poll');
$structlib = TikiLib::lib('struct');
$modlib = TikiLib::lib('mod');
$menulib = TikiLib::lib('menu');
$userHasAssignedModules = $prefs['user_assigned_modules'] === 'y'
&& TikiLib::lib('usermodules')->user_has_assigned_modules($user);
$smarty->assign('wysiwyg', 'n');
if (isset($_REQUEST['wysiwyg']) && $_REQUEST['wysiwyg'] == 'y') {
$smarty->assign('wysiwyg', 'y');
}
$access->check_permission(['tiki_p_admin_modules']);
$auto_query_args = ['show_hidden_modules'];
if (! empty($prefs['module_file'])) {
$access->display_error(
'',
tr(
'Module file in use. You need to edit %0 to configure your modules.',
$tiki_p_admin === 'y' ? $prefs['module_file'] : basename($prefs['module_file'])
)
);
}
$access->check_feature(['feature_jquery_ui']);
// Values for the user_module edit/create form
$smarty->assign('um_tgt_module', '');
$smarty->assign('um_name', '');
$smarty->assign('um_title', '');
$smarty->assign('um_data', '');
$smarty->assign('um_parse', '');
$smarty->assign('assign_name', '');
//$smarty->assign('assign_title','');
$smarty->assign('assign_position', '');
$smarty->assign('assign_order', '');
$smarty->assign('assign_cache', 0);
$smarty->assign('assign_rows', 10);
$smarty->assign('assign_params', '');
if (isset($_REQUEST['clear_cache']) && $access->checkCsrf()) {
$result = $modlib->clear_cache();
Feedback::note(tr('%0 cache files cleared', $result));
}
$module_groups = [];
$smarty->assign('assign_selected', '');
$smarty->assign('assign_type', '');
$smarty->assign('assign_title', '');
if (! empty($_REQUEST['edit_assign'])) {
$info = $modlib->get_assigned_module($_REQUEST['edit_assign']);
$grps = '';
if (! empty($info['groups'])) {
$module_groups = unserialize($info['groups']);
foreach ($module_groups as $amodule) {
$grps = $grps . ' $amodule ';
}
}
$smarty->assign('module_groups', $grps);
if (isset($info['ord'])) {
$cosa = '' . $info['ord'];
} else {
$cosa = '';
}
$smarty->assign_by_ref('assign_name', $info['name']);
//$smarty->assign_by_ref('assign_title',$info['title']);
$smarty->assign_by_ref('assign_position', $info['position']);
$smarty->assign_by_ref('assign_cache', $info['cache_time']);
$smarty->assign_by_ref('assign_type', $info['type']);
$smarty->assign_by_ref('assign_order', $cosa);
$smarty->assign_by_ref('info', $info);
if (! $info['name']) {
$smarty->assign('assign_selected', $_REQUEST['edit_assign']);
}
$modinfo = $modlib->get_module_info($info['name']);
if ($modinfo['type'] != 'function') {
$smarty->assign_by_ref('assign_rows', $info['rows']);
$smarty->assign_by_ref('assign_params', $info['params']); // For old-style (user) modules
} else {
if (empty($info['params'])) {
$info['params'] = [];
}
$modlib->dispatchValues($info['params'], $modinfo['params']);
if (isset($modinfo['params']['rows'])) {
$modinfo['params']['rows']['value'] = $info['rows'];
}
}
$smarty->assign('assign_info', $modinfo);
}
//post is used for preview because there is another submit item on the form requiring it
//and using get for just the preview element would result in exposing the ticket
//non-state-changing-action
if (isset($_REQUEST['edit_assign']) || isset($_REQUEST['preview'])) { // will be 0 for a new assignment
$cookietab = 2;
}
if (! empty($_REQUEST['unassign']) && $access->checkCsrf()) {
$info = $modlib->get_assigned_module($_REQUEST['unassign']);
$result = $modlib->unassign_module($_REQUEST['unassign']);
if ($result) {
Feedback::success(tr('Module unassigned'));
$logslib->add_log('adminmodules', 'unassigned module ' . $info['name']);
} else {
Feedback::error(tr('Module not unassigned'));
}
}
$addonMsg = ' ' . tr('Displayed order may not change if other modules now have the same order rank.')
. $userHasAssignedModules ? ' '
. tr(
'Also, displayed order may not change for you since you have assigned a custom order for modules %0here%1',
'',
''
) : '';
if (! empty($_REQUEST['modup']) && $access->checkCsrf()) {
$result = $modlib->module_up($_POST['modup']);
if ($result && $result->numRows()) {
Feedback::success(tr('Standard module display order moved up.') . $addonMsg);
} else {
Feedback::error(tr('Standard module display order not moved up'));
}
}
if (! empty($_REQUEST['moddown']) && $access->checkCsrf()) {
$result = $modlib->module_down($_POST['moddown']);
if ($result && $result->numRows()) {
Feedback::success(tr('Standard module display order moved down.') . $addonMsg);
} else {
Feedback::error(tr('Standard module display order not moved down'));
}
}
// TODO these requests don't seem to be used so remove code once confirmed
/*if (! empty($_REQUEST['modleft'])) {
check_ticket('admin-modules');
$modlib->module_left($_REQUEST['modleft']);
}
if (! empty($_REQUEST['modright'])) {
check_ticket('admin-modules');
$modlib->module_right($_REQUEST['modright']);
}*/
if (! empty($_REQUEST['module-order']) && $access->checkCsrf()) {
$module_order = json_decode($_REQUEST['module-order']);
$result = $modlib->reorder_modules($module_order);
if ($result) {
Feedback::success(tr('Standard display of modules reordered or moved.') . $addonMsg);
} else {
$msg = tr('Standard display of modules not reordered or moved.');
$msg .= $userHasAssignedModules ? ' '
. tr(
'If you receive this error after attempting more than once to move a module, it may be because the standard display has already been changed but it is not visible to you because you have assigned a custom order for modules %0here%1.',
'',
''
) : '';
Feedback::error($msg);
}
}
/* Edit or delete a user module */
if (isset($_REQUEST['um_update']) && $access->checkCsrf()) {
if (empty($_REQUEST['um_name'])) {
Feedback::errorPage(tr('Cannot create or update module: You need to specify a name for the module'));
}
if (empty($_REQUEST['um_data'])) {
Feedback::errorPage(tr('Cannot create or update module: You cannot leave the data field empty'));
}
if ($_REQUEST['um_update'] == tra('Create') && in_array(strtolower($_REQUEST['um_name']), $modlib->get_all_modules())) {
Feedback::errorPage(tr('A module with that "name" already exists, please choose another'));
}
$_REQUEST['um_update'] = urldecode($_REQUEST['um_update']);
$smarty->assign_by_ref('um_title', $_REQUEST['um_title']);
$smarty->assign_by_ref('um_data', $_REQUEST['um_data']);
$smarty->assign_by_ref('um_parse', $_REQUEST['um_parse']);
$result = $modlib->replace_user_module($_REQUEST['um_name'], $_REQUEST['um_title'], $_REQUEST['um_data'], $_REQUEST['um_parse'], $_REQUEST['um_tgt_module']);
if ($result && $result->numRows()) {
$msg = $_REQUEST['um_update'] == tr('Create') ? tr('Custom module created') : tr('Custom module modified');
Feedback::success($msg);
} else {
$smarty->assign_by_ref('um_tgt_module', $_REQUEST['um_tgt_module']);
$smarty->assign_by_ref('um_name', $_REQUEST['um_name']);
$msg = $_REQUEST['um_update'] == tr('Create') ? tr('Custom not module created') : tr('Custom module not modified');
Feedback::error($msg);
}
$logslib->add_log('adminmodules', 'changed custom module ' . $_REQUEST['um_name']);
}
//post is used for preview because there is another submit item on the form requiring it
//and using get for just the preview element would result in exposing the ticket
//non-state-changing-action
if (isset($_REQUEST['assign']) || isset($_REQUEST['preview'])) {
// Verify that required parameters are present
$missing_params = [];
$modinfo = $modlib->get_module_info($_REQUEST['assign_name']);
if ($_REQUEST['moduleId'] > 0) {
foreach ($modinfo['params'] as $pname => $param) {
if ($param['required'] && empty($_REQUEST['assign_params'][$pname])) {
$missing_params[] = $param['name'];
}
}
}
$smarty->assign('missing_params', $missing_params);
}
$smarty->assign('preview', 'n');
//post is used for preview because there is another submit item on the form requiring it
//and using get for just the preview element would result in exposing the ticket
//non-state-changing-action
if (isset($_REQUEST['preview'])) {
$smarty->assign('preview', 'y');
$smarty->assign_by_ref('assign_name', $_REQUEST['assign_name']);
if (! is_array($_REQUEST['assign_params'])) {
parse_str($_REQUEST['assign_params'], $module_params);
} else {
$module_params = $_REQUEST['assign_params'];
}
$smarty->assign_by_ref('module_params', $module_params);
if (isset($module_params['title'])) {
$smarty->assign('tpl_module_title', tra($module_params['title']));
}
if (isset($_REQUEST['assign_rows'])) {
$module_rows = $_REQUEST['assign_rows'];
$smarty->assign_by_ref('assign_rows', $_REQUEST['assign_rows']);
} elseif (isset($_REQUEST['assign_params']['rows'])) {
$module_rows = $_REQUEST['assign_params']['rows'];
} else {
$module_rows = 10;
}
if ($modlib->is_user_module($_REQUEST['assign_name'])) {
$info = $modlib->get_user_module($_REQUEST['assign_name']);
$smarty->assign_by_ref('user_title', $info['title']);
$infoParsed = $modlib->parse($info);
$smarty->assign_by_ref('user_data', $infoParsed['data']);
try {
$data = $smarty->fetch('modules/user_module.tpl');
} catch (Exception $e) {
$smarty->assign(
'msg',
tr(
'There is a problem with your custom module "%0": ' . '
' . $e->getMessage()
. '
' . '' . tr('Click here to edit the module')
. '',
$_REQUEST['assign_name']
)
);
$smarty->display('error.tpl');
die;
}
} else {
$phpfile = 'modules/mod-' . $_REQUEST['assign_name'] . '.php';
$phpfuncfile = 'modules/mod-func-' . $_REQUEST['assign_name'] . '.php';
$template = 'modules/mod-' . $_REQUEST['assign_name'] . '.tpl';
if (file_exists($phpfile)) {
include($phpfile);
} elseif (file_exists($phpfuncfile)) {
if (isset($_REQUEST['assign_params']['rows'])) {
$module_rows = $_REQUEST['assign_params']['rows'];
} else {
$module_rows = 10;
}
include_once($phpfuncfile);
$function = 'module_' . $_REQUEST['assign_name'];
if (function_exists($function)) {
$function(
[
'name' => $_REQUEST['assign_name'],
'position' => $_REQUEST['assign_position'],
'ord' => $_REQUEST['assign_order'],
'cache_time' => $_REQUEST['assign_cache'],
'rows' => $module_rows
],
$_REQUEST['assign_params']
); // Warning: First argument should have all tiki_modules table fields. This is just a best effort.
}
}
if (file_exists('templates/' . $template)) {
$data = $smarty->fetch($template);
} else {
$data = '';
}
}
if (! empty($_REQUEST['moduleId'])) {
$smarty->assign('moduleId', $_REQUEST['moduleId']);
} else {
$smarty->assign('moduleId', 0);
}
$smarty->assign_by_ref('assign_name', $_REQUEST['assign_name']);
$smarty->assign_by_ref('assign_params', $_REQUEST['assign_params']);
$smarty->assign_by_ref('assign_position', $_REQUEST['assign_position']);
$smarty->assign_by_ref('assign_order', $_REQUEST['assign_order']);
$smarty->assign_by_ref('assign_cache', $_REQUEST['assign_cache']);
$grps = '';
$module_groups = ! isset($_REQUEST['groups']) ? [] : $_REQUEST['groups'];
foreach ($module_groups as $amodule) {
$grps = $grps . ' $amodule ';
}
$smarty->assign('module_groups', $grps);
$smarty->assign_by_ref('preview_data', $data);
$modlib->dispatchValues($_REQUEST['assign_params'], $modinfo['params']);
$smarty->assign('assign_info', $modinfo);
}
if (isset($_REQUEST['assign']) && $access->checkCsrf()) {
$assign_name = urldecode($_REQUEST['assign_name']);
$smarty->assign_by_ref('assign_name', $assign_name);
$smarty->assign_by_ref('assign_position', $_REQUEST['assign_position']);
$smarty->assign_by_ref('assign_params', $_REQUEST['assign_params']);
$smarty->assign_by_ref('assign_order', $_REQUEST['assign_order']);
$smarty->assign_by_ref('assign_cache', $_REQUEST['assign_cache']);
if (isset($_REQUEST['assign_rows'])) {
$module_rows = $_REQUEST['assign_rows'];
$smarty->assign_by_ref('assign_rows', $_REQUEST['assign_rows']);
} elseif (isset($_REQUEST['assign_params']['rows'])) {
$module_rows = $_REQUEST['assign_params']['rows'];
unset($_REQUEST['assign_params']['rows']); // hack, since rows goes in its own DB field
} else {
$module_rows = 10;
}
$smarty->assign_by_ref('assign_type', $_REQUEST['assign_type']);
$grps = '';
$module_groups = ! isset($_REQUEST['groups']) ? [] : $_REQUEST['groups'];
foreach ($module_groups as $amodule) {
$grps = $grps . " $amodule ";
}
$smarty->assign('module_groups', $grps);
if (empty($missing_params)) {
$result = $modlib->assign_module(
isset($_REQUEST['moduleId']) ? $_REQUEST['moduleId'] : 0,
$assign_name,
'',
$_REQUEST['assign_position'],
$_REQUEST['assign_order'],
$_REQUEST['assign_cache'],
$module_rows,
serialize($module_groups),
$_REQUEST['assign_params'],
$_REQUEST['assign_type']
);
$logslib->add_log('adminmodules', 'assigned module ' . $assign_name);
$modlib->reorder_modules();
if ($result) {
Feedback::success(tr('Module assigned'));
} else {
Feedback::error(tr('Module not assigned'));
}
$access->redirect('tiki-admin_modules.php?cookietab=1'); // forcing return to 1st tab
} else {
$modlib->dispatchValues($_REQUEST['assign_params'], $modinfo['params']);
$smarty->assign('assign_info', $modinfo);
}
}
if (isset($_REQUEST['um_remove']) && $access->checkCsrf(true)) {
$result = $modlib->remove_user_module($_REQUEST['um_remove']);
if ($result && $result->numRows()) {
Feedback::success(tr('Custom module deleted'));
} else {
Feedback::error(tr('Custom module not deleted'));
}
$logslib->add_log('adminmodules', 'removed custom module ' . $_REQUEST['um_remove']);
$cookietab = 1;
}
if (isset($_REQUEST['um_edit'])) {
$um_edit = urldecode($_REQUEST['um_edit']);
$um_info = $modlib->get_user_module($um_edit);
$smarty->assign('um_tgt_module', $um_info['name']);
$smarty->assign('um_name', $um_info['name']);
$smarty->assign('um_title', $um_info['title']);
$smarty->assign('um_data', $um_info['data']);
$smarty->assign('um_parse', $um_info['parse']);
}
$user_modules = $modlib->list_user_modules();
$smarty->assign('user_modules', $user_modules['data']);
$all_modules = $modlib->get_all_modules();
sort($all_modules);
$smarty->assign('all_modules', $all_modules);
$all_modules_info = array_combine(
$all_modules,
array_map([ $modlib, 'get_module_info' ], $all_modules)
);
foreach ($all_modules_info as &$mod) {
$mod['enabled'] = true;
foreach ($mod['prefs'] as $pf) {
if ($prefs[$pf] !== 'y') {
$mod['enabled'] = false;
}
}
}
uasort($all_modules_info, 'compare_names');
$smarty->assign_by_ref('all_modules_info', $all_modules_info);
$smarty->assign('module_list_show_all', ! empty($_REQUEST['module_list_show_all']));
$smarty->assign('orders', range(1, 50));
$groups = $userlib->list_all_groups();
$allgroups = [];
$temp_max = count($groups);
foreach ($groups as $groupName) {
$allgroups[] = [
'groupName' => $groupName,
'selected' => in_array($groupName, $module_groups) ? 'y' : 'n',
];
}
$smarty->assign('groups', $allgroups);
if (! isset($_REQUEST['offset'])) {
$offset = 0;
} else {
$offset = $_REQUEST['offset'];
}
$maximum = 0;
$maxRecords = $prefs['maxRecords'];
$polls = $polllib->list_active_polls($offset, $maxRecords, 'publishDate_desc', '');
$smarty->assign('polls', $polls['data']);
$maximum = max($maximum, $polls['cant']);
$contents = $dcslib->list_content($offset, $maxRecords, 'contentId_desc', '');
$smarty->assign('contents', $contents['data']);
$maximum = max($maximum, $contents['cant']);
$rsss = $rsslib->list_rss_modules($offset, $maxRecords, 'name_desc', '');
$smarty->assign('rsss', $rsss['data']);
$maximum = max($maximum, $rsss['cant']);
$menus = $menulib->list_menus($offset, $maxRecords, 'menuId_desc', '');
$smarty->assign('menus', $menus['data']);
$maximum = max($maximum, $menus['cant']);
$banners = $bannerlib->list_zones();
$smarty->assign('banners', $banners['data']);
$maximum = max($maximum, $banners['cant']);
$wikistructures = $structlib->list_structures('0', '100', 'pageName_asc', '');
$smarty->assign('wikistructures', $wikistructures['data']);
$maximum = max($maximum, $wikistructures['cant']);
$smarty->assign('maxRecords', $maxRecords);
$smarty->assign('offset', $offset);
$smarty->assign('maximum', $maximum);
$assigned_modules = $modlib->get_assigned_modules();
$module_zones = [];
foreach ($modlib->module_zones as $initial => $zone) {
$module_zones[$initial] = [
'id' => $zone,
'name' => tra(substr($zone, 0, strpos($zone, '_')))
];
}
$assigned_modules = array_map(
function ($list) {
return array_map(
function ($entry) {
$entry['params_presentable'] = str_replace('&', '
', urldecode($entry['params']));
return $entry;
},
$list
);
},
$assigned_modules
);
$smarty->assign('assigned_modules', $assigned_modules);
$smarty->assign('module_zone_list', $module_zones);
$smarty->assign('userHasAssignedModules', $userHasAssignedModules);
$prefs['module_zones_top'] = 'fixed';
$prefs['module_zones_topbar'] = 'fixed';
$prefs['module_zones_pagetop'] = 'fixed';
$prefs['feature_left_column'] = 'fixed';
$prefs['feature_right_column'] = 'fixed';
$prefs['module_zones_pagebottom'] = 'fixed';
$prefs['module_zones_bottom'] = 'fixed';
$headerlib->add_css(
'.module:hover {' . ' cursor: move;' . ' background-color: #ffa;' . ' }'
);
$headerlib->add_cssfile('themes/base_files/feature_css/admin.css');
$headerlib->add_jsfile('lib/modules/tiki-admin_modules.js');
if ($prefs['feature_jquery_validation'] === 'y') {
// set up validation for custom module smarty syntax
$rules = [
'rules' => [
'um_name' => [
'required' => true,
],
'um_data' => [
'required' => true,
'remote' => [
'url' => 'validate-ajax.php',
'type' => 'post',
'data' => [
'validator' => 'smarty',
'input' => 'inputFunction',
'parameter' => 'parameterFunction',
],
],
],
],
'submitHandler' => 'submitHandlerFunction',
];
$validationjs = '$("form[name=editusr]").validate(' . json_encode($rules) . ')';
$validationjs = str_replace('"inputFunction"', 'function() { return $("#um_data").val(); }', $validationjs);
$validationjs = str_replace('"parameterFunction"', 'function() { return $("#um_parse").val(); }', $validationjs);
$validationjs = str_replace('"submitHandlerFunction"', 'function(form, event){return process_submit(form, event);}', $validationjs);
TikiLib::lib('header')->add_jq_onready($validationjs);
}
$sameurl_elements = ['offset', 'sort_mode', 'where', 'find'];
// disallow robots to index page:
$smarty->assign('metatag_robots', 'NOINDEX, NOFOLLOW');
if (! empty($_REQUEST['edit_module'])) { // pick up ajax calls
// the strings below are used to display the tab titles in the edit module box
//get_strings tr('Module') tr('Appearance') tr('Visibility')
$smarty->display('admin_modules_form.tpl');
} else {
// unfix margins for hidden columns, css previously added in setup/cookies.php
if (getCookie('show_col2') === 'n') {
unset($headerlib->css[100][array_search('#c1c2 #wrapper #col1.marginleft { margin-left: 0; }', $headerlib->css[100])]);
}
if (getCookie('show_col3') === 'n') {
unset($headerlib->css[100][array_search('#c1c2 #wrapper #col1.marginright { margin-right: 0; }', $headerlib->css[100])]);
}
$smarty->assign('mid', 'tiki-admin_modules.tpl');
$smarty->display('tiki.tpl');
}