reload plugins if they change

This commit is contained in:
Friendika 2011-03-09 02:12:32 -08:00
parent 5f54503780
commit 32e96d2647
4 changed files with 62 additions and 5 deletions

View file

@ -2,8 +2,8 @@
set_time_limit(0); set_time_limit(0);
define ( 'BUILD_ID', 1039 ); define ( 'BUILD_ID', 1040 );
define ( 'FRIENDIKA_VERSION', '2.10.0910' ); define ( 'FRIENDIKA_VERSION', '2.10.0912' );
define ( 'DFRN_PROTOCOL_VERSION', '2.1' ); define ( 'DFRN_PROTOCOL_VERSION', '2.1' );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
@ -512,22 +512,70 @@ function check_config(&$a) {
foreach($plugins_arr as $p) { foreach($plugins_arr as $p) {
if(! in_array($p,$installed_arr)) { if(! in_array($p,$installed_arr)) {
logger("Addons: installing " . $p); logger("Addons: installing " . $p);
$t = filemtime('addon/' . $p . '/' . $p . '.php');
@include_once('addon/' . $p . '/' . $p . '.php'); @include_once('addon/' . $p . '/' . $p . '.php');
if(function_exists($p . '_install')) { if(function_exists($p . '_install')) {
$func = $p . '_install'; $func = $p . '_install';
$func(); $func();
$r = q("INSERT INTO `addon` (`name`, `installed`) VALUES ( '%s', 1 ) ", $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`) VALUES ( '%s', 1, %d ) ",
dbesc($p) dbesc($p),
intval($t)
); );
} }
} }
} }
} }
load_hooks(); load_hooks();
return; return;
}} }}
// reload all updated plugins
if(! function_exists('reload_plugins')) {
function reload_plugins() {
$plugins = get_config('system','addon');
if(strlen($plugins)) {
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
if(count($r))
$installed = $r;
else
$installed = array();
$parr = explode(',',$plugins);
if(count($parr)) {
foreach($parr as $pl) {
$pl = trim($pl);
$t = filemtime('addon/' . $pl . '/' . $pl . '.php');
foreach($installed as $i) {
if(($i['name'] == $pl) && ($i['timestamp'] != $t)) {
logger('Reloading plugin: ' . $i['name']);
@include_once('addon/' . $pl . '/' . $pl . '.php');
if(function_exists($pl . '_uninstall')) {
$func = $pl . '_uninstall';
$func();
}
if(function_exists($pl . '_install')) {
$func = $pl . '_install';
$func();
}
q("UPDATE `addon` SET `timestamp` = %d WHERE `id` = %d LIMIT 1",
intval($t),
intval($i['id'])
);
}
}
}
}
}
}}
// This is our template processor. // This is our template processor.
// $s is the string requiring macro substitution. // $s is the string requiring macro substitution.

View file

@ -451,7 +451,8 @@ CREATE TABLE IF NOT EXISTS `addon` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` CHAR( 255 ) NOT NULL , `name` CHAR( 255 ) NOT NULL ,
`version` CHAR( 255 ) NOT NULL , `version` CHAR( 255 ) NOT NULL ,
`installed` TINYINT( 1 ) NOT NULL DEFAULT '0' `installed` TINYINT( 1 ) NOT NULL DEFAULT '0' ,
`timestamp` BIGINT NOT NULL DEFAULT '0'
) ENGINE = MYISAM DEFAULT CHARSET=utf8; ) ENGINE = MYISAM DEFAULT CHARSET=utf8;

View file

@ -47,6 +47,11 @@ function poller_run($argv, $argc){
$sql_extra = (($manual_id) ? " AND `id` = $manual_id " : ""); $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
$d = datetime_convert();
call_hooks('cron', $d);
reload_plugins();
$contacts = q("SELECT `id` FROM `contact` $contacts = q("SELECT `id` FROM `contact`
WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
$sql_extra $sql_extra

View file

@ -374,3 +374,6 @@ function update_1038() {
q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` "); q("ALTER TABLE `item` ADD `plink` CHAR( 255 ) NOT NULL AFTER `target` ");
} }
function update_1039() {
q("ALTER TABLE `addon` ADD `timestamp` BIGINT NOT NULL DEFAULT '0'");
}