%PDF- %PDF-
| Direktori : /www/varak.net/paste.varak.net.old/libs/ |
| Current File : /www/varak.net/paste.varak.net.old/libs/Hooks.class.php |
<?php
/**
* @author eric.wzy@gmail.com
* @version 1.1
* @package phphooks
* @category Plugins
*
* @license http://www.gnu.org/copyleft/lesser.html LGPL
*/
define ( 'PLUGINS_FOLDER', 'plugins/' );
class phphooks {
var $addblock = array();
var $addsideblock = array();
var $add_Menu = array();
var $add_User_Menu = array();
/**
* plugins option data
* @var array
*/
var $plugins = array();
/**
* UNSET means load all plugins, which is stored in the plugin folder. ISSET just load the plugins in this array.
* @var array
*/
var $active_plugins = NULL;
/**
* all plugins header information array.
* @var array
*/
var $plugins_header = array();
/**
* hooks data
* @var array
*/
var $hooks = array();
/**
* register hook name/tag, so plugin developers can attach functions to hooks
* @package phphooks
* @since 1.0
*
* @param string $tag. The name of the hook.
*/
function set_hook($tag) {
$this->hooks[$tag] = '';
}
/**
* register multiple hooks name/tag
* @package phphooks
* @since 1.0
*
* @param array $tags. The name of the hooks.
*/
function set_hooks($tags) {
foreach ( $tags as $tag ) {
$this->set_hook ( $tag );
}
}
/**
* write hook off
* @package phphooks
* @since 1.0
*
* @param string $tag. The name of the hook.
*/
function unset_hook($tag) {
unset ( $this->hooks [$tag] );
}
/**
* write multiple hooks off
* @package phphooks
* @since 1.0
*
* @param array $tags. The name of the hooks.
*/
function unset_hooks($tags) {
foreach ($tags as $tag) {
$this->developer_unset_hook($tag);
}
}
/**
* load plugins from specific folder, includes *.plugin.php files
* @package phphooks
* @since 1.0
*
* @param string $from_folder optional. load plugins from folder, if no argument is supplied, a 'plugins/' constant will be used
*/
function load_plugins($from_folder = PLUGINS_FOLDER) {
if ($handle = @opendir ( $from_folder )) {
while ( $file = readdir ( $handle ) ) {
if (is_file ( $from_folder . $file )) {
if (($this->active_plugins != NULL && in_array ( $file, $this->active_plugins )) && strpos ( $file, '.plugin.php' )) {
require_once $from_folder . $file;
$this->plugins [$file] ['file'] = $file;
}
} else if ((is_dir ( $from_folder . $file )) && ($file != '.') && ($file != '..')) {
$this->load_plugins ( $from_folder . $file . '/' );
}
}
closedir ( $handle );
}
}
/**
* return the all plugins ,which is stored in the plugin folder, header information.
*
* @package phphooks
* @since 1.1
* @param string $from_folder optional. load plugins from folder, if no argument is supplied, a 'plugins/' constant will be used
* @return array. return the all plugins ,which is stored in the plugin folder, header information.
*/
function get_plugins_header($from_folder = PLUGINS_FOLDER) {
if ($handle = @opendir ( $from_folder )) {
while ( $file = readdir ( $handle ) ) {
if (is_file ( $from_folder . $file )) {
if (strpos ( $from_folder . $file, '.plugin.php' )) {
$fp = fopen ( $from_folder . $file, 'r' );
// Pull only the first 8kiB of the file in.
$plugin_data = fread ( $fp, 8192 );
fclose ( $fp );
preg_match ( '|Plugin Name:(.*)$|mi', $plugin_data, $name );
preg_match ( '|Plugin URI:(.*)$|mi', $plugin_data, $uri );
preg_match ( '|Version:(.*)|i', $plugin_data, $version );
preg_match ( '|Description:(.*)$|mi', $plugin_data, $description );
preg_match ( '|Author:(.*)$|mi', $plugin_data, $author_name );
preg_match ( '|Author URI:(.*)$|mi', $plugin_data, $author_uri );
foreach ( array ('name', 'uri', 'version', 'description', 'author_name', 'author_uri' ) as $field ) {
if (! empty ( ${$field} ))
${$field} = trim ( ${$field} [1] );
else
${$field} = '';
}
$plugin_data = array ('filename' => $file, 'Name' => $name, 'Title' => $name, 'PluginURI' => $uri, 'Description' => $description, 'Author' => $author_name, 'AuthorURI' => $author_uri, 'Version' => $version );
$this->plugins_header [] = $plugin_data;
}
} else if ((is_dir ( $from_folder . $file )) && ($file != '.') && ($file != '..')) {
$this->get_plugins_header ( $from_folder . $file . '/' );
}
}
closedir ( $handle );
}
return $this->plugins_header;
}
/**
* attach custom function to hook
* @package phphooks
* @since 1.0
*
* @param string $tag. The name of the hook.
* @param string $function. The function you wish to be called.
* @param int $priority optional. Used to specify the order in which the functions associated with a particular action are executed.(range 0~20, 0 first call, 20 last call)
*/
function add_hook($tag, $function, $priority = 10) {
if (! isset ( $this->hooks [$tag] )) {
die ( "There is no such place ($tag) for hooks." );
} else {
$this->hooks [$tag] [$priority] [] = $function;
}
}
/**
* check whether any function is attached to hook
* @package phphooks
* @since 1.0
*
* @param string $tag The name of the hook.
*/
function hook_exist($tag) {
return ( $this->hooks [$tag] == "") ? false : true;
}
/**
* execute all functions which are attached to hook, you can provide argument (or arguments via array)
* @package phphooks
* @since 1.0
*
* @param string $tag. The name of the hook.
* @param mix $args optional.The arguments the function accept (default none)
* @return optional.
*/
function execute_hook($tag, $args = '') {
if (isset ( $this->hooks [$tag] )) {
$these_hooks = $this->hooks [$tag];
for($i = 0; $i <= 20; $i ++) {
if (isset ( $these_hooks [$i] )) {
foreach ( $these_hooks [$i] as $hook ) {
// $args [] = $result;
$result = call_user_func ( $hook, $args );
}
}
}
return $result;
} else {
die ( "There is no such place ($tag) for hooks." );
}
}
/**
* filter $args and after modify, return it. (or arguments via array)
* @package phphooks
* @since 1.0
*
* @param string $tag. The name of the hook.
* @param mix $args optional.The arguments the function accept to filter(default none)
* @return array. The $args filter result.
*/
function filter_hook($tag, $args = '') {
$result = $args;
if (isset ( $this->hooks [$tag] )) {
$these_hooks = $this->hooks [$tag];
for($i = 0; $i <= 20; $i ++) {
if (isset ( $these_hooks [$i] )) {
foreach ( $these_hooks [$i] as $hook ) {
$args = $result;
$result = call_user_func ( $hook, $args );
}
}
}
return $result;
} else {
die ( "There is no such place ($tag) for hooks." );
}
}
/**
* register plugin data in $this->plugin
* @package phphooks
* @since 1.0
*
* @param string $plugin_id. The name of the plugin.
* @param array $data optional.The data the plugin accessorial(default none)
*/
function register_plugin($plugin_id, $data = '') {
foreach ( $data as $key => $value ) {
$this->plugins [$plugin_id] [$key] = $value;
}
}
/**
* Function of hook part
* by atmoner
*/
###
function set_title($id,$title=NULL) {
$this->title->$id->id = $id;
$this->title->$id = $title;
}
###
function remove_title($id) {
unset($this->title->$id);
}
###
function add_block($id, $title, $content, $size, $p=5) {
$this->addblock[$id]['id'] = $id;
$this->addblock[$id]['title'] = $title;
$this->addblock[$id]['content'] = $content;
$this->addblock[$id]['size'] = $size;
$this->addblock[$id]['prio'] = $p;
}
###
function remove_block($id) {
unset($this->addblock[$id]);
}
###
function add_side_block($id, $title, $content, $p=5) {
$this->addsideblock[$id]['id'] = $id;
$this->addsideblock[$id]['title'] = $title;
$this->addsideblock[$id]['content'] = $content;
$this->addsideblock[$id]['prio'] = $p;
}
###
function remove_side_block($id) {
unset($this->addsideblock[$id]);
}
###
function addMenu($id, $title, $url, $img, $p=5) {
$this->add_Menu[$id]['id'] = $id;
$this->add_Menu[$id]['title'] = $title;
$this->add_Menu[$id]['url'] = $url;
$this->add_Menu[$id]['img'] = $img;
$this->add_Menu[$id]['prio'] = $p;
}
###
function remove_addMenu($id) {
unset($this->add_Menu[$id]);
}
###
function addMenuLang($id, $title, $url, $img, $p=5) {
$this->add_Menu_Lang[$id]['id'] = $id;
$this->add_Menu_Lang[$id]['title'] = $title;
$this->add_Menu_Lang[$id]['url'] = $url;
$this->add_Menu_Lang[$id]['img'] = $img;
$this->add_Menu_Lang[$id]['prio'] = $p;
}
###
function remove_addMenuLang($id) {
unset($this->add_Menu_Lang[$id]);
}
###
function addUserMenu($id, $title, $url, $img, $p=5) {
$this->add_User_Menu[$id]['id'] = $id;
$this->add_User_Menu[$id]['title'] = $title;
$this->add_User_Menu[$id]['url'] = $url;
$this->add_User_Menu[$id]['img'] = $img;
$this->add_User_Menu[$id]['prio'] = $p;
}
###
function remove_addUserMenu($id) {
unset($this->add_User_Menu[$id]);
}
###################
# Add addcontentPaste
###################
function addcontentPaste($id, $content, $p=5) {
$this->add_contentPaste[$id]['id'] = $id;
$this->add_contentPaste[$id]['content'] = $content;
$this->add_contentPaste[$id]['prio'] = $p;
}
###
function remove_addcontentPaste($id) {
unset($this->add_contentPaste[$id]);
}
###################
# Add content registration
###################
function add_content_registration($id, $content, $p=5) {
$this->addcontentregistration[$id]['id'] = $id;
$this->addcontentregistration[$id]['content'] = $content;
$this->addcontentregistration[$id]['prio'] = $p;
}
###
function remove_content_registration($id) {
unset($this->addcontentregistration[$id]);
}
###################
# Add content login
###################
function add_content_login($id, $content, $p=5) {
$this->addcontentlogin[$id]['id'] = $id;
$this->addcontentlogin[$id]['content'] = $content;
$this->addcontentlogin[$id]['prio'] = $p;
}
###
function remove_content_login($id) {
unset($this->addcontentlogin[$id]);
}
###################
# Add admin menu
###################
function add_admin_menu($id, $title, $link, $p=5) {
$this->linkplug[$id]['id'] = $id;
$this->linkplug[$id]['title'] = $title;
$this->linkplug[$id]['link'] = $link;
$this->linkplug[$id]['prio'] = $p;
}
###
function remove_admin_menu($id) {
unset($this->addcontentlogin[$id]);
}
###################
# Add js
###################
public function addJs($id, $file, $path, $p=5) {
global $conf;
if(!preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $file))
$file = $conf['baseurl'].'/'.$path.$file;
$this->add_Js[$id]['id'] = $id;
$this->add_Js[$id]['file'] = $file;
$this->add_Js[$id]['prio'] = $p;
}
###
public function remove_addJs($id) {
unset($this->add_Js[$id]);
}
###################
# Add css
###################
public function addCss($id, $file, $path, $p=5) {
global $conf;
if(!preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $file))
$file = $conf['baseurl'].'/'.$path.$file;
$this->add_Css[$id]['id'] = $id;
$this->add_Css[$id]['file'] = $file;
$this->add_Css[$id]['prio'] = $p;
}
###
public function remove_addCss($id) {
unset($this->add_Css[$id]);
}
###################
# Add page
###################
public function add_page( $plugin_name, $strip ) {
global $smarty,$path;
$get_page = (isset($_GET["page"])?$_GET["page"]:"");
$pagesdir = dirname(__FILE__).'/../plugins/'.$plugin_name.'/php/';
$files = glob($pagesdir.'*.php');
// var_dump($get_page);
if ($get_page === $plugin_name) {
if(in_array($pagesdir.$plugin_name.'.php',$files)) {
require($pagesdir.$get_page.'.php');
$smarty->display(dirname(__FILE__).'/../plugins/'.$plugin_name.'/html/'.$get_page.'.html');
} else
die('Check the configuration of your plugin!');
} else
die('404');
}
###################
# Add admin page
###################
function add_admin_page( $plugin_name, $strip ) {
global $smarty,$path;
$get_page = (isset($_GET["act"])?$_GET["act"]:"");
$pagesdir = dirname(__FILE__).'/../plugins/'.$plugin_name.'/php/admin/';
$files = glob($pagesdir.'*.php');
if ($get_page === $plugin_name) {
if(in_array($pagesdir.$plugin_name.'.php',$files)) {
require($pagesdir.$get_page.'.php');
$smarty->display(dirname(__FILE__).'/../plugins/newpage/html/admin/'.$get_page.'.html');
}
}
}
}
?>