PHP Classes

File: bt-include/plugins.functions.php

Recommend this page to a friend!
  Classes of Michael Dale   Bluetrait   bt-include/plugins.functions.php   Download  
File: bt-include/plugins.functions.php
Role: Auxiliary script
Content type: text/plain
Description: Plugin Support File
Class: Bluetrait
A multi-user blog system
Author: By
Last change:
Date: 15 years ago
Size: 10,309 bytes
 

Contents

Class file image Download
<?php /* Bluetrait 2.0 Plugin Support Michael Dale Copyright 2008 */ if (!defined('BT_ROOT')) exit; $bt_installed_plugins = bt_get_config('plugin_data'); $bt_plugin_dir = BT_ROOT . BT_CONTENT . '/bt-plugins/'; $bt_tasks = array(); $bt_content_filters = array(); function bt_load_plugins() { global $bt_installed_plugins, $bt_plugin_dir; if (is_array($bt_installed_plugins)) { foreach($bt_installed_plugins as $x) { $x = bt_sanitize_plugin_name($x); if (file_exists("$bt_plugin_dir$x.plugin.php")) { include("$bt_plugin_dir$x.plugin.php"); } else { bt_disable_plugin($x); } } } } function bt_plugin_loaded($plugin_name) { global $bt_installed_plugins; if (!empty($plugin_name) && is_array($bt_installed_plugins)) { if (in_array($plugin_name, $bt_installed_plugins)) { return true; } else { return false; } } else { return false; } } //enable a plugin function bt_enable_plugin($plugin_name) { global $bt_installed_plugins; $plugin_name = bt_sanitize_plugin_name($plugin_name); if (!empty($plugin_name)) { if (!in_array($plugin_name, $bt_installed_plugins)) { bt_run_section('enable_plugin_' . $plugin_name); $bt_installed_plugins[] = $plugin_name; trigger_error('Plugin enabled: "' . $plugin_name . '"', E_USER_NOTICE); bt_set_config('plugin_data', $bt_installed_plugins); } } } //disable a plugin function bt_disable_plugin($plugin_name) { global $bt_installed_plugins; if (in_array($plugin_name, $bt_installed_plugins)) { bt_run_section('disable_plugin_' . $plugin_name); $key = array_search($plugin_name, $bt_installed_plugins); unset($bt_installed_plugins[$key]); $bt_installed_plugins = array_values($bt_installed_plugins); trigger_error('Plugin disabled: "' . $plugin_name . '"', E_USER_NOTICE); bt_set_config('plugin_data', $bt_installed_plugins); } } function bt_disable_all() { $bt_installed_plugins; foreach ($bt_installed_plugins as $index => $value) { bt_run_section('disable_plugin_' . $value); } $installed_plugins = array(); trigger_error("Plugins Disabled", E_USER_NOTICE); bt_set_config('plugin_data', $installed_plugins); } function bt_any_enabled() { global $bt_installed_plugins; if (empty($bt_installed_plugins)) { return false; } else { return true; } } function bt_add_task($plugin_name, $section, $function, $priority = 10, $arguments = 1) { global $bt_tasks; //need to fix this for objects if (is_object($function[0])) bt_die('Objects can not currently be used for tasks.'); $bt_tasks[$section][$priority][$function] = array($plugin_name, $arguments); return true; } function bt_has_task($section) { global $bt_tasks; if (isset($bt_tasks[$section])) { return true; } else { return false; } } function bt_remove_task($section, $function, $priority = 10) { global $bt_tasks; unset($bt_tasks[$section][$priority][$function]); return true; } function bt_add_content_filter($plugin_name, $section, $function, $priority = 10, $arguments = 1) { global $bt_content_filters; //need to fix this for objects if (is_object($function[0])) bt_die('Objects can not currently be used for tasks.'); $bt_content_filters[$section][$priority][$function] = array($plugin_name, $arguments); return; } function bt_has_content_filter($section) { global $bt_content_filters; if (isset($bt_content_filters[$section])) { return true; } else { return false; } } function bt_remove_content_filter($section, $function, $priority = 10) { global $bt_content_filters; unset($bt_content_filters[$section][$priority][$function]); return; } //pass by reference function bt_run_section_ref($section, &$args = '') { global $bt_tasks; //echo $section . '<br />'; if (!isset($bt_tasks[$section])) return false; //sorts based on priority, 1 being the highest (first run) ksort($bt_tasks[$section], SORT_NUMERIC); //call_user_func_array requires an array $arguments = array(&$args); foreach($bt_tasks[$section] as $priority => $functions) { foreach($bt_tasks[$section][$priority] as $function => $task_details) { if (!function_exists($function)) { trigger_error('Plugin "'. bt_htmlentities($task_details[0]) .'" called undefined function "' . bt_htmlentities($function) . '" in section "' . bt_htmlentities($section) . '".', E_USER_ERROR); continue; } call_user_func_array($function, $arguments); } } return true; } function bt_run_section($section, $args = '') { return bt_run_section_ref($section, $args); } /* */ function bt_run_content_filter($section, $content = '') { global $bt_content_filters; //echo $section . '<br />'; if (!isset($bt_content_filters[$section])) return $content; //sorts based on priority, 1 being the highest (first run) ksort($bt_content_filters[$section], SORT_NUMERIC); foreach($bt_content_filters[$section] as $priority => $functions) { foreach($bt_content_filters[$section][$priority] as $function => $task_details) { if (!function_exists($function)) { trigger_error('Plugin "'. bt_htmlentities($task_details[0]) .'" called undefined function "' . bt_htmlentities($function) . '" in section "' . bt_htmlentities($section) . '".', E_USER_ERROR); continue; } $content = call_user_func($function, $content); } } return $content; } function bt_get_all_plugins() { global $bt_plugin_dir, $bt_general_plugin_warning; $plugin_info = array(); $plugin_info_temp = array(); $bt_general_plugin_warning = FALSE; if (is_dir($bt_plugin_dir)) { $plugin_folders[] = ''; $folder = opendir($bt_plugin_dir); while (false !== ($dir_array = readdir($folder))) { if ($dir_array != '.' && $dir_array != '..') { if(is_dir($bt_plugin_dir . $dir_array)) { if (bt_sanitize_plugin_name($dir_array) == $dir_array) { $plugin_folders[] = $dir_array . '/'; } } } } closedir($folder); } foreach($plugin_folders as $plugin_folder) { $plugin_folder_full = $bt_plugin_dir . $plugin_folder; if (is_dir($plugin_folder_full)) { $folder = opendir($plugin_folder_full); while (false !== ($file_array = readdir($folder))) { if ($file_array != '.' && $file_array != '..') { if(filetype($plugin_folder_full . $file_array) == 'file') { if(preg_match("/^([a-z0-9_\/]+).plugin.php$/", $file_array, $matches) > 0){ $plugin_info[$matches[1]] = array ( 'plugin_file_name' => $plugin_folder . $matches[1], 'plugin_name' => $matches[1], 'plugin_description' => 'Meta File Missing Or Corrupt', 'plugin_update_checker_url' => '', 'plugin_author' => '', 'plugin_author_website' => '', 'plugin_website' => '', 'plugin_version' => '' ); if (file_exists($plugin_folder_full . $matches[1] . '.meta.plugin.php')) { include_once($plugin_folder_full . $matches[1] . '.meta.plugin.php'); if (class_exists($matches[1])) { $plugin_info_temp[$matches[1]] = new $matches[1]; if (method_exists($plugin_info_temp[$matches[1]], 'meta_data')) { $plugin_info[$matches[1]] = $plugin_info_temp[$matches[1]]->meta_data(); $plugin_info[$matches[1]]['plugin_file_name'] = $plugin_folder . $matches[1]; } else { } } else { $bt_general_plugin_warning = TRUE; trigger_error('The meta file for plugin "' . bt_htmlentities($matches[1]) . '" does not contain the "' . bt_htmlentities($matches[1]) . '" class.', E_USER_WARNING); } } else { $bt_general_plugin_warning = TRUE; trigger_error('The meta file for plugin "' . bt_htmlentities($matches[1]) . '" cannot be found.<br />It should be in the plugins folder called "' . bt_htmlentities($matches[1] . '.meta.plugin.php') . '" but is not.', E_USER_WARNING); } } } } } closedir($folder); } } ksort($plugin_info); return $plugin_info; } function bt_sanitize_plugin_name($plugin_name) { $plugin_name = strtolower($plugin_name); $plugin_name = preg_replace('([^0-9a-z_\/])', '', $plugin_name); return $plugin_name; } //function from WordPress function bt_plugin_basename($file) { $file = str_replace('\\','/',$file); // sanitize for Win32 installs $file = preg_replace('|/+|','/', $file); // remove any duplicate slash $file = preg_replace('|^.*' . BT_CONTENT . '/bt-plugins' . '/|','',$file); // get relative path from plugins dir return $file; } function bt_plugin_base_url($file) { $file = bt_plugin_basename($file); $file = str_replace('.plugin.php','',$file); return $file; } //check if a plugin is out of date function bt_plugin_out_of_date($plugin_name, $plugin_version) { static $plugin_update_data_array; if (!isset($plugin_update_data_array)) { $plugin_update_data_array = bt_get_config('plugin_update_data'); } $plugin_name = bt_sanitize_plugin_name($plugin_name); if (isset($plugin_update_data_array[$plugin_name])) { try { $plugin_update_data = $plugin_update_data_array[$plugin_name]; $current_version = explode('-', $plugin_version); $current_version = $current_version[0]; $xml = new SimpleXMLElement($plugin_update_data); if (version_compare($current_version, $xml->version, '<')) { //new version $array['version'] = $xml->version; $array['release_notes'] = $xml->release_notes; $array['download'] = $xml->download; return $array; } else { return false; } } catch (Exception $e) { trigger_error('Unable to read update information for plugin "'.bt_htmlentities($plugin_name).'"', E_USER_ERROR); } } else { return false; } } ?>