👁 查看:multiMenuPreload.class.php
路径:/virtual/bigbrother/public_html/edream-c.com/cd/preload/multiMenuPreload.class.php
大小:5.9 KB · 修改:2013-09-08 07:02:14 · 权限:0644 · 可写
<?php
/*
 * 2011/09/09 16:45
 * Multi-Menu preload for smarty insertion to theme
 * copyright(c) Yoshi Sakai at Bluemoon inc 2011
 * GPL ver3.0 All right reserved.
 */
if (!defined('XOOPS_ROOT_PATH')) exit();

include_once XOOPS_ROOT_PATH . '/modules/multiMenu/class/getMultiMenu.class.php';

class multiMenuPreload extends XCube_ActionFilter{
	function preBlockFilter(){
        $this->mRoot->mDelegateManager->add(
			'Legacy_RenderSystem.SetupXoopsTpl',
            array(&$this, 'menuSmartyAssign')
		);
	}
	function menuSmartyAssign(&$xoopsTpl) {
        $module_handler = & xoops_gethandler( 'module' );
		$module =& $module_handler->getByDirname('multiMenu');
		if ( !is_object( $module ) || !$module->getVar( 'isactive' ) ) {
			return ;
		}
		$gmm = new getMultiMenu();
		$options=array('40');
		$menu_num = $gmm->theme_menu();
		if ( !empty($menu_num) ) {
			$block = $gmm->getblock( $options, 'multimenu0' . $menu_num );
			$xoopsTpl->assign( 'multiMenuToTheme' , $block ) ;	// Insert smarty for entire site theme
		}
		$flow = new multiMenuFlow($gmm);
	    if ($flow->nextLink){
		    //            die($flow->nextLink);
            $_SESSION['multiMenuFlow'] = array();
            redirect_header($flow->nextLink,3,'Multimeu Flow next link. ');
//            $this->mController->executeForward($flow->nextLink);
		}
	}
}
/*
 *  hook Flow
*/
class multimenuFlow  {
    var $moduleId = null;
	var $nextLink = null;
	var $flowLink = null;
	var $pathMatch = false;
	function multiMenuFlow($gmm){
		global $xoopsUser,$xoopsDB;
		if ($xoopsUser){
            $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')? 'https': 'http';
            $requestUrl = $protocol.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
            $refererUrl = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : NULL;
            if( isset($_SESSION['multiMenuFlow']) && isset($_SESSION['multiMenuFlow']['nextId'] )){
                if( $refererUrl != $_SESSION['multiMenuFlow']['requestUrl'] ){
                    $nextId =  $_SESSION['multiMenuFlow']['nextId'];
                    $this->nextLink = $_SESSION['multiMenuFlow']['nextLink'];
                    $this->moveFlowPosition($nextId);
                    return;
                }
            }
            $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')? 'https': 'http';
            $requestUrl = $protocol.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
            $options = array('40');
			$block = $gmm->getblock( $options, 'multimenu99');
			$sql = 'SELECT id FROM ' .$xoopsDB->prefix('multimenu_log') . ' WHERE uid=' . $xoopsUser->uid() . ';';
			$ret = $xoopsDB->query($sql);
            $id = NULL;
			if ($ret) list($id) = $xoopsDB->fetchRow($ret);
			if (!isset($block['contents'])) return NULL;
            $link_option = NULL;
			foreach($block['contents'] as $b){
				if(!is_null($this->flowLink)){
					$nextId = $b['id'];
					$nextLink = $b['link'];
					break;
				}
				if ($b['id'] == $id || $id==NULL){
					$this->flowLink = $nextLink = $b['link'];	// selected flow link
				}
			}
			/*
			 * Back to Flow Top When same as top link
			 */
			if( $this->linkComp($refererUrl,$block['contents'][0]['link']) == true ){
                $topId = $block['contents'][0]['id'];
                $this->moveFlowPosition($topId);
            }
			/*
			 * Check and Move Flow
			 */
            $ret = $this->linkComp($refererUrl,$this->flowLink,$link_option);
			// Redirect to new Flow menu
            if ( $ret && (isset($_POST['submit']) || isset($_POST['contents_submit'])) ){
                $_SESSION['multiMenuFlow']['nextId'] = $nextId;
                $_SESSION['multiMenuFlow']['nextLink'] = $nextLink;
                $_SESSION['multiMenuFlow']['requestUrl'] = $requestUrl;
            }
		}
	}
    private function getModuleId($refererUrl){
        $req = parse_url($refererUrl);
        $mydirname =  basename( dirname( $req['path'] ));
        $module_handler = xoops_gethandler( 'module' );
        $module = $module_handler->getByDirname($mydirname);
        if ($module) return $module->mid();
    }
	private function moveFlowPosition($id){
		global $xoopsUser,$xoopsDB;
		// Record to log
        if (is_null($id)) return;
		$sql = 'INSERT INTO ' .$xoopsDB->prefix('multimenu_log')
		.' (uid,id) VALUES('.$xoopsUser->uid().','.$id . ')';
		$ret = $xoopsDB->queryF($sql);
		if(!$ret){
			$sql = 'UPDATE ' .$xoopsDB->prefix('multimenu_log')
			.' SET id=' . $id . ' WHERE uid='.$xoopsUser->uid().';';
			$ret = $xoopsDB->queryF($sql);
		}
	}
	private function linkComp($refererUrl,$flowLink,$option=''){
		//echo '<hr>requestUrl: '.$refererUrl . '<br />'. 'flowLink: '. $flowLink .'<br />';
		if (! $refererUrl) {
			return false;
		}
		if (! $req = parse_url($refererUrl)) {
			return false;
		}
		if (! $flo = parse_url($flowLink)) {
			return false;
		}
		$parse = array('query'=>true);
		if ( substr($req['path'], -1)=='/') $req['path'] .= 'index.php';
		foreach($flo as $key => $val){
			if ($key=='path' && substr($val, -1)=='/'){
                $val .= 'index.php';
            }
            if (!isset($req[$key])){
				if ($key!='query'){
                    $parse[$key] = false;
                }
				break;
			}
            //echo '<br />' . $key . ':' . $val . '<->' . $req[$key];
			if (strcmp($val,$req[$key])==0){
				$parse[$key] = true;
			}else{
				$parse[$key] = false;
			}
			if ($key=='query'){
				$f_prm = explode('&',$val);
				$r_prm = explode('&',$req[$key]);
				$r_prm = array_merge($r_prm, explode('&',$option));
				//echo '<br />req: '; var_dump($r_prm);
				$parse[$key] = false;
				foreach($f_prm as $k=>$v){
					if(in_array($v,$r_prm)){
						//echo '<br />v: '.$v;
						$parse[$key] = true;
					}
				}
			}
		}
		if ( isset($parse['path']) ){
			$this->pathMatch = $parse['path'];
		}
		$ret = true;
		if ($parse && in_array(false,$parse)){
			$ret = false;
		}
		//if ($ret==true) echo 'Move Ok.<br />';else echo 'Move NO.<br />';
		return $ret;
	}
}
?>
ページが見つかりませんでした – Lumiere Shop
ここを指しているリンクに誤りがあったようです。検索してみるのはいかがですか ?
お買い物カゴ