aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriendika <info@friendika.com>2011-03-09 02:12:32 -0800
committerFriendika <info@friendika.com>2011-03-09 02:12:32 -0800
commit32e96d2647b4f535bf329caf160336f3358ce423 (patch)
tree655706734e18bbbb6710a0ea8d58dc11676d349b
parent5f54503780ac6f94bbfe2692682aab5355673d16 (diff)
downloadvolse-hubzilla-32e96d2647b4f535bf329caf160336f3358ce423.tar.gz
volse-hubzilla-32e96d2647b4f535bf329caf160336f3358ce423.tar.bz2
volse-hubzilla-32e96d2647b4f535bf329caf160336f3358ce423.zip
reload plugins if they change
-rw-r--r--boot.php56
-rw-r--r--database.sql3
-rw-r--r--include/poller.php5
-rw-r--r--update.php3
4 files changed, 62 insertions, 5 deletions
diff --git a/boot.php b/boot.php
index d3380a395..37cd42592 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', "<br />\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 93e444b6b..f47a5967e 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 fd02e0198..a093190a6 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 131014d4a..422c27c7b 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