From 32e96d2647b4f535bf329caf160336f3358ce423 Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 9 Mar 2011 02:12:32 -0800 Subject: [PATCH] reload plugins if they change --- boot.php | 56 ++++++++++++++++++++++++++++++++++++++++++---- database.sql | 3 ++- include/poller.php | 5 +++++ update.php | 3 +++ 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/boot.php b/boot.php index d3380a39..37cd4259 100644 --- a/boot.php +++ b/boot.php @@ -2,8 +2,8 @@ set_time_limit(0); -define ( 'BUILD_ID', 1039 ); -define ( 'FRIENDIKA_VERSION', '2.10.0910' ); +define ( 'BUILD_ID', 1040 ); +define ( 'FRIENDIKA_VERSION', '2.10.0912' ); define ( 'DFRN_PROTOCOL_VERSION', '2.1' ); define ( 'EOL', "
\r\n" ); @@ -512,22 +512,70 @@ function check_config(&$a) { foreach($plugins_arr as $p) { if(! in_array($p,$installed_arr)) { logger("Addons: installing " . $p); + $t = filemtime('addon/' . $p . '/' . $p . '.php'); @include_once('addon/' . $p . '/' . $p . '.php'); if(function_exists($p . '_install')) { $func = $p . '_install'; $func(); - $r = q("INSERT INTO `addon` (`name`, `installed`) VALUES ( '%s', 1 ) ", - dbesc($p) + $r = q("INSERT INTO `addon` (`name`, `installed`, `timestamp`) VALUES ( '%s', 1, %d ) ", + dbesc($p), + intval($t) ); } } } } + + load_hooks(); 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. // $s is the string requiring macro substitution. diff --git a/database.sql b/database.sql index 93e444b6..f47a5967 100644 --- a/database.sql +++ b/database.sql @@ -451,7 +451,8 @@ CREATE TABLE IF NOT EXISTS `addon` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` 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; diff --git a/include/poller.php b/include/poller.php index fd02e019..a093190a 100644 --- a/include/poller.php +++ b/include/poller.php @@ -47,6 +47,11 @@ function poller_run($argv, $argc){ $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : ""); + $d = datetime_convert(); + call_hooks('cron', $d); + + reload_plugins(); + $contacts = q("SELECT `id` FROM `contact` WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' $sql_extra diff --git a/update.php b/update.php index 131014d4..422c27c7 100644 --- a/update.php +++ b/update.php @@ -374,3 +374,6 @@ function update_1038() { 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'"); +} \ No newline at end of file