1<?php 2/* 3 * You may not change or alter any portion of this comment or credits 4 * of supporting developers from this source code or any supporting source code 5 * which is considered copyrighted (c) material of the original comment or credit authors. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 10 */ 11 12/** 13 * @copyright XOOPS Project http://xoops.org/ 14 * @license GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html) 15 * @package 16 * @since 17 * @author XOOPS Development Team, Kazumi Ono (AKA onokazu) 18 */ 19 20// Check users rights 21if (!is_object($xoopsUser) || !is_object($xoopsModule) || !$xoopsUser->isAdmin($xoopsModule->mid())) { 22 exit(_NOPERM); 23} 24// Get Action type 25$op = system_CleanVars($_REQUEST, 'op', 'list', 'string'); 26 27$filter = system_CleanVars($_GET, 'filter', 0, 'int'); 28if ($filter) { 29 $method = $_GET; 30} else { 31 $method = $_REQUEST; 32} 33 34$sel = array( 35 'selmod' => -2, 36 'selgen' => -1, 37 'selgrp' => XOOPS_GROUP_USERS, 38 'selvis' => -1); 39foreach ($sel as $key => $value) { 40 $_{$key} = isset($_COOKIE[$key]) ? (int)$_COOKIE[$key] : $value; 41 ${$key} = system_CleanVars($method, $key, $_{$key}, 'int'); 42 setcookie($key, ${$key}); 43} 44 45$type = system_CleanVars($method, 'type', '', 'string'); 46if ($type === 'preview') { 47 $op = 'preview'; 48} 49 50if (isset($_GET['op'])) { 51 if ($_GET['op'] === 'edit' || $_GET['op'] === 'delete' || $_GET['op'] === 'delete_ok' || $_GET['op'] === 'clone') { 52 $op = $_GET['op']; 53 $bid = isset($_GET['bid']) ? (int)$_GET['bid'] : 0; 54 } 55} 56 57switch ($op) { 58 59 case 'list': 60 // Define main template 61 $GLOBALS['xoopsOption']['template_main'] = 'system_blocks.tpl'; 62 // Call Header 63 xoops_cp_header(); 64 // Define Stylesheet 65 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css'); 66 // Define scripts 67 $xoTheme->addScript('browse.php?Frameworks/jquery/jquery.js'); 68 $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.ui.js'); 69 $xoTheme->addScript('modules/system/js/admin.js'); 70 $xoTheme->addScript('modules/system/js/blocks.js'); 71 // Define Breadcrumb and tips 72 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_ADMIN, system_adminVersion('blocksadmin', 'adminpath')); 73 $xoBreadCrumb->addHelp(system_adminVersion('blocksadmin', 'help')); 74 $xoBreadCrumb->addTips(sprintf(_AM_SYSTEM_BLOCKS_TIPS, system_AdminIcons('block.png'), system_AdminIcons('success.png'), system_AdminIcons('cancel.png'))); 75 $xoBreadCrumb->render(); 76 77 // Initialize module handler 78 /* @var XoopsModuleHandler $module_handler */ 79 $module_handler = xoops_getHandler('module'); 80 $modules = $module_handler->getObjects(null, true); 81 $criteria = new CriteriaCompo(new Criteria('hasmain', 1)); 82 83 $criteria->add(new Criteria('isactive', 1)); 84 // Modules for blocks to be visible in 85 $display_list = $module_handler->getList($criteria); 86 unset($criteria); 87 // Initialize blocks handler 88 /* @var SystemBlockHandler $block_handler */ 89 $block_handler = xoops_getModuleHandler('block'); 90 // Initialize module handler 91 /* @var XoopsModuleHandler $module_handler */ 92 $module_handler = xoops_getHandler('module'); 93 $modules = $module_handler->getObjects(null, true); 94 95 $filterform = new XoopsThemeForm('', 'filterform', 'admin.php', 'get'); 96 $filterform->addElement(new XoopsFormHidden('fct', 'blocksadmin')); 97 $filterform->addElement(new XoopsFormHidden('op', 'list')); 98 $filterform->addElement(new XoopsFormHidden('filter', 1)); 99 $sel_gen = new XoopsFormSelect(_AM_SYSTEM_BLOCKS_GENERATOR, 'selgen', $selgen); 100 $sel_gen->setExtra("onchange='submit()'"); 101 $sel_gen->addOption(-1, _AM_SYSTEM_BLOCKS_TYPES); 102 $sel_gen->addOption(0, _AM_SYSTEM_BLOCKS_CUSTOM); 103 foreach ($modules as $list) { 104 $sel_gen->addOption($list->getVar('mid'), $list->getVar('name')); 105 } 106 $filterform->addElement($sel_gen); 107 108 $sel_mod = new XoopsFormSelect(_AM_SYSTEM_BLOCKS_SVISIBLEIN, 'selmod', $selmod); 109 $sel_mod->setExtra("onchange='submit()'"); 110 ksort($display_list); 111 $display_list_spec[0] = _AM_SYSTEM_BLOCKS_ALLPAGES; 112 $display_list_spec[-1] = _AM_SYSTEM_BLOCKS_TOPPAGE; 113 $display_list_spec[-2] = _AM_SYSTEM_BLOCKS_TYPES; 114 $display_list = $display_list_spec + $display_list; 115 foreach ($display_list as $k => $v) { 116 $sel_mod->addOption($k, $v); 117 } 118 $filterform->addElement($sel_mod); 119 120 // For selection of group access 121 $sel_grp = new XoopsFormSelect(_AM_SYSTEM_BLOCKS_GROUP, 'selgrp', $selgrp); 122 $sel_grp->setExtra("onchange='submit()'"); 123 /* @var XoopsMemberHandler $member_handler */ 124 $member_handler = xoops_getHandler('member'); 125 $group_list = $member_handler->getGroupList(); 126 $sel_grp->addOption(-1, _AM_SYSTEM_BLOCKS_TYPES); 127 $sel_grp->addOption(0, _AM_SYSTEM_BLOCKS_UNASSIGNED); 128 foreach ($group_list as $k => $v) { 129 $sel_grp->addOption($k, $v); 130 } 131 $filterform->addElement($sel_grp); 132 133 $sel_vis = new XoopsFormSelect(_AM_SYSTEM_BLOCKS_VISIBLE, 'selvis', $selvis); 134 $sel_vis->setExtra("onchange='submit()'"); 135 $sel_vis->addOption(-1, _AM_SYSTEM_BLOCKS_TYPES); 136 $sel_vis->addOption(0, _NO); 137 $sel_vis->addOption(1, _YES); 138 139 $filterform->addElement($sel_vis); 140 141 $filterform->assign($xoopsTpl); 142 143 /* Get blocks */ 144 $selvis = ($selvis == -1) ? null : $selvis; 145 $selmod = ($selmod == -2) ? null : $selmod; 146 $order_block = (isset($selvis) ? '' : 'b.visible DESC, ') . 'b.side,b.weight,b.bid'; 147 148 if ($selgrp == 0) { 149 // get blocks that are not assigned to any groups 150 $blocks_arr = $block_handler->getNonGroupedBlocks($selmod, $toponlyblock = false, $selvis, $order_block); 151 } else { 152 $blocks_arr = $block_handler->getAllByGroupModule($selgrp, $selmod, $toponlyblock = false, $selvis, $order_block); 153 } 154 155 if ($selgen >= 0) { 156 foreach (array_keys($blocks_arr) as $bid) { 157 if ($blocks_arr[$bid]->getVar('mid') != $selgen) { 158 unset($blocks_arr[$bid]); 159 } 160 } 161 } 162 163 $arr = array(); 164 foreach (array_keys($blocks_arr) as $i) { 165 $arr[$i] = $blocks_arr[$i]->toArray(); 166 $xoopsTpl->append_by_ref('blocks', $arr[$i]); 167 } 168 $block = $block_handler->create(); 169 $blockform = $block->getForm(); 170 $xoopsTpl->assign('blockform', $blockform->render()); 171 // Call Footer 172 xoops_cp_footer(); 173 break; 174 175 case 'add': 176 // Define main template 177 $GLOBALS['xoopsOption']['template_main'] = 'system_blocks.tpl'; 178 // Call Header 179 xoops_cp_header(); 180 // Define Stylesheet 181 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css'); 182 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/ui/' . xoops_getModuleOption('jquery_theme', 'system') . '/ui.all.css'); 183 // Define scripts 184 $xoTheme->addScript('browse.php?Frameworks/jquery/jquery.js'); 185 $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.ui.js'); 186 $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.form.js'); 187 $xoTheme->addScript('modules/system/js/admin.js'); 188 $xoTheme->addScript('modules/system/js/blocks.js'); 189 // Define Breadcrumb and tips 190 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_ADMIN, system_adminVersion('blocksadmin', 'adminpath')); 191 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_ADDBLOCK); 192 $xoBreadCrumb->render(); 193 // Initialize blocks handler 194 $block_handler = xoops_getModuleHandler('block'); 195 /* @var SystemBlock $block */ 196 $block = $block_handler->create(); 197 $blockform = $block->getForm(); 198 $xoopsTpl->assign('blockform', $blockform->render()); 199 // Call Footer 200 xoops_cp_footer(); 201 break; 202 203 case 'display': 204 // Initialize blocks handler 205 /* @var SystemBlockHandler $block_handler */ 206 $block_handler = xoops_getModuleHandler('block'); 207 // Get variable 208 $block_id = system_CleanVars($_POST, 'bid', 0, 'int'); 209 $visible = system_CleanVars($_POST, 'visible', 0, 'int'); 210 if ($block_id > 0) { 211 $block = $block_handler->get($block_id); 212 $block->setVar('visible', $visible); 213 if (!$block_handler->insert($block)) { 214 $error = true; 215 } 216 } 217 break; 218 219 case 'drag': 220 // Initialize blocks handler 221 $block_handler = xoops_getModuleHandler('block'); 222 // Get variable 223 $block_id = system_CleanVars($_POST, 'bid', 0, 'int'); 224 $side = system_CleanVars($_POST, 'side', 0, 'int'); 225 if ($block_id > 0) { 226 $block = $block_handler->get($block_id); 227 $block->setVar('side', $side); 228 if (!$block_handler->insert($block)) { 229 $error = true; 230 } 231 } 232 break; 233 234 case 'order': 235 // Initialize blocks handler 236 $block_handler = xoops_getModuleHandler('block'); 237 if (isset($_POST['blk'])) { 238 $i = 0; 239 foreach ($_POST['blk'] as $order) { 240 if ($order > 0) { 241 $block = $block_handler->get($order); 242 $block->setVar('weight', $i); 243 if (!$block_handler->insert($block)) { 244 $error = true; 245 } 246 ++$i; 247 } 248 } 249 } 250 exit; 251 break; 252 253 case 'preview': 254 if (!$GLOBALS['xoopsSecurity']->check()) { 255 redirect_header('admin.php?fct=blocksadmin', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors())); 256 } 257 // Initialize blocks handler 258 /* @var XoopsBlockHandler $block_handler */ 259 $block_handler = xoops_getModuleHandler('block'); 260 $block = $block_handler->create(); 261 $block->setVars($_POST); 262 $content = isset($_POST['content_block']) ? $_POST['content_block'] : ''; 263 $block->setVar('content', $content); 264 $myts = MyTextSanitizer::getInstance(); 265 echo '<div id="xo-preview-dialog" title="' . $block->getVar('title', 's') . '">' . $block->getContent('s', $block->getVar('c_type')) . '</div>'; 266 break; 267 268 case 'save': 269 if (!$GLOBALS['xoopsSecurity']->check()) { 270 redirect_header('admin.php?fct=blocksadmin', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors())); 271 } 272 // Initialize blocks handler 273 $block_handler = xoops_getModuleHandler('block'); 274 // Get avatar id 275 $block_id = system_CleanVars($_POST, 'bid', 0, 'int'); 276 if ($block_id > 0) { 277 $block = $block_handler->get($block_id); 278 } else { 279 $block = $block_handler->create(); 280 } 281 $block_type = system_CleanVars($_POST, 'block_type', '', 'string'); 282 $block->setVar('block_type', $block_type); 283 284 if (!$block->isCustom()) { 285 $block->setVars($_POST); 286 $type = $block->getVar('block_type'); 287 $name = $block->getVar('name'); 288 // Save block options 289 $options = $_POST['options']; 290 if (isset($options)) { 291 $options_count = count($options); 292 if ($options_count > 0) { 293 //Convert array values to comma-separated 294 for ($i = 0; $i < $options_count; ++$i) { 295 if (is_array($options[$i])) { 296 $options[$i] = implode(',', $options[$i]); 297 } 298 } 299 $options = implode('|', $options); 300 $block->setVar('options', $options); 301 } 302 } 303 } else { 304 $block->setVars($_POST); 305 switch ($block->getVar('c_type')) { 306 case 'H': 307 $name = _AM_SYSTEM_BLOCKS_CUSTOMHTML; 308 break; 309 case 'P': 310 $name = _AM_SYSTEM_BLOCKS_CUSTOMPHP; 311 break; 312 case 'S': 313 $name = _AM_SYSTEM_BLOCKS_CUSTOMSMILE; 314 break; 315 default: 316 $name = _AM_SYSTEM_BLOCKS_CUSTOMNOSMILE; 317 break; 318 } 319 } 320 $block->setVar('name', $name); 321 $block->setVar('isactive', 1); 322 323 $content = isset($_POST['content_block']) ? $_POST['content_block'] : ''; 324 $block->setVar('content', $content); 325 326 if (!$newid = $block_handler->insert($block)) { 327 xoops_cp_header(); 328 xoops_error($block->getHtmlErrors()); 329 xoops_cp_footer(); 330 exit(); 331 } 332 if ($newid != 0) { 333 $blocklinkmodule_handler = xoops_getModuleHandler('blocklinkmodule'); 334 // Delete old link 335 $criteria = new CriteriaCompo(new Criteria('block_id', $newid)); 336 $blocklinkmodule_handler->deleteAll($criteria); 337 // Assign link 338 $modules = $_POST['modules']; 339 foreach ($modules as $mid) { 340 $blocklinkmodule = $blocklinkmodule_handler->create(); 341 $blocklinkmodule->setVar('block_id', $newid); 342 $blocklinkmodule->setVar('module_id', $mid); 343 if (!$blocklinkmodule_handler->insert($blocklinkmodule)) { 344 xoops_cp_header(); 345 xoops_error($blocklinkmodule->getHtmlErrors()); 346 xoops_cp_footer(); 347 exit(); 348 } 349 } 350 } 351 /* @var XoopsGroupPermHandler $groupperm_handler */ 352 $groupperm_handler = xoops_getHandler('groupperm'); 353 $groups = $_POST['groups']; 354 $groups_with_access = $groupperm_handler->getGroupIds('block_read', $newid); 355 $removed_groups = array_diff($groups_with_access, $groups); 356 if (count($removed_groups) > 0) { 357 foreach ($removed_groups as $groupid) { 358 $criteria = new CriteriaCompo(new Criteria('gperm_name', 'block_read')); 359 $criteria->add(new Criteria('gperm_groupid', $groupid)); 360 $criteria->add(new Criteria('gperm_itemid', $newid)); 361 $criteria->add(new Criteria('gperm_modid', 1)); 362 $perm = $groupperm_handler->getObjects($criteria); 363 if (isset($perm[0]) && is_object($perm[0])) { 364 $groupperm_handler->delete($perm[0]); 365 } 366 } 367 } 368 $new_groups = array_diff($groups, $groups_with_access); 369 if (count($new_groups) > 0) { 370 foreach ($new_groups as $groupid) { 371 $groupperm_handler->addRight('block_read', $newid, $groupid); 372 } 373 } 374 redirect_header('admin.php?fct=blocksadmin', 1, _AM_SYSTEM_BLOCKS_DBUPDATED); 375 break; 376 377 case 'edit': 378 // Initialize blocks handler 379 $block_handler = xoops_getModuleHandler('block'); 380 // Get avatar id 381 $block_id = system_CleanVars($_REQUEST, 'bid', 0, 'int'); 382 if ($block_id > 0) { 383 // Define main template 384 $GLOBALS['xoopsOption']['template_main'] = 'system_blocks.tpl'; 385 // Call Header 386 xoops_cp_header(); 387 // Define Stylesheet 388 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css'); 389 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/ui/' . xoops_getModuleOption('jquery_theme', 'system') . '/ui.all.css'); 390 // Define scripts 391 $xoTheme->addScript('browse.php?Frameworks/jquery/jquery.js'); 392 $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.ui.js'); 393 $xoTheme->addScript('browse.php?Frameworks/jquery/plugins/jquery.form.js'); 394 $xoTheme->addScript('modules/system/js/admin.js'); 395 // Define Breadcrumb and tips 396 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_ADMIN, system_adminVersion('blocksadmin', 'adminpath')); 397 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_EDITBLOCK); 398 $xoBreadCrumb->render(); 399 400 $block = $block_handler->get($block_id); 401 $blockform = $block->getForm(); 402 $xoopsTpl->assign('blockform', $blockform->render()); 403 // Call Footer 404 xoops_cp_footer(); 405 } else { 406 redirect_header('admin.php?fct=blocksadmin', 1, _AM_SYSTEM_DBERROR); 407 } 408 break; 409 410 case 'delete': 411 // Initialize blocks handler 412 /* @var SystemBlockHandler $block_handler */ 413 $block_handler = xoops_getModuleHandler('block'); 414 // Get avatar id 415 $block_id = system_CleanVars($_REQUEST, 'bid', 0, 'int'); 416 if ($block_id > 0) { 417 $block = $block_handler->get($block_id); 418 if ($block->getVar('block_type') === 'S') { 419 redirect_header('admin.php?fct=blocksadmin', 4, _AM_SYSTEM_BLOCKS_SYSTEMCANT); 420 } elseif ($block->getVar('block_type') === 'M') { 421 // Fix for duplicated blocks created in 2.0.9 module update 422 // A module block can be deleted if there is more than 1 that 423 // has the same func_num/show_func which is mostly likely 424 // be the one that was duplicated in 2.0.9 425 if (1 >= $count = $block_handler->countSimilarBlocks($block->getVar('mid'), $block->getVar('func_num'), $block->getVar('show_func'))) { 426 redirect_header('admin.php?fct=blocksadmin', 4, _AM_SYSTEM_BLOCKS_MODULECANT); 427 } 428 } 429 // Define main template 430 $GLOBALS['xoopsOption']['template_main'] = 'system_header.tpl'; 431 // Call Header 432 xoops_cp_header(); 433 // Display Question 434 xoops_confirm(array( 435 'op' => 'delete_ok', 436 'fct' => 'blocksadmin', 437 'bid' => $block->getVar('bid')), 'admin.php', sprintf(_AM_SYSTEM_BLOCKS_RUSUREDEL, $block->getVar('title'))); 438 // Call Footer 439 xoops_cp_footer(); 440 } 441 break; 442 443 case 'delete_ok': 444 if (!$GLOBALS['xoopsSecurity']->check()) { 445 redirect_header('admin.php?fct=blocksadmin', 3, implode('<br>', $GLOBALS['xoopsSecurity']->getErrors())); 446 } 447 // Initialize blocks handler 448 $block_handler = xoops_getModuleHandler('block'); 449 // Get avatar id 450 $block_id = system_CleanVars($_POST, 'bid', 0, 'int'); 451 if ($block_id > 0) { 452 $block = $block_handler->get($block_id); 453 if ($block_handler->delete($block)) { 454 // Delete Group link 455 $blocklinkmodule_handler = xoops_getModuleHandler('blocklinkmodule'); 456 $blocklinkmodule = $blocklinkmodule_handler->getObjects(new CriteriaCompo(new Criteria('block_id', $block_id))); 457 foreach ($blocklinkmodule as $link) { 458 $blocklinkmodule_handler->delete($link, true); 459 } 460 // Delete Group permission 461 /* @var XoopsGroupPermHandler $groupperm_handler */ 462 $groupperm_handler = xoops_getHandler('groupperm'); 463 $criteria = new CriteriaCompo(new Criteria('gperm_name', 'block_read')); 464 $criteria->add(new Criteria('gperm_itemid', $block_id)); 465 $groupperm = $groupperm_handler->getObjects($criteria); 466 foreach ($groupperm as $perm) { 467 $groupperm_handler->delete($perm, true); 468 } 469 // Delete template 470 if ($block->getVar('template') != '') { 471 $tplfile_handler = xoops_getHandler('tplfile'); 472 $btemplate = $tplfile_handler->find($GLOBALS['xoopsConfig']['template_set'], 'block', $block_id); 473 if (count($btemplate) > 0) { 474 $tplfile_handler->delete($btemplate[0]); 475 } 476 } 477 redirect_header('admin.php?fct=blocksadmin', 1, _AM_SYSTEM_BLOCKS_DBUPDATED); 478 } 479 } else { 480 redirect_header('admin.php?fct=blocksadmin', 1, _AM_SYSTEM_DBERROR); 481 } 482 break; 483 484 case 'clone': 485 // Initialize blocks handler 486 $block_handler = xoops_getModuleHandler('block'); 487 // Get avatar id 488 $block_id = system_CleanVars($_REQUEST, 'bid', 0, 'int'); 489 if ($block_id > 0) { 490 // Define main template 491 $GLOBALS['xoopsOption']['template_main'] = 'system_blocks.tpl'; 492 // Call Header 493 xoops_cp_header(); 494 // Define Stylesheet 495 $xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css'); 496 // Define Breadcrumb and tips 497 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_ADMIN, system_adminVersion('blocksadmin', 'adminpath')); 498 $xoBreadCrumb->addLink(_AM_SYSTEM_BLOCKS_CLONEBLOCK); 499 $xoBreadCrumb->render(); 500 /* @var XoopsBlock $block */ 501 $block = $block_handler->get($block_id); 502 $blockform = $block->getForm('clone'); 503 $xoopsTpl->assign('blockform', $blockform->render()); 504 // Call Footer 505 xoops_cp_footer(); 506 } else { 507 redirect_header('admin.php?fct=blocksadmin', 1, _AM_SYSTEM_DBERROR); 508 } 509 break; 510 511} 512