👁 查看:QuickManageBlock.class.php
路径:/virtual/bigbrother/public_html/edream-c.com/cd/preload/QuickManageBlock.class.php
大小:5.86 KB · 修改:2013-09-07 07:22:56 · 权限:0644 · 可写
<?php
/**
* A simple description for this script
*
* PHP Version 5.2.0 or Upper version
*
* @package QuikManageBlock
* @author Hidehito NOZAWA aka Suin <http://ryus.co.jp>
* @copyright 2010 Hidehito NOZAWA
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU GPL v2
*
*/
if ( !defined('XOOPS_ROOT_PATH') ) exit;
class QuickManageBlock extends XCube_ActionFilter
{
const VERSION = 1.1;
protected $xoopsTpl = null;
protected $session = array();
public function preBlockFilter()
{
$this->mRoot->mDelegateManager->add('Legacy_RenderSystem.BeginRender', array(&$this, 'beginRender'));
$this->mRoot->mDelegateManager->add('Legacy_ActionFrame.CreateAction', array(&$this, 'createAction'));
}
public function createAction(&$action)
{
$this->_prepareSession();
switch ( $action->mActionName )
{
case 'BlockEdit':
case 'BlockUninstall':
case 'CustomBlockEdit':
if ( !$this->_isPostRequestFromBlockAdmin() )
{
return;
}
$this->session['redirect'] = true;
break;
case 'BlockList':
if ( $this->_isRedirect() )
{
$this->_redirectToOriginPage();
}
default:
$this->_destorySession();
}
}
public function beginRender(&$xoopsTpl)
{
$this->_prepareSession();
$this->xoopsTpl =& $xoopsTpl;
if ( !$this->_isAdmin() )
{
return;
}
if ( !$this->_isBlockPrepared() )
{
return;
}
$baseUrluninstall = XOOPS_URL.'/modules/legacy/admin/index.php?action=BlockUninstall&bid=%s';
$asides = array('xoops_lblocks', 'xoops_rblocks', 'xoops_clblocks', 'xoops_crblocks', 'xoops_ccblocks');
$blockIds = array();
foreach ( $asides as $aside )
{
$blocks = $xoopsTpl->get_template_vars($aside);
if ( $blocks === null )
{
continue;
}
$blockTypes = $this->_getBlockTypes($blocks);
$isMobile = ( defined('HYP_K_TAI_RENDER') && HYP_K_TAI_RENDER > 0 );
foreach ( $blocks as &$block )
{
$urlBlockEdit = $this->_getBlockEditUrl($block['id'], $blockTypes);
$urluninstall = sprintf($baseUrluninstall, $block['id']);
$block_control = '<span style="float:right;" class="block_controller">';
$block_control .= '<a href="'.$urlBlockEdit.'"><img src="'.XOOPS_URL.'/modules/legacy/admin/theme/icons/edit.png" /></a>';
$block_control .= '<a href="'.$urluninstall.'"><img src="'.XOOPS_URL.'/modules/legacy/admin/theme/icons/uninstall.png" /></a>';
$block_control .= '</span>';
if( $isMobile || strstr( $block['title'], 'none' ) == true ) {
$block['content'] = $block_control . $block['content'];
} else {
$block['title'] .= $block_control;
}
$blockIds[] = $block['id'];
}
$xoopsTpl->assign($aside, $blocks);
}
$this->_createSession($blockIds);
}
protected function _isPostRequestFromBlockAdmin()
{
if ( !isset($_POST['bid']) )
{
return false;
}
if ( !isset($this->session['block_ids']) )
{
return false;
}
if ( !in_array($_POST['bid'], $this->session['block_ids']) )
{
return false;
}
return true;
}
protected function _isRedirect()
{
if ( !isset($this->session['redirect']) )
{
return false;
}
return $this->session['redirect'];
}
protected function _redirectToOriginPage()
{
$this->session['redirect'] = false;
$url = $this->session['url'];
$time = 1;
$message = 'Block is Updated';
// TODO >> 「戻る」をクリックした場合、文言が合わない
$this->mRoot->mController->executeRedirect($url, $time, $message);
}
protected function _prepareSession()
{
if ( !isset($_SESSION[__CLASS__]) )
{
$_SESSION[__CLASS__] = array();
}
$this->session =& $_SESSION[__CLASS__];
}
protected function _createSession($blockIds)
{
$this->session = array(
'url' => $this->_geUrl(),
'block_ids' => $blockIds,
'redirect' => false,
);
}
protected function _destorySession()
{
$this->session = null;
}
protected function _isBlockPrepared()
{
return ( $this->xoopsTpl->get_template_vars('xoops_showlblock') !== null );
}
protected function _isAdmin()
{
global $xoopsUser;
if ( !is_object($xoopsUser) )
{
return false;
}
$dirname = basename(dirname(dirname(__FILE__)));
$moduleHandler =& xoops_gethandler('module');
$moduleModel = $moduleHandler->getByDirname('legacy');
$moduleId = $moduleModel->getVar('mid');
return $xoopsUser->isAdmin($moduleId);
}
protected function _geUrl()
{
if ( isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on' )
{
$protocol = 'https://';
}
else
{
$protocol = 'http://';
}
$url = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
return $url;
}
protected function _getBlockTypes($blocks)
{
if ( count($blocks) === 0 )
{
return array();
}
$blockIds = array();
foreach ( $blocks as $block )
{
$blockIds[] = $block['id'];
}
$db =& Database::getInstance();
$sqlBase = "SELECT `bid`, `block_type` FROM `%s` WHERE `bid` IN (%s)";
$table = $db->prefix('newblocks');
$blockIds = array_map('intval', $blockIds);
$blockIds = implode(', ', $blockIds);
$sql = sprintf($sqlBase, $table, $blockIds);
$result = $db->query($sql);
$types = array();
while ( list($bid, $type) = $db->fetchRow($result) )
{
$types[$bid] = $type;
}
return $types;
}
protected function _getBlockEditUrl($blockId, $blockTypes)
{
$baseUrlBlockEdit = XOOPS_URL.'/modules/legacy/admin/index.php?action=BlockEdit&bid=%s';
$baseUrlCustomBlockEdit = XOOPS_URL.'/modules/legacy/admin/index.php?action=CustomBlockEdit&bid=%s';
if ( $blockTypes[$blockId] === 'C' )
{
return sprintf($baseUrlCustomBlockEdit, $blockId);
}
return sprintf($baseUrlBlockEdit, $blockId);
}
}
?>