⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.php

📁 Extjs写的一个桌面应用。。功能很强大
💻 PHP
字号:
<?php
/*
 * qWikiOffice Desktop 1.0
 * Copyright(c) 2007-2008, Integrated Technologies, Inc.
 * licensing@qwikioffice.com
 * 
 * http://www.qwikioffice.com/license
 */

class module {

	private $os;
	
	public function __construct($os){
		$this->os = $os;
	}
	
	/** init() Initial page load or refresh has occured
	  * 
	  **/
	public function init(){
	    if(isset($_SESSION['modules'])){
	        unset($_SESSION['modules']);
	    }
	    
		if(isset($_SESSION['dependencies'])){
			unset($_SESSION['dependencies']);
		}
	}
	
	/** is_loadable() Returns true if all of the module's files (and dependencies) are found.
	  * The module can be loaded.
	  * 
	  * @param {string} $moduleId The client moduleId property 
	  **/
	private function is_loadable($moduleId){
	    $response = false;
	    
	    if(!isset($_SESSION['modules'])){
	        $this->find_files();
	    }
	    
	    if(isset($_SESSION['modules']['can_load'][$moduleId])){
			if($_SESSION['modules']['can_load'][$moduleId]){
				$response = true;
			}
		}
		
		return $response;
	} // end is_loadable()
	
	
	
	/** find_files() Queries the Db and checks the module files.
	  * Results are stored in session.
	  **/
	private function find_files(){
	    $member_id = $this->os->session->get_member_id();
		$group_id = $this->os->session->get_group_id();
		
		if($member_id != "" && $group_id != ""){
	    	unset($_SESSION['modules']);
	    	
	    	$modules_dir = $this->os->get_module_dir();
			
			$sql = "SELECT
				M.id,
				M.module_id AS moduleId,
				concat(F.directory, F.file) AS path
				FROM
				qo_modules_files AS F
					INNER JOIN qo_modules AS M ON M.id = F.qo_modules_id
				WHERE
				M.active = 1";
			
			if($result = mysql_query($sql)){
				$prev_module = '';
				$is_allowed = false;
						
				while($row = mysql_fetch_assoc($result)){
					$cur_module = $row['id'];
					
					if($prev_module != $cur_module){
						$prev_module = $cur_module;
						$is_loadable = 1;

						if($this->os->privilege->is_allowed("loadModule", $row["moduleId"], $member_id, $group_id)){					    
						    if(!$this->check_dependencies($modules_dir, $cur_module)){
								$is_loadable = 0;
							}
							$is_allowed = true;
						}else{
						    $is_allowed = false;
						}
					}
					
					if($is_allowed){
						$path = $row['path'];
						if($path != ''){
							if(!is_file($modules_dir.$path)){
								$_SESSION['modules']['has_error'][] = 'Script: module.php, Method: find_files, Missing file: '.$modules_dir.$path;
								$is_loadable = 0;
							}
						}
					}

					// store in session
					$_SESSION['modules']['can_load'][ $row['moduleId'] ] = $is_loadable;
				}
				
				// report errors
				if(count($_SESSION['modules']['has_error']) > 0){
				    $this->os->error->log($_SESSION['modules']['has_error']);
				}
			}
	    }
	} // end find_files()
	
	
	
	/** check_dependencies()
	  * 
	  * $param {integer} $id The server (database) module id
	  **/
	private function check_dependencies($modules_dir, $id){
		$response = true;
	    
	    $sql = "SELECT
	    	M.module_id AS moduleId,
			D.directory,
			D.file
			FROM
			qo_modules_has_dependencies AS MD
				INNER JOIN qo_dependencies AS D ON D.id = MD.qo_dependencies_id
				INNER JOIN qo_modules AS M ON M.id = MD.qo_modules_id
			WHERE
			M.id = ".$id;
		
		if($result = mysql_query($sql)){
		    while($row = mysql_fetch_assoc($result)){
				$path = $row['directory'].$row['file'];
				if($path != ''){
					if(!is_file($modules_dir.$path)){
						$_SESSION['modules']['has_error'][] = 'Script: module.php, Method: check_dependencies, Missing file: '.$modules_dir.$path;
						$response = false;
					}
				}
		    }
		}
	    
	    return $response;
	} // end check_dependencies()
	
	
	
	/** get_id() Returns the id of a module's database record.
	  * 
	  * @param {string} $moduleId The client module's moduleId property.
	  **/
	public function get_id($moduleId){
		$id = '';
		
		if($this->os->session->exists() && $moduleId != ""){
			$sql = "SELECT
				id
				FROM
				qo_modules
				WHERE
				module_id = '".$moduleId."'";
			
			if(mysql_num_rows($result = mysql_query($sql)) > 0){
				$row = mysql_fetch_assoc($result);
				$id = $row["id"];
			}
		}
		
		return $id;
	} // end get_id()
	
	
	
	/** get_all() Returns new instances of the loaded modules.
	  * Used by getModules() of QoDesk.php
	  **/
	public function get_all(){
		$response = '';
		$m = $_SESSION['modules']['loaded'];
		
		for($i = 0, $len = count($m); $i < $len; $i++){
			$response .= "new ".$m[$i]['class']."(),";
		}
		
		$response = rtrim($response, ","); // trim the trailing comma
		
		return $response;
	} // end get_all()
	
	
	
	/** get_css() Returns a string of all css files to include
	  * Used by index.php
	  **/
	public function get_css(){
		$response = '';
		$member_id = $this->os->session->get_member_id();
		$group_id = $this->os->session->get_group_id();
		$modules_dir = $this->os->get_module_dir();
		
		if($member_id != "" && $group_id != ""){
			$sql = "SELECT
				M.module_id AS moduleId,
				F.directory,
				F.file
				FROM
				qo_modules_files AS F
					INNER JOIN qo_modules AS M ON M.id = F.qo_modules_id
				WHERE
				F.is_stylesheet = 1
				AND
				M.active = 1";
			
			if($result = mysql_query($sql)){				
				while($row = mysql_fetch_assoc($result)){
					// if the member is not allowed to load this module, skip it
				    if(!$this->os->privilege->is_allowed("loadModule", $row["moduleId"], $member_id, $group_id)){
				    	continue;
				    }
				    
				    if(!$this->is_loadable($row["moduleId"])){
				        continue;
				    }
				    
				    $response .= '<link rel="stylesheet" type="text/css" href="'.$modules_dir.$row["directory"].$row["file"].'" />';
				}
			}
			
			$response;
		}
		
		return $response;
	} // end get_css()
	
	
	
	/** load() Prints the contents of the module's javascript files.
	  * Dependencies will also be loaded if needed.
	  * Used for Module on Demand functionality.
	  * 
	  * @param {string} $moduleId The client moduleId property
	  **/
	public function load($moduleId){
		
		$module_id = $this->get_id($moduleId); // the server (database) module id
		$member_id = $this->os->session->get_member_id();
		$group_id = $this->os->session->get_group_id();
		
		if($module_id != "" && $member_id != "" && $group_id != ""){
			
			// if the member is not allowed to load this module, skip it
	    	if(!$this->os->privilege->is_allowed("loadModule", $moduleId, $member_id, $group_id)){
	    		die("{success: false, msg: 'You do not have the required privileges!'}");
	    	}
	    
			$document_root = $this->os->get_document_root();
			$modules_dir = $this->os->get_module_dir();
			
			// get module dependencies based on the member group
			$sql = "SELECT
				D.id,
		    	D.directory,
				D.file
				FROM
				qo_modules_has_dependencies AS MD
					INNER JOIN qo_dependencies AS D ON D.id = MD.qo_dependencies_id
					INNER JOIN qo_modules AS M ON M.id = MD.qo_modules_id
				WHERE
				M.active = 1
				AND
				M.id = ".$module_id;
			
			if($result = mysql_query($sql)){
				while($row = mysql_fetch_assoc($result)){
					if($_SESSION['dependencies']['loaded'][ $row['id'] ]){ continue; }
					
				    print file_get_contents($document_root.$modules_dir.$row["directory"].$row["file"]);
				    $_SESSION['dependencies']['loaded'][ $row['id'] ] = 1;
				}
			}
			
			// get module files
			$sql = "SELECT
				F.directory,
				F.file
				FROM
				qo_modules_files AS F
					INNER JOIN qo_modules AS M ON M.id = F.qo_modules_id
				WHERE
				F.is_stylesheet = 0
				AND
				F.is_server_module = 0
				AND
				F.is_client_module = 0
				AND
				M.active = 1
				AND
				M.id = '".$module_id."'";
			
			if($result = mysql_query($sql)){
				while($row = mysql_fetch_assoc($result)){				    
				    print file_get_contents($document_root.$modules_dir.$row["directory"].$row["file"]);
				}
			}
		}
	} // end load()
	
	
	
	/** load_all() Prints the content of all the client module files
	  **/
	public function load_all(){
		$member_id = $this->os->session->get_member_id();
		$group_id = $this->os->session->get_group_id();
		
		if($member_id != "" && $group_id != ""){
			$document_root = $this->os->get_document_root();
			$modules_dir = $this->os->get_module_dir();
			
			// get active modules
			$sql = "SELECT
				M.module_id AS moduleId,
				F.directory,
				F.file,
				F.class_name AS class
				FROM
				qo_modules_files AS F
					INNER JOIN qo_modules AS M ON M.id = F.qo_modules_id
				WHERE
				F.is_client_module = 1
				AND
				M.active = 1";
			
			if($result = mysql_query($sql)){
				$count = 0;
				
				while($row = mysql_fetch_assoc($result)){
					if($row['moduleId'] != '' && $row['directory'] != '' && $row['file'] != '' && $row['class'] != ''){
						
						// if the member is not allowed to load this module, skip it
					    if(!$this->os->privilege->is_allowed("loadModule", $row["moduleId"], $member_id, $group_id)){
					    	continue;
					    }
					    
					    // if the module is not valid
					    if(!$this->is_loadable($row["moduleId"])){
					        continue;
					    }
					    
					    print file_get_contents($document_root.$modules_dir.$row["directory"].$row["file"]);
					    
					    // track loaded modules
					    $_SESSION['modules']['loaded'][$count]['moduleId'] = $row["moduleId"];
					    $_SESSION['modules']['loaded'][$count]['class'] = $row["class"];
					    
					    $count++;
					}
				}
			}
		}
	} // end load_all()
	
	
	
	/** run_action() Will check the users privileges and execute the action if allowed
	  * 
	  * @param {string} $moduleId The client moduleId property
	  * @param {string} $action, the name of the action/method to call (e.g. $module->action())
	  **/
	public function run_action($moduleId, $action){
		$member_id = $this->os->session->get_member_id();
		$group_id = $this->os->session->get_group_id();

		if($member_id == '' || $group_id == ''){
			die("{success: false, msg: 'You are not currently logged in'}");
		}else{
			//if member is allowed this action on this module
			if(!$this->os->privilege->is_allowed($action, $moduleId, $member_id, $group_id)){
				die("{success: false, msg: 'You do not have the required privileges!'}");
			}
			
			$sql = "SELECT
				F.directory,
				F.file,
				F.class_name AS class
				FROM
				qo_modules_files AS F
					INNER JOIN qo_modules AS M ON M.id = F.qo_modules_id
				WHERE
				F.is_server_module = 1
				AND
				M.active = 1
				AND
				M.module_id = '".$moduleId."'";
				
			if(mysql_num_rows($result = mysql_query($sql)) > 0){
				$row = mysql_fetch_assoc($result);
				$module_dir = $this->os->get_module_dir();
				
				$file = $module_dir.$row["directory"].$row["file"];
				$class = $row["class"];

				if(is_file($file)){
					require($file);

					if(class_exists($class)){				
						$module = new $class($this->os);

						if(method_exists($module, $action)){
							$module->$action();
						}
					}
				}
			}
		}
	} // end run_action()
}
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -