summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/modules.php14
-rwxr-xr-xdocs/CHANGELOG1
-rw-r--r--docs/PLUGINS25
-rw-r--r--lib/class/plugin.class.php91
-rw-r--r--lib/class/preference.class.php12
-rw-r--r--lib/class/rating.class.php7
-rw-r--r--lib/class/user.class.php27
-rw-r--r--lib/preferences.php25
-rw-r--r--modules/plugins/Lastfm.plugin.php114
-rw-r--r--modules/plugins/Librefm.plugin.php114
-rw-r--r--templates/show_plugins.inc.php10
11 files changed, 285 insertions, 155 deletions
diff --git a/admin/modules.php b/admin/modules.php
index fd1e14b9..669840d9 100644
--- a/admin/modules.php
+++ b/admin/modules.php
@@ -123,7 +123,19 @@ switch ($_REQUEST['action']) {
show_confirmation($title,$body,$url);
break;
case 'upgrade_plugin':
-
+ /* Verify that this plugin exists */
+ $plugins = Plugin::get_plugins();
+ if (!array_key_exists($_REQUEST['plugin'],$plugins)) {
+ debug_event('plugins','Error: Invalid Plugin: ' . $_REQUEST['plugin'] . ' selected','1');
+ break;
+ }
+ $plugin = new Plugin($_REQUEST['plugin']);
+ $plugin->upgrade();
+ User::rebuild_all_preferences();
+ $url = Config::get('web_path') . '/admin/modules.php?action=show_plugins';
+ $title = _('Plugin Upgraded');
+ $body = '';
+ show_confirmation($title, $body, $url);
break;
case 'show_plugins':
$plugins = Plugin::get_plugins();
diff --git a/docs/CHANGELOG b/docs/CHANGELOG
index 1d553223..9c3bb3c8 100755
--- a/docs/CHANGELOG
+++ b/docs/CHANGELOG
@@ -4,6 +4,7 @@
--------------------------------------------------------------------------
v.3.6-Alpha1
+ - New plugin architecture
- Fixed display charset issue with catalog add/update
- Fixed handling of temporary playlists with >100 items
- Changed Browse from a singleton to multiple instances
diff --git a/docs/PLUGINS b/docs/PLUGINS
new file mode 100644
index 00000000..910a9e1a
--- /dev/null
+++ b/docs/PLUGINS
@@ -0,0 +1,25 @@
+Plugins are placed in modules/plugins; the name of the file must be
+<Name>.plugin.php, e.g. Dummy.plugin.php. The file must declare a
+corresponding class and the name of the class must be prefixed with
+Ampache, e.g. AmpacheDummy.
+
+The following public variables must be declared:
+ name (string)
+ description (string)
+ version (int) - This plugin's version
+ min_ampache (int) - Minimum Ampache DB version required
+ max_ampache (int) - Maximum Ampache DB version supported
+
+The following public methods must be implemented:
+ install
+ uninstall
+ load
+
+The following public methods may be implemented:
+ upgrade
+
+Finally, for the plugin to actually be useful one or more of the following hooks
+should be implemented as a public method:
+ save_rating(Rating $rating, int $new_value)
+ save_songplay(Song $song)
+
diff --git a/lib/class/plugin.class.php b/lib/class/plugin.class.php
index 63eeb593..57157723 100644
--- a/lib/class/plugin.class.php
+++ b/lib/class/plugin.class.php
@@ -71,7 +71,7 @@ class Plugin {
* get_plugins
* This returns an array of plugin names
*/
- public static function get_plugins() {
+ public static function get_plugins($type='') {
$results = array();
@@ -87,11 +87,24 @@ class Plugin {
// Ignore non-plugin files
if (substr($file,-10,10) != 'plugin.php') { continue; }
if (is_dir($file)) { continue; }
-
- // It's a plugin record it
$plugin_name = basename($file,'.plugin.php');
+ if ($type != '') {
+ $plugin = new Plugin($plugin_name);
+ if (! Plugin::is_installed($plugin->_plugin->name)) {
+ debug_event('Plugins', 'Plugin ' . $plugin->_plugin->name . ' is not installed, skipping', 5);
+ continue;
+ }
+ if (! $plugin->is_valid()) {
+ debug_event('Plugins', 'Plugin ' . $plugin_name . ' is not valid, skipping', 5);
+ continue;
+ }
+ if (! method_exists($plugin->_plugin, $type)) {
+ debug_event('Plugins', 'Plugin ' . $plugin_name . ' does not support ' . $type . ', skipping', 5);
+ continue;
+ }
+ }
+ // It's a plugin record it
$results[$plugin_name] = $plugin_name;
-
} // end while
// Little stupid but hey
@@ -104,9 +117,10 @@ class Plugin {
/**
* 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
+ * settings. Ampache requires public variables name, description, and
+ * version (as an int), and methods install, uninstall, and load. We
+ * also check that Ampache's database version falls within the min/max
+ * version specified by the plugin.
*/
function is_valid() {
@@ -130,6 +144,10 @@ class Plugin {
return false;
}
+ if (!method_exists($this->_plugin,'load')) {
+ return false;
+ }
+
/* Make sure it's within the version confines */
$db_version = $this->get_ampache_db_version();
@@ -141,15 +159,15 @@ class Plugin {
return false;
}
- /* We've passed all of the tests its good */
+ // We've passed all of the tests
return true;
} // is_valid
/**
* is_installed
- * This checks to see if the specified plugin is currently installed in the
- * database, it doesn't check the files for integrity
+ * This checks to see if the specified plugin is currently installed in
+ * the database, it doesn't check the files for integrity
*/
public static function is_installed($plugin_name) {
@@ -160,27 +178,22 @@ class Plugin {
/**
* 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
+ * This runs the install function of the plugin and inserts a row into
+ * the update_info table to indicate that it's installed.
*/
public function install() {
+ if ($this->_plugin->install() &&
+ $this->set_plugin_version($this->_plugin->version)) {
+ return true;
+ }
- $installed = $this->_plugin->install();
-
- $version = $this->set_plugin_version($this->_plugin->version);
-
- if (!$installed OR !$version) { return false; }
-
- return true;
-
+ return false;
} // 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
+ * This runs the uninstall function of the plugin and removes the row
+ * from the update_info table to indicate that it isn't installed.
*/
public function uninstall() {
@@ -191,6 +204,28 @@ class Plugin {
} // uninstall
/**
+ * upgrade
+ * This runs the upgrade function of the plugin (if it exists) and
+ * updates the database to indicate our new version.
+ */
+ public function upgrade() {
+ if (method_exists($this->_plugin, 'upgrade')) {
+ if($this->_plugin->upgrade()) {
+ $this->set_plugin_version($this->_plugin->version);
+ }
+ }
+ } // upgrade
+
+ /**
+ * load
+ * This calls the plugin's load function
+ */
+ public function load() {
+ $GLOBALS['user']->set_preferences();
+ return $this->_plugin->load();
+ }
+
+ /**
* get_plugin_version
* This returns the version of the specified plugin
*/
@@ -201,9 +236,11 @@ class Plugin {
$sql = "SELECT * FROM `update_info` WHERE `key`='$name'";
$db_results = Dba::read($sql);
- $results = Dba::fetch_assoc($db_results);
+ if ($results = Dba::fetch_assoc($db_results)) {
+ return $results['value'];
+ }
- return $results['value'];
+ return false;
} // get_plugin_version
@@ -231,7 +268,7 @@ class Plugin {
$name = Dba::escape('Plugin_' . $this->_plugin->name);
$version = Dba::escape($version);
- $sql = "INSERT INTO `update_info` SET `key`='$name', `value`='$version'";
+ $sql = "REPLACE INTO `update_info` SET `key`='$name', `value`='$version'";
$db_results = Dba::read($sql);
return true;
diff --git a/lib/class/preference.class.php b/lib/class/preference.class.php
index a6cf2d11..051e58d8 100644
--- a/lib/class/preference.class.php
+++ b/lib/class/preference.class.php
@@ -289,6 +289,18 @@ class Preference {
} // delete
/**
+ * rename
+ * This renames a preference in the database
+ */
+ public static function rename($old, $new) {
+ $old = Dba::escape($old);
+ $new = Dba::escape($new);
+
+ $sql = "UPDATE `preference` SET `name`='$new' WHERE `name`='$old'";
+ $db_results = Dba::write($sql);
+ }
+
+ /**
* rebuild_preferences
* This removes any garbage and then adds back in anything missing preferences wise
*/
diff --git a/lib/class/rating.class.php b/lib/class/rating.class.php
index be0ee2f2..19550ca6 100644
--- a/lib/class/rating.class.php
+++ b/lib/class/rating.class.php
@@ -202,6 +202,13 @@ class Rating extends database_object {
parent::add_to_cache('rating_' . $type . '_user' . $user_id, $id, $rating);
+ foreach (Plugin::get_plugins('save_rating') as $plugin_name) {
+ $plugin = new Plugin($plugin_name);
+ if ($plugin->load()) {
+ $plugin->_plugin->save_rating($this, $score);
+ }
+ }
+
return true;
} // set_rating
diff --git a/lib/class/user.class.php b/lib/class/user.class.php
index 0c5c0653..de759378 100644
--- a/lib/class/user.class.php
+++ b/lib/class/user.class.php
@@ -564,31 +564,22 @@ class User extends database_object {
if (!strlen($song_info->file)) { return false; }
- // Make sure we didn't just play this song
- $data = Stats::get_last_song($this->id);
+ // Make sure we've played a significant chunk of the song
+ $data = Stats::get_last_song($user);
$last_song = new Song($data['object_id']);
- if ($data['date']+($song_info->time/2) >= time()) {
- debug_event('Stats','Not collecting stats less then 50% of song has elapsed','3');
+ if ($data['date'] + ($song_info->time / 2) >= time()) {
+ debug_event('Stats','Not collecting stats less than 50% of song has elapsed','3');
return false;
}
$this->set_preferences();
- // Check if lastfm is loaded, if so run the update
- if (Plugin::is_installed('Last.FM')) {
- $lastfm = new Plugin('Lastfm');
- if ($lastfm->_plugin->load($this->prefs,$this->id)) {
- $lastfm->_plugin->submit($song_info,$this->id);
+ foreach (Plugin::get_plugins('save_songplay') as $plugin_name) {
+ $plugin = new Plugin($plugin_name);
+ if ($plugin->load()) {
+ $plugin->_plugin->save_songplay($song_info);
}
- } // end if is_installed
-
- // Check and see if librefm is loaded and run scrobblizing
- if (Plugin::is_installed('Libre.FM')) {
- $librefm = new Plugin('Librefm');
- if ($librefm->_plugin->load($this->prefs,$this->id)) {
- $librefm->_plugin->submit($song_info,$this->id);
- }
- } // end if is_installed
+ }
// Do this last so the 'last played checks are correct'
Stats::insert('song',$song_id,$user);
diff --git a/lib/preferences.php b/lib/preferences.php
index 79ecf7a1..0d76cc19 100644
--- a/lib/preferences.php
+++ b/lib/preferences.php
@@ -58,17 +58,17 @@ function update_preferences($pref_id=0) {
case 'sample_rate':
$value = Stream::validate_bitrate($value);
break;
- /* MD5 the LastFM & MyStrands so it's not plainTXT */
- case 'librefm_pass':
- case 'lastfm_pass':
- /* If it's our default blanking thing then don't use it */
- if ($value == '******') { unset($_REQUEST[$name]); break; }
- $value = md5($value);
- break;
default:
break;
}
+ if (preg_match('/_pass$/', $name)) {
+ if ($value == '******') { unset($_REQUEST[$name]); }
+ else if (preg_match('/md5_pass$/', $name)) {
+ $value = md5($value);
+ }
+ }
+
/* Run the update for this preference only if it's set */
if (isset($_REQUEST[$name])) {
Preference::update($id,$pref_id,$value,$_REQUEST[$apply_to_all]);
@@ -247,10 +247,6 @@ function create_preference_input($name,$value) {
} // foreach themes
echo "</select>\n";
break;
- case 'lastfm_pass':
- case 'librefm_pass':
- echo "<input type=\"password\" size=\"16\" name=\"$name\" value=\"******\" />";
- break;
case 'playlist_method':
${$value} = ' selected="selected"';
echo "<select name=\"$name\">\n";
@@ -293,7 +289,12 @@ function create_preference_input($name,$value) {
echo "</select>\n";
break;
default:
- echo "<input type=\"text\" size=\"$len\" name=\"$name\" value=\"$value\" />";
+ if (preg_match('/_pass$/', $name)) {
+ echo '<input type="password" size="16" name="' . $name . '" value="******" />';
+ }
+ else {
+ echo '<input type="text" size="' . $len . '" name="' . $name . '" value="' . $value .'" />';
+ }
break;
}
diff --git a/modules/plugins/Lastfm.plugin.php b/modules/plugins/Lastfm.plugin.php
index 24f9862f..0e432492 100644
--- a/modules/plugins/Lastfm.plugin.php
+++ b/modules/plugins/Lastfm.plugin.php
@@ -25,18 +25,19 @@ class AmpacheLastfm {
public $name ='Last.FM';
public $description ='Records your played songs to your Last.FM Account';
public $url ='';
- public $version ='000003';
- public $min_ampache ='340007';
- public $max_ampache ='340008';
+ public $version ='000004';
+ public $min_ampache ='360003';
+ public $max_ampache ='999999';
// These are internal settings used by this class, run this->load to
- // fill em out
+ // fill them out
private $username;
private $password;
private $hostname;
private $port;
private $path;
private $challenge;
+ private $user_id;
/**
* Constructor
@@ -46,11 +47,11 @@ class AmpacheLastfm {
return true;
- } // PluginLastfm
+ } // constructor
/**
* install
- * This is a required plugin function it inserts the required preferences
+ * This is a required plugin function. It inserts our preferences
* into Ampache
*/
public function install() {
@@ -59,7 +60,7 @@ class AmpacheLastfm {
if (Preference::exists('lastfm_user')) { return false; }
Preference::insert('lastfm_user','Last.FM Username','','25','string','plugins');
- Preference::insert('lastfm_pass','Last.FM Password','','25','string','plugins');
+ Preference::insert('lastfm_md5_pass','Last.FM Password','','25','string','plugins');
Preference::insert('lastfm_port','Last.FM Submit Port','','25','string','internal');
Preference::insert('lastfm_host','Last.FM Submit Host','','25','string','internal');
Preference::insert('lastfm_url','Last.FM Submit URL','','25','string','internal');
@@ -71,12 +72,12 @@ class AmpacheLastfm {
/**
* uninstall
- * This is a required plugin function it removes the required preferences from
- * the database returning it to its origional form
+ * This is a required plugin function. It removes our preferences from
+ * the database returning it to its original form
*/
public function uninstall() {
- Preference::delete('lastfm_pass');
+ Preference::delete('lastfm_md5_pass');
Preference::delete('lastfm_user');
Preference::delete('lastfm_url');
Preference::delete('lastfm_host');
@@ -86,30 +87,44 @@ class AmpacheLastfm {
} // uninstall
/**
- * submit
- * This takes care of queueing and then submiting the tracks eventually this will make sure
- * that you've haven't
+ * upgrade
+ * This is a recommended plugin function
*/
- public function submit($song,$user_id) {
+ public function upgrade() {
+ $from_version = Plugin::get_plugin_version($this->name);
+ if ($from_version < 4) {
+ Preference::rename('lastfm_pass', 'lastfm_md5_pass');
+ }
+ return true;
+ } // upgrade
+
+ /**
+ * save_songplay
+ * This takes care of queueing and then submitting the tracks.
+ */
+ public function save_songplay($song) {
- // Before we start let's pull the last song submited by this user
- $previous = Stats::get_last_song($user_id);
+ // Let's pull the last song submitted by this user
+ $previous = Stats::get_last_song($this->user_id);
$diff = time() - $previous['date'];
// Make sure it wasn't within the last min
if ($diff < 60) {
- debug_event('LastFM','Last song played within ' . $diff . ' seconds, not recording stats','3');
+ debug_event($this->name,'Last song played within ' . $diff . ' seconds, not recording stats','3');
return false;
}
if ($song->time < 30) {
- debug_event('LastFM','Song less then 30 seconds not queueing','3');
+ debug_event($this->name,'Song less then 30 seconds not queueing','3');
return false;
}
// Make sure there's actually a username and password before we keep going
- if (!$this->username || !$this->password) { return false; }
+ if (!$this->username || !$this->password) {
+ debug_event($this->name,'Username or password missing','3');
+ return false;
+ }
// Create our scrobbler with everything this time and then queue it
$scrobbler = new scrobbler($this->username,$this->password,$this->hostname,$this->port,$this->path,$this->challenge);
@@ -122,10 +137,10 @@ class AmpacheLastfm {
// Go ahead and submit it now
if (!$scrobbler->submit_tracks()) {
- debug_event('LastFM','Error Submit Failed: ' . $scrobbler->error_msg,'3');
+ debug_event($this->name,'Error Submit Failed: ' . $scrobbler->error_msg,'3');
if ($scrobbler->reset_handshake) {
- debug_event('LastFM','Re-running Handshake due to error','3');
- $this->set_handshake($user_id);
+ debug_event($this->name,'Re-running Handshake due to error','3');
+ $this->set_handshake($this->user_id);
// Try try again
if ($scrobbler->submit_tracks()) {
return true;
@@ -134,7 +149,7 @@ class AmpacheLastfm {
return false;
}
- debug_event('LastFM','Submission Successful','5');
+ debug_event($this->name,'Submission Successful','5');
return true;
@@ -142,9 +157,9 @@ class AmpacheLastfm {
/**
* set_handshake
- * This runs a handshake and properly updates the preferences as needed, it returns the data
- * as an array so we don't have to requery the db. This requires a userid so it knows who's
- * crap to update
+ * This runs a handshake and properly updates the preferences as needed.
+ * It returns the data as an array so we don't have to requery the db.
+ * This requires a userid so it knows whose crap to update.
*/
public function set_handshake($user_id) {
@@ -152,7 +167,7 @@ class AmpacheLastfm {
$data = $scrobbler->handshake();
if (!$data) {
- debug_event('LastFM','Handshake Failed: ' . $scrobbler->error_msg,'3');
+ debug_event($this->name,'Handshake Failed: ' . $scrobbler->error_msg,'3');
return false;
}
@@ -161,11 +176,11 @@ class AmpacheLastfm {
$this->path = $data['submit_url'];
$this->challenge = $data['challenge'];
- // Update the preferences
- Preference::update('lastfm_port',$user_id,$data['submit_port']);
- Preference::update('lastfm_host',$user_id,$data['submit_host']);
- Preference::update('lastfm_url',$user_id,$data['submit_url']);
- Preference::update('lastfm_challenge',$user_id,$data['challenge']);
+ // Update the preferences
+ Preference::update('lastfm_port',$user_id,$data['submit_port']);
+ Preference::update('lastfm_host',$user_id,$data['submit_host']);
+ Preference::update('lastfm_url',$user_id,$data['submit_url']);
+ Preference::update('lastfm_challenge',$user_id,$data['challenge']);
return true;
@@ -173,46 +188,49 @@ class AmpacheLastfm {
/**
* load
- * This loads up the data we need into this object, this stuff comes from the preferences
- * it's passed as a key'd array
+ * This loads up the data we need into this object, this stuff comes
+ * from the preferences.
*/
- public function load($data,$user_id) {
+ public function load() {
+
+ $GLOBALS['user']->set_preferences();
+ $data = $GLOBALS['user']->prefs;
if (strlen(trim($data['lastfm_user']))) {
$this->username = trim($data['lastfm_user']);
}
else {
- debug_event('LastFM','No Username, not scrobbling','3');
+ debug_event($this->name,'No Username, not scrobbling','3');
return false;
}
- if (strlen(trim($data['lastfm_pass']))) {
- $this->password = trim($data['lastfm_pass']);
+ if (strlen(trim($data['lastfm_md5_pass']))) {
+ $this->password = trim($data['lastfm_md5_pass']);
}
else {
- debug_event('LastFM','No Password, not scrobbling','3');
+ debug_event($this->name,'No Password, not scrobbling','3');
return false;
}
+ $this->user_id = $GLOBALS['user']->id;
+
// If we don't have the other stuff try to get it before giving up
if (!$data['lastfm_host'] || !$data['lastfm_port'] || !$data['lastfm_url'] || !$data['lastfm_challenge']) {
- debug_event('LastFM','Running Handshake, missing information','3');
- if (!$this->set_handshake($user_id)) {
- debug_event('LastFM','Handshake failed, you lose','3');
+ debug_event($this->name,'Running Handshake, missing information','3');
+ if (!$this->set_handshake($this->user_id)) {
+ debug_event($this->name,'Handshake failed, you lose','3');
return false;
}
}
else {
- $this->hostname = $data['lastfm_host'];
- $this->port = $data['lastfm_port'];
- $this->path = $data['lastfm_url'];
- $this->challenge = $data['lastfm_challenge'];
+ $this->hostname = $data['lastfm_host'];
+ $this->port = $data['lastfm_port'];
+ $this->path = $data['lastfm_url'];
+ $this->challenge = $data['lastfm_challenge'];
}
-
return true;
} // load
-
} // end AmpacheLastfm
?>
diff --git a/modules/plugins/Librefm.plugin.php b/modules/plugins/Librefm.plugin.php
index 36d72603..e0e1b9bd 100644
--- a/modules/plugins/Librefm.plugin.php
+++ b/modules/plugins/Librefm.plugin.php
@@ -25,18 +25,19 @@ class Ampachelibrefm {
public $name ='Libre.FM';
public $description ='Records your played songs to your Libre.FM Account';
public $url ='';
- public $version ='000001';
- public $min_ampache ='350001';
- public $max_ampache ='360008';
+ public $version ='000002';
+ public $min_ampache ='360003';
+ public $max_ampache ='999999';
// These are internal settings used by this class, run this->load to
- // fill em out
+ // fill them out
private $username;
private $password;
private $hostname;
private $port;
private $path;
private $challenge;
+ private $user_id;
/**
* Constructor
@@ -46,11 +47,11 @@ class Ampachelibrefm {
return true;
- } // Pluginlibrefm
+ } // constructor
/**
* install
- * This is a required plugin function it inserts the required preferences
+ * This is a required plugin function. It inserts our preferences
* into Ampache
*/
public function install() {
@@ -59,7 +60,7 @@ class Ampachelibrefm {
if (Preference::exists('librefm_user')) { return false; }
Preference::insert('librefm_user','Libre.FM Username','','25','string','plugins');
- Preference::insert('librefm_pass','Libre.FM Password','','25','string','plugins');
+ Preference::insert('librefm_md5_pass','Libre.FM Password','','25','string','plugins');
Preference::insert('librefm_port','Libre.FM Submit Port','','25','string','internal');
Preference::insert('librefm_host','Libre.FM Submit Host','','25','string','internal');
Preference::insert('librefm_url','Libre.FM Submit URL','','25','string','internal');
@@ -71,12 +72,12 @@ class Ampachelibrefm {
/**
* uninstall
- * This is a required plugin function it removes the required preferences from
- * the database returning it to its origional form
+ * This is a required plugin function. It removes our preferences from
+ * the database returning it to its original form
*/
public function uninstall() {
- Preference::delete('librefm_pass');
+ Preference::delete('librefm_md5_pass');
Preference::delete('librefm_user');
Preference::delete('librefm_url');
Preference::delete('librefm_host');
@@ -86,30 +87,44 @@ class Ampachelibrefm {
} // uninstall
/**
- * submit
- * This takes care of queueing and then submiting the tracks eventually this will make sure
- * that you've haven't
+ * upgrade
+ * This is a recommended plugin function
*/
- public function submit($song,$user_id) {
+ public function upgrade() {
+ $from_version = Plugin::get_plugin_version($this->name);
+ if ($from_version < 2) {
+ Preference::rename('librefm_pass', 'librefm_md5_pass');
+ }
+ return true;
+ } // upgrade
+
+ /**
+ * save_songplay
+ * This takes care of queueing and then submitting the tracks.
+ */
+ public function save_songplay($song) {
- // Before we start let's pull the last song submited by this user
- $previous = Stats::get_last_song($user_id);
+ // Before we start let's pull the last song submitted by this user
+ $previous = Stats::get_last_song($this->user_id);
$diff = time() - $previous['date'];
// Make sure it wasn't within the last min
if ($diff < 60) {
- debug_event('librefm','Last song played within ' . $diff . ' seconds, not recording stats','3');
+ debug_event($this->name,'Last song played within ' . $diff . ' seconds, not recording stats','3');
return false;
}
if ($song->time < 30) {
- debug_event('librefm','Song less then 30 seconds not queueing','3');
+ debug_event($this->name,'Song less then 30 seconds not queueing','3');
return false;
}
// Make sure there's actually a username and password before we keep going
- if (!$this->username || !$this->password) { return false; }
+ if (!$this->username || !$this->password) {
+ debug_event($this->name,'Username or password missing','3');
+ return false;
+ }
// Create our scrobbler with everything this time and then queue it
$scrobbler = new scrobbler($this->username,$this->password,$this->hostname,$this->port,$this->path,$this->challenge,'turtle.libre.fm');
@@ -122,10 +137,10 @@ class Ampachelibrefm {
// Go ahead and submit it now
if (!$scrobbler->submit_tracks()) {
- debug_event('librefm','Error Submit Failed: ' . $scrobbler->error_msg,'3');
+ debug_event($this->name,'Error Submit Failed: ' . $scrobbler->error_msg,'3');
if ($scrobbler->reset_handshake) {
- debug_event('librefm','Re-running Handshake due to error','3');
- $this->set_handshake($user_id);
+ debug_event($this->name,'Re-running Handshake due to error','3');
+ $this->set_handshake($this->user_id);
// Try try again
if ($scrobbler->submit_tracks()) {
return true;
@@ -134,7 +149,7 @@ class Ampachelibrefm {
return false;
}
- debug_event('librefm','Submission Successful','5');
+ debug_event($this->name,'Submission Successful','5');
return true;
@@ -142,9 +157,9 @@ class Ampachelibrefm {
/**
* set_handshake
- * This runs a handshake and properly updates the preferences as needed, it returns the data
- * as an array so we don't have to requery the db. This requires a userid so it knows who's
- * crap to update
+ * This runs a handshake and properly updates the preferences as needed.
+ * It returns the data as an array so we don't have to requery the db.
+ * This requires a userid so it knows whose crap to update.
*/
public function set_handshake($user_id) {
@@ -152,7 +167,7 @@ class Ampachelibrefm {
$data = $scrobbler->handshake();
if (!$data) {
- debug_event('librefm','Handshake Failed: ' . $scrobbler->error_msg,'3');
+ debug_event($this->name,'Handshake Failed: ' . $scrobbler->error_msg,'3');
return false;
}
@@ -161,11 +176,11 @@ class Ampachelibrefm {
$this->path = $data['submit_url'];
$this->challenge = $data['challenge'];
- // Update the preferences
- Preference::update('librefm_port',$user_id,$data['submit_port']);
- Preference::update('librefm_host',$user_id,$data['submit_host']);
- Preference::update('librefm_url',$user_id,$data['submit_url']);
- Preference::update('librefm_challenge',$user_id,$data['challenge']);
+ // Update the preferences
+ Preference::update('librefm_port',$user_id,$data['submit_port']);
+ Preference::update('librefm_host',$user_id,$data['submit_host']);
+ Preference::update('librefm_url',$user_id,$data['submit_url']);
+ Preference::update('librefm_challenge',$user_id,$data['challenge']);
return true;
@@ -173,46 +188,49 @@ class Ampachelibrefm {
/**
* load
- * This loads up the data we need into this object, this stuff comes from the preferences
- * it's passed as a key'd array
+ * This loads up the data we need into this object, this stuff comes
+ * from the preferences.
*/
- public function load($data,$user_id) {
+ public function load() {
+
+ $GLOBALS['user']->set_preferences();
+ $data = $GLOBALS['user']->prefs;
if (strlen(trim($data['librefm_user']))) {
$this->username = trim($data['librefm_user']);
}
else {
- debug_event('librefm','No Username, not scrobbling','3');
+ debug_event($this->name,'No Username, not scrobbling','3');
return false;
}
- if (strlen(trim($data['librefm_pass']))) {
- $this->password = trim($data['librefm_pass']);
+ if (strlen(trim($data['librefm_md5_pass']))) {
+ $this->password = trim($data['librefm_md5_pass']);
}
else {
- debug_event('librefm','No Password, not scrobbling','3');
+ debug_event($this->name,'No Password, not scrobbling','3');
return false;
}
+ $this->user_id = $GLOBALS['user']->id;
+
// If we don't have the other stuff try to get it before giving up
if (!$data['librefm_host'] || !$data['librefm_port'] || !$data['librefm_url'] || !$data['librefm_challenge']) {
- debug_event('librefm','Running Handshake, missing information','3');
- if (!$this->set_handshake($user_id)) {
- debug_event('librefm','Handshake failed, you lose','3');
+ debug_event($this->name,'Running Handshake, missing information','3');
+ if (!$this->set_handshake($this->user_id)) {
+ debug_event($this->name,'Handshake failed, you lose','3');
return false;
}
}
else {
- $this->hostname = $data['librefm_host'];
- $this->port = $data['librefm_port'];
- $this->path = $data['librefm_url'];
- $this->challenge = $data['librefm_challenge'];
+ $this->hostname = $data['librefm_host'];
+ $this->port = $data['librefm_port'];
+ $this->path = $data['librefm_url'];
+ $this->challenge = $data['librefm_challenge'];
}
-
return true;
} // load
-
} // end Ampachelibrefm
?>
diff --git a/templates/show_plugins.inc.php b/templates/show_plugins.inc.php
index 7606808e..fa818246 100644
--- a/templates/show_plugins.inc.php
+++ b/templates/show_plugins.inc.php
@@ -33,24 +33,32 @@ $web_path = Config::get('web_path');
<th class="cel_name"><?php echo _('Name'); ?></th>
<th class="cel_description"><?php echo _('Description'); ?></th>
<th class="cel_version"><?php echo _('Version'); ?></th>
+ <th class="cel_iversion"><?php echo _('Installed Version'); ?></th>
<th class="cel_action"><?php echo _('Action'); ?></th>
</tr>
<?php
foreach ($plugins as $plugin_name) {
$plugin = new Plugin($plugin_name);
- if (!Plugin::is_installed($plugin->_plugin->name)) {
+ $installed_version = Plugin::get_plugin_version($plugin->_plugin->name);
+ if (! $installed_version) {
$action = "<a href=\"" . $web_path . "/admin/modules.php?action=install_plugin&amp;plugin=" . scrub_out($plugin_name) . "\">" .
_('Activate') . "</a>";
}
else {
$action = "<a href=\"" . $web_path . "/admin/modules.php?action=confirm_uninstall_plugin&amp;plugin=" . scrub_out($plugin_name) . "\">" .
_('Deactivate') . "</a>";
+ if ($installed_version < $plugin->_plugin->version) {
+ $action .= '&nbsp;&nbsp;<a href="' . $web_path .
+ '/admin/modules.php?action=upgrade_plugin&amp;plugin=' .
+ scrub_out($plugin_name) . '">' . _('Upgrade') . '</a>';
+ }
}
?>
<tr class="<?php echo flip_class(); ?>">
<td class="cel_name"><?php echo scrub_out($plugin->_plugin->name); ?></td>
<td class="cel_description"><?php echo scrub_out($plugin->_plugin->description); ?></td>
<td class="cel_version"><?php echo scrub_out($plugin->_plugin->version); ?></td>
+ <td class="cel_iversion"><?php echo scrub_out($installed_version); ?></td>
<td class="cel_action"><?php echo $action; ?></td>
</tr>
<?php } if (!count($plugins)) { ?>