| 0,0 → 1,134 |
| <?php |
| /** |
| * Basic Plugin Functions |
| * |
| * PHP version 5 |
| * |
| * @category PHP |
| * @package PSI_Plugin |
| * @author Michael Cramer <BigMichi1@users.sourceforge.net> |
| * @copyright 2009 phpSysInfo |
| * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version |
| * @version SVN: $Id: class.PSI_Plugin.inc.php 661 2012-08-27 11:26:39Z namiltd $ |
| * @link http://phpsysinfo.sourceforge.net |
| */ |
| /** |
| * basic functions to get a plugin working in phpSysinfo |
| * every plugin must implement this abstract class to be a valid plugin, main tasks |
| * of this class are reading the configuration file and check for the required files |
| * (*.js, lang/en.xml) to get everything working, if we have errors here we log them |
| * to our global error object |
| * |
| * @category PHP |
| * @package PSI_Plugin |
| * @author Michael Cramer <BigMichi1@users.sourceforge.net> |
| * @copyright 2009 phpSysInfo |
| * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version |
| * @version Release: 3.0 |
| * @link http://phpsysinfo.sourceforge.net |
| */ |
| abstract class PSI_Plugin implements PSI_Interface_Plugin |
| { |
| /** |
| * name of the plugin (classname) |
| * |
| * @var string |
| */ |
| private $_plugin_name = ""; |
| |
| /** |
| * full directory path of the plugin |
| * |
| * @var string |
| */ |
| private $_plugin_base = ""; |
| |
| /** |
| * global object for error handling |
| * |
| * @var Error |
| */ |
| protected $global_error = ""; |
| |
| /** |
| * xml tamplate with header |
| * |
| * @var SimpleXMLExtended |
| */ |
| protected $xml; |
| |
| /** |
| * build the global Error object, read the configuration and check if all files are available |
| * for a minimalistic function of the plugin |
| * |
| * @param string $plugin_name name of the plugin |
| * @param string $enc target encoding |
| * @return void |
| */ |
| public function __construct($plugin_name, $enc) |
| { |
| $this->global_error = PSI_Error::Singleton(); |
| if (trim($plugin_name) != "") { |
| $this->_plugin_name = $plugin_name; |
| $this->_plugin_base = PSI_APP_ROOT."/plugins/".strtolower($this->_plugin_name)."/"; |
| $this->_checkfiles(); |
| $this->_getconfig(); |
| } else { |
| $this->global_error->addError("__construct()", "Parent constructor called without Plugin-Name!"); |
| } |
| $this->_createXml($enc); |
| } |
| |
| /** |
| * read the plugin configuration file, if we have one in the plugin directory |
| * |
| * @return void |
| */ |
| private function _getconfig() |
| { |
| if ((!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_ACCESS')) && |
| (!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_FILE')) && |
| (!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_SHOW_SERIAL'))) { |
| $this->global_error->addError("phpsysinfo.ini", "Config for plugin ".$this->_plugin_name." not exist!"); |
| } |
| } |
| |
| /** |
| * check if there is a default translation file availabe and also the required js file for |
| * appending the content of the plugin to the main webpage |
| * |
| * @return void |
| */ |
| private function _checkfiles() |
| { |
| if (!file_exists($this->_plugin_base."js/".strtolower($this->_plugin_name).".js")) { |
| $this->global_error->addError("file_exists(".$this->_plugin_base."js/".strtolower($this->_plugin_name).".js)", "JS-File for Plugin '".$this->_plugin_name."' is missing!"); |
| } else { |
| if (!is_readable($this->_plugin_base."js/".strtolower($this->_plugin_name).".js")) { |
| $this->global_error->addError("is_readable(".$this->_plugin_base."js/".strtolower($this->_plugin_name).".js)", "JS-File for Plugin '".$this->_plugin_name."' is not readable but present!"); |
| } |
| } |
| if (!file_exists($this->_plugin_base."lang/en.xml")) { |
| $this->global_error->addError("file_exists(".$this->_plugin_base."lang/en.xml)", "At least an english translation must exist for the plugin!"); |
| } else { |
| if (!is_readable($this->_plugin_base."lang/en.xml")) { |
| $this->global_error->addError("is_readable(".$this->_plugin_base."js/".$this->_plugin_name.".js)", "The english translation can't be read but is present!"); |
| } |
| } |
| } |
| |
| /** |
| * create the xml template where plugin information are added to |
| * |
| * @param string $enc target encoding |
| * |
| * @return void |
| */ |
| private function _createXml($enc) |
| { |
| $dom = new DOMDocument('1.0', 'UTF-8'); |
| $root = $dom->createElement("Plugin_".$this->_plugin_name); |
| $dom->appendChild($root); |
| $this->xml = new SimpleXMLExtended(simplexml_import_dom($dom), $enc); |
| } |
| } |