From 9c8be228a73a602ac3e91e30bf980dd1cc695a81 Mon Sep 17 00:00:00 2001 From: Karl 'vollmerk' Vollmer Date: Sun, 26 Nov 2006 20:28:46 +0000 Subject: playlist switcher, plugin interface and the shell of a lastfm plugin (need patch file) --- lib/class/plugin.class.php | 218 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 lib/class/plugin.class.php (limited to 'lib/class/plugin.class.php') diff --git a/lib/class/plugin.class.php b/lib/class/plugin.class.php new file mode 100644 index 00000000..5a058ac5 --- /dev/null +++ b/lib/class/plugin.class.php @@ -0,0 +1,218 @@ +_get_info($name)) { + return false; + } + + return true; + + } // Plugin + + + /** + * _get_info + * This actually loads the config file for the plugin the name of the + * class contained within the config file must be Plugin[NAME OF FILE] + */ + function _get_info($name) { + + /* Require the file we want */ + require_once(conf('prefix') . '/modules/plugins/' . $name . '.plugin.php'); + + $plugin_name = "Ampache$name"; + + $this->_plugin = new $plugin_name(); + + if (!$this->is_valid()) { + return false; + } + + return true; + + } // _get_info + + /** + * is_valid + * This checks to make sure the plugin has the required functions and + * settings, Ampache requires Name/Description/Version (Int) and a + * install & uninstall method and Ampache must be within the min/max + * version specifications + */ + function is_valid() { + + /* Check the plugin to make sure it's got the needed vars */ + if (!strlen($this->_plugin->name)) { + return false; + } + if (!strlen($this->_plugin->description)) { + return false; + } + if (!strlen($this->_plugin->version)) { + return false; + } + + /* Make sure we've got the required methods */ + if (!method_exists($this->_plugin,'install')) { + return false; + } + + if (!method_exists($this->_plugin,'uninstall')) { + return false; + } + + /* Make sure it's within the version confines */ + $db_version = $this->get_ampache_db_version(); + + if ($db_version < $this->_plugin->min_ampache) { + return false; + } + + if ($db_version > $this->_plugin->max_ampache) { + return false; + } + + /* We've passed all of the tests its good */ + return true; + + } // is_valid + + /** + * is_installed + * This checks to see if the current plugin is currently installed in the + * database, it doesn't check the files for integrity + */ + function is_installed() { + + /* All we do is check the version */ + return $this->get_plugin_version(); + + } // is_installed + + /** + * install + * This runs the install function of the plugin (must be called install) + * at the end it inserts a row into the update_info table to indicate + * That it's installed + */ + function install() { + + $this->_plugin->install(); + + $this->set_plugin_version($this->_plugin->version); + + } // install + + /** + * uninstall + * This runs the uninstall function of the plugin (must be called uninstall) + * at the end it removes the row from the update_info table to indicate + * that it isn't installed + */ + function uninstall() { + + $this->_plugin->uninstall(); + + $this->remove_plugin_version(); + + } // uninstall + + /** + * get_plugin_version + * This returns the version of the currently installed plugin + */ + function get_plugin_version() { + + $name = sql_escape('Plugin_' . $this->_plugin->name); + + $sql = "SELECT * FROM update_info WHERE `key`='$name'"; + $db_results = mysql_query($sql,dbh()); + + $results = mysql_fetch_assoc($db_results); + + return $results['value']; + + } // get_plugin_version + + /** + * get_ampache_db_version + * This function returns the Ampache database version + */ + function get_ampache_db_version() { + + $sql = "SELECT * FROM update_info WHERE `key`='db_version'"; + $db_results = mysql_query($sql,dbh()); + + $results = mysql_fetch_assoc($db_results); + + return $results['value']; + + } // get_ampache_db_version + + /** + * set_plugin_version + * This sets the plugin version in the update_info table + */ + function set_plugin_version($version) { + + $name = sql_escape('Plugin_' . $this->_plugin->name); + $version = sql_escape($version); + + $sql = "INSERT INTO update_info SET `key`='$name', value='$version'"; + $db_results = mysql_query($sql,dbh()); + + return true; + + } // set_plugin_version + + /** + * remove_plugin_version + * This removes the version row from the db done on uninstall + */ + function remove_plugin_version() { + + $name = sql_escape('Plugin_' . $this->_plugin->name); + + $sql = "DELETE FROM update_info WHERE `key`='$name'"; + $db_results = mysql_query($sql,dbh()); + + return true; + + } // remove_plugin_version + +} //end plugin class +?> -- cgit