api_components.php

来自「sabreipb 2.1.6 utf-8中文版本!」· PHP 代码 · 共 429 行

PHP
429
字号
<?php/*+--------------------------------------------------------------------------|   Invision Power Board v2.1.5|   =============================================|   by Matthew Mecham|   (c) 2001 - 2005 Invision Power Services, Inc.|   |   =============================================|   Web: |   Time: Wed, 01 Mar 2006 19:11:28 GMT|   Release: |   Licence Info: +---------------------------------------------------------------------------|   > $Date: 2005-10-10 14:08:54 +0100 (Mon, 10 Oct 2005) $|   > $Revision: 23 $|   > $Author: matt $+---------------------------------------------------------------------------||   > API: Components|   > Module written by Matt Mecham|   > Date started: Wednesday 19th July 2005 (16:57)|+--------------------------------------------------------------------------*//*** API: Components** EXAMPLE USAGE* <code>* //-- UPDATE EXISTING ROW --//* $api =  new api_components();* # Optional - if $ipsclass is not passed, it'll init* $api->ipsclass =& $this->ipsclass;* $api->api_init();* $update = array (*					'com_version' => '1.3',*					'com_menu_data' => array( 0 => array(*												    	  'menu_text'      => 'Link text',*												    	  'menu_url'       => 'code=showme',*												    	  'menu_redirect'  => 0,*												    	  'menu_permbit'   => 'keyhere',*												    	  'menu_permlang'  => 'Allow CREATE Something' ),*											 1 => array(*												    	  'menu_text'      => 'Link text 2',*												    	  'menu_url'       => 'section=tools&act=op&code=showme2',*												    	  'menu_redirect'  => 1,*												    	  'menu_permbit'   => 'add',*												    	  'menu_permlang'  => '' )*											) );*												    	 * $api->acp_component_update( 'blog', $update );* //-- ENABLE A COMPONENT --//* $api->acp_component_enable( 'blog' );* </code>** COMPONENT FIELDS* <code>* 'com_title'       = Component Title* 'com_author'      = Component Author* 'com_version'     = Component Version* 'com_url'         = Component Home URL* 'com_menu_data'   = Component Menu Data Array* 'com_enabled'     = Component Enabled* 'com_safemode'    = Component Safemode (admins cannot alter)* 'com_section_key' = Component Section (Key, must match filename. eg: blog if using blog.php)* 'com_description' = Component Description* 'com_url_uri'     = Component Board Header URL URI* 'com_url_title'   = Component Board Header URL Title* </code>** @package		InvisionPowerBoard* @subpackage	APIs* @author		Matt Mecham* @copyright	Invision Power Services, Inc.* @version		2.1*/if ( ! defined( 'IPS_API_PATH' ) ){	/**	* Define classes path	*/	define( 'IPS_API_PATH', dirname(__FILE__) ? dirname(__FILE__) : '.' );}if ( ! defined('IPS_API_CORE_LOADED') ){	require_once( IPS_API_PATH.'/api_core.php' );		/**	* CORE LOADED	*/	define( 'IPS_API_CORE_LOADED', TRUE );}/*** API: Components** This class deals with all available components functions.** @package		InvisionPowerBoard* @subpackage	APIs* @author  	 	Matt Mecham* @version		2.1* @since		2.1.0*/class api_components extends api_core{	/**	* Loaded component	*	* @var array	*/	var $component;		/*-------------------------------------------------------------------------*/	// Get component by key	/*-------------------------------------------------------------------------*/	/**	* Updates a component	*	* @param	string	Component key (eg: blog)	* @return	void	Populates $this->component	*/	function get_component_by_key( $key )	{		$this->component = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',																			 'from'   => 'components',																			 'where'  => 'com_section="'.$key.'"' ) );	}		/*-------------------------------------------------------------------------*/	// Create menu	/*-------------------------------------------------------------------------*/	/**	* Creates serialized string from a menu array	* <code>	* $menu_data [ $item_id ]['menu_text']	* $menu_data [ $item_id ]['menu_url']	* $menu_data [ $item_id ]['menu_redirect']	* $menu_data [ $item_id ]['menu_permbit']	* $menu_data [ $item_id ]['menu_permlang']	* </code>	*	* @param	array	multi-dimenisonal array	* @return void;	*/	function acp_component_create_menu_data( $menu_data )	{		if ( is_array( $menu_data ) )		{			return serialize( $menu_data );		}	}		/*-------------------------------------------------------------------------*/	// Update component	/*-------------------------------------------------------------------------*/	/**	* Updates a component	*	* @param	string	Component key (eg: blog)	* @param	array	Component fields ( must match class fields, see class docs )	* @return void;	*/	function acp_component_insert( $key, $fields )	{		//-------------------------------		// INIT		//-------------------------------				$key_saved = 0;				$com_title       = trim( $fields['com_title'] );		$com_version     = trim( $fields['com_version'] );		$com_description = trim( $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_UNhtmlspecialchars($fields['com_description'])) );		$com_author      = trim( $fields['com_author'] );		$com_url         = trim( $fields['com_url'] );		$com_menu_data   = $fields['com_menu_data'];		$com_enabled     = intval($fields['com_enabled']);		$com_section_key = trim( $fields['com_section_key'] );		$com_safemode    = intval($fields['com_safemode']);		$com_url_title   = trim( $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_windowstounix($fields['com_url_title']) ) );		$com_url_uri     = trim( $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_windowstounix($fields['com_url_uri']) ) );				//-------------------------------		// Check?		//-------------------------------				if ( ! $com_title OR ! $com_menu_data OR ! $com_section_key )		{			$this->api_error[] = "input_missing_fields";			return;		}				//-------------------------------		// Already a key in use?		//-------------------------------				$this->get_component_by_key( $key );				if ( $this->component['com_id'] )		{			$this->api_error[] = "duplicate_component_key";			return;		}				//-------------------------------		// Menu not already serialized?		//-------------------------------				if ( is_array( $com_menu_data ) )		{			$com_menu_data = $this->acp_component_create_menu_data( $com_menu_data );		}				//-------------------------------		// Save it		//-------------------------------				$this->ipsclass->DB->force_data_type = array( 'com_version' => 'string' );				$array = array( 'com_title'       => $com_title,						'com_author'      => $com_author,						'com_version'     => $com_version,						'com_url'         => $com_url,						'com_menu_data'   => $com_menu_data,						'com_enabled'     => $com_enabled,						'com_safemode'    => $com_safemode,						'com_section'     => $com_section_key,						'com_filename'    => $com_section_key,						'com_description' => $com_description,						'com_url_uri'     => $com_url_uri,						'com_url_title'   => $com_url_title,						'com_date_added'  => time(),					 );					//-------------------------------		// Got anything to save?		//-------------------------------				if ( count( $array ) )		{			$this->ipsclass->DB->do_insert( 'components', $array );		}				//-------------------------------		// Rebuild cache		//-------------------------------				$this->acp_component_rebuildcache();	}		/*-------------------------------------------------------------------------*/	// Update component	/*-------------------------------------------------------------------------*/	/**	* Updates a component	*	* @param	string	Component key (eg: blog)	* @param	array	Component fields ( must match class fields, see class docs )	* @return void;	*/	function acp_component_update( $key, $fields )	{		//-------------------------------		// INIT		//-------------------------------				$key_saved = 0;		$save      = array();				//-------------------------------		// Check?		//-------------------------------				if ( ! $fields OR ! $key )		{			$this->api_error[] = "input_missing_fields";			return;		}				//-------------------------------		// Get stuff from DB		//-------------------------------				$this->get_component_by_key( $key );				if ( ! $this->component['com_id'] )		{			$this->api_error[] = "duplicate_component_key";			return;		}				$this->component['_com_section'] = $this->component['com_section'];				//-------------------------------		// Update...		//-------------------------------				foreach( $fields as $k => $v )		{			if ( ( $k == 'com_section_key' OR $k == 'com_section' OR $k == 'com_filename' ) AND $key_saved == 0 )			{				//-------------------------------				// Make sure we don't have another				// key the same				//-------------------------------								if ( $v != $this->component['_com_section'] )				{					$tmp = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'com_id',																			 'from'   => 'components',																			 'where'  => 'com_section="'.$v.'"' ) );																			 					if ( $tmp['com_id'] AND $tmp['com_id'] != $this->component['com_id'] )					{						$this->api_error[] = "duplicate_component_key";						return;					}				}								$save['com_section']  = $v;				$save['com_filename'] = $v;								$key_saved = 1;			}			else if ( $k == 'com_menu_data' )			{				//-------------------------------				// Menu not already serialized?				//-------------------------------								if ( is_array( $v ) )				{					$v = $this->acp_component_create_menu_data( $v );				}								$save[ $k ] = $v;			}			else			{				$save[ $k ] = $v;			}		}					//-------------------------------		// Got anything to save?		//-------------------------------				if ( count( $save ) )		{			$this->ipsclass->DB->do_update( 'components', $save, 'com_id='.$this->component['com_id'] );		}				$this->acp_component_rebuildcache();	}		/*-------------------------------------------------------------------------*/	// Remove component	/*-------------------------------------------------------------------------*/	/**	* Remove a component [ no confirmation screens! ]	*	* @param	string	Component key (eg: blog)	* @return	void		*/	function acp_component_remove( $key )	{		$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'components', 'where' => 'com_section="'.$key.'"' ) );		$this->acp_component_rebuildcache();	}		/*-------------------------------------------------------------------------*/	// Enable component	/*-------------------------------------------------------------------------*/	/**	* Enable a component	*	* @param	string	Component key (eg: blog)	* @return	void		*/	function acp_component_enable( $key )	{		$this->acp_component_update( $key, array( 'com_enabled' => 1 ) );		$this->acp_component_rebuildcache();	}		/*-------------------------------------------------------------------------*/	// Disable component	/*-------------------------------------------------------------------------*/	/**	* Enable a component	*	* @param	string	Component key (eg: blog)	* @return	void		*/	function acp_component_disable( $key )	{		$this->acp_component_update( $key, array( 'com_enabled' => 0 ) );		$this->acp_component_rebuildcache();	}		/*-------------------------------------------------------------------------*/	// Components Rebuild Cache	/*-------------------------------------------------------------------------*/	/**	* Rebuild cache	*	* @return	void		*/	function acp_component_rebuildcache()	{		require_once( ROOT_PATH. 'sources/action_admin/components.php' );		$components           =  new ad_components();		$components->ipsclass =& $this->ipsclass;		$components->components_rebuildcache();	}			}?>

⌨️ 快捷键说明

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