aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/poormancron/poormancron.php48
-rw-r--r--boot.php27
-rw-r--r--include/directory.php36
-rw-r--r--include/notifier.php76
-rw-r--r--include/poller.php44
-rw-r--r--include/queue.php35
-rw-r--r--mod/dfrn_confirm.php4
-rw-r--r--mod/dfrn_notify.php6
-rw-r--r--mod/follow.php4
-rw-r--r--mod/item.php7
-rw-r--r--mod/like.php8
-rw-r--r--mod/message.php4
-rw-r--r--mod/photos.php13
-rw-r--r--mod/profile_photo.php4
-rw-r--r--mod/profiles.php4
-rw-r--r--mod/settings.php4
16 files changed, 219 insertions, 105 deletions
diff --git a/addon/poormancron/poormancron.php b/addon/poormancron/poormancron.php
new file mode 100644
index 000000000..c31d2772c
--- /dev/null
+++ b/addon/poormancron/poormancron.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Poor Man Cron. Execute updates on pageviews
+ *
+ * Addon Name: poormancron
+ *
+ */
+
+function poormancron_install() {
+ register_hook('page_end', 'addon/poormancron/poormancron.php', 'poormancron_hook');
+ register_hook('proc_run', 'addon/poormancron/poormancron.php','poormancron_procrun');
+ logger("installed poormancron");
+}
+
+function poormancron_uninstall() {
+ unregister_hook('page_end', 'addon/poormancron/poormancron.php', 'poormancron_hook');
+ unregister_hook('proc_run', 'addon/poormancron/poormancron.php','poormancron_procrun');
+ logger("removed poormancron");
+}
+
+
+
+function poormancron_hook($a,&$b) {
+ $now = time();
+ $lastupdate = get_config('poormancron', 'lastupdate');
+
+ // 300 secs, 5 mins
+ if (!$lastupdate || ($now-$lastupdate)>300) {
+ set_config('poormancron','lastupdate', $now);
+ $php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+ proc_run($php_path,"include/poller.php");
+ }
+}
+
+function poormancron_procrun($a, $argv) {
+ logger("poormancron procrun ".implode(", ",$argv));
+ array_shift($argv);
+ $argc = count($argv);
+ logger("poormancron procrun require_once ".basename($argv[0]));
+ require_once(basename($argv[0]));
+ $funcname=str_replace(".php", "", basename($argv[0]))."_run";
+
+ $funcname($argv, $argc);
+}
+
+
+
+?>
diff --git a/boot.php b/boot.php
index 3cc98cc9b..223c9416d 100644
--- a/boot.php
+++ b/boot.php
@@ -1655,7 +1655,6 @@ function attribute_contains($attr,$s) {
if(! function_exists('logger')) {
function logger($msg,$level = 0) {
-
$debugging = get_config('system','debugging');
$loglevel = intval(get_config('system','loglevel'));
$logfile = get_config('system','logfile');
@@ -2225,7 +2224,31 @@ function prepare_body($item) {
$s = smilies(bbcode($item['body']));
return $s;
+}}
+/**
+ *
+ * Wrap calls to proc_close(proc_open()) and call hook
+ * so plugins can take part in process :)
+ *
+ * args:
+ * $cmd program to run
+ * next args are passed as $cmd command line
+ *
+ * e.g.: proc_run("ls","-la","/tmp");
+ *
+ * $cmd and string args are surrounded with ""
+ */
+if(! function_exists('run_proc')) {
+function proc_run($cmd){
+ $args = func_get_args();
+ call_hooks("proc_run", $args);
+
+ foreach ($args as &$arg){
+ if(is_string($arg)) $arg='"'.$arg.'"';
+ }
+ $cmdline = implode($args," ");
+ proc_close(proc_open($cmdline." &",array(),$foo));
+}}
-}} \ No newline at end of file
diff --git a/include/directory.php b/include/directory.php
index 5f835dc4b..2c9daa5ea 100644
--- a/include/directory.php
+++ b/include/directory.php
@@ -1,17 +1,22 @@
<?php
-
- require_once("boot.php");
-
- $a = new App;
-
- @include(".htconfig.php");
- require_once("dba.php");
- $db = new dba($db_host, $db_user, $db_pass, $db_data);
- unset($db_host, $db_user, $db_pass, $db_data);
-
+require_once("boot.php");
+
+function directory_run($argv, $argc){
+ global $a, $db;
+
+ if(is_null($a)){
+ $a = new App;
+ }
+
+ if(is_null($db)){
+ @include(".htconfig.php");
+ require_once("dba.php");
+ $db = new dba($db_host, $db_user, $db_pass, $db_data);
+ unset($db_host, $db_user, $db_pass, $db_data);
+ };
if($argc != 2)
- exit;
+ return;
load_config('system');
@@ -20,9 +25,14 @@
$dir = get_config('system','directory_submit_url');
if(! strlen($dir))
- exit;
+ return;
fetch_url($dir . '?url=' . bin2hex($argv[1]));
- exit;
+ return;
+}
+if (array_search(__file__,get_included_files())===0){
+ directory_run($argv,$argc);
+ killme();
+}
diff --git a/include/notifier.php b/include/notifier.php
index 4efdad4ce..dd5d55ed0 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -1,14 +1,19 @@
<?php
-
- require_once("boot.php");
-
- $a = new App;
-
- @include(".htconfig.php");
- require_once("dba.php");
- $db = new dba($db_host, $db_user, $db_pass, $db_data);
- unset($db_host, $db_user, $db_pass, $db_data);
-
+require_once("boot.php");
+
+function notifier_run($argv, $argc){
+ global $a, $db;
+
+ if(is_null($a)){
+ $a = new App;
+ }
+
+ if(is_null($db)){
+ @include(".htconfig.php");
+ require_once("dba.php");
+ $db = new dba($db_host, $db_user, $db_pass, $db_data);
+ unset($db_host, $db_user, $db_pass, $db_data);
+ };
require_once("session.php");
require_once("datetime.php");
@@ -16,7 +21,7 @@
require_once('include/bbcode.php');
if($argc < 3)
- exit;
+ return;
$a->set_baseurl(get_config('system','url'));
@@ -29,8 +34,9 @@
case 'mail':
default:
$item_id = intval($argv[2]);
- if(! $item_id)
- killme();
+ if(! $item_id){
+ return;
+ }
break;
}
@@ -42,22 +48,24 @@
$message = q("SELECT * FROM `mail` WHERE `id` = %d LIMIT 1",
intval($item_id)
);
- if(! count($message))
- killme();
+ if(! count($message)){
+ return;
+ }
$uid = $message[0]['uid'];
$recipients[] = $message[0]['contact-id'];
$item = $message[0];
}
else {
- // find ancestors
+ // find ancestors
$r = q("SELECT `parent`, `uid`, `edited` FROM `item` WHERE `id` = %d LIMIT 1",
intval($item_id)
);
- if(! count($r))
- killme();
-
+ if(! count($r)){
+ return;
+ }
+
$parent_id = $r[0]['parent'];
$uid = $r[0]['uid'];
$updated = $r[0]['edited'];
@@ -66,8 +74,9 @@
intval($parent_id)
);
- if(! count($items))
- killme();
+ if(! count($items)){
+ return;
+ }
}
$r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`, `user`.`page-flags`
@@ -78,9 +87,9 @@
if(count($r))
$owner = $r[0];
- else
- killme();
-
+ else {
+ return;
+ }
$hub = get_config('system','huburl');
// If this is a public conversation, notify the feed hub
@@ -150,8 +159,9 @@
$r = q("SELECT * FROM `contact` WHERE `id` IN ( $conversant_str ) AND `blocked` = 0 AND `pending` = 0");
- if( ! count($r))
- killme();
+ if( ! count($r)){
+ return;
+ }
$contacts = $r;
}
@@ -248,9 +258,9 @@
$r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 ",
dbesc($recip_str)
);
- if(! count($r))
- killme();
-
+ if(! count($r)){
+ return;
+ }
// delivery loop
require_once('include/salmon.php');
@@ -360,5 +370,11 @@
}
}
- killme();
+ return;
+}
+if (array_search(__file__,get_included_files())===0){
+ echo "run!";
+ notifier_run($argv,$argc);
+ killme();
+}
diff --git a/include/poller.php b/include/poller.php
index 024b9fbcd..1003b2f08 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -1,14 +1,19 @@
<?php
-
-
- require_once('boot.php');
-
- $a = new App;
-
- @include('.htconfig.php');
- require_once('dba.php');
- $db = new dba($db_host, $db_user, $db_pass, $db_data);
- unset($db_host, $db_user, $db_pass, $db_data);
+require_once("boot.php");
+
+function poller_run($argv, $argc){
+ global $a, $db;
+
+ if(is_null($a)){
+ $a = new App;
+ }
+
+ if(is_null($db)){
+ @include(".htconfig.php");
+ require_once("dba.php");
+ $db = new dba($db_host, $db_user, $db_pass, $db_data);
+ unset($db_host, $db_user, $db_pass, $db_data);
+ };
require_once('session.php');
require_once('datetime.php');
@@ -19,11 +24,12 @@
$a->set_baseurl(get_config('system','url'));
logger('poller: start');
-
+
// run queue delivery process in the background
$php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
+ //proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
+ proc_run($php_path,"include/queue.php");
$hub_update = false;
@@ -46,8 +52,9 @@
$sql_extra
AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()");
- if(! count($contacts))
- killme();
+ if(! count($contacts)){
+ return;
+ }
foreach($contacts as $contact) {
@@ -265,7 +272,10 @@
// loop - next contact
}
- killme();
-
-
+ return;
+}
+if (array_search(__file__,get_included_files())===0){
+ poller_run($argv,$argc);
+ killme();
+}
diff --git a/include/queue.php b/include/queue.php
index 96ddfa81b..d4fc7dbd6 100644
--- a/include/queue.php
+++ b/include/queue.php
@@ -1,5 +1,5 @@
<?php
-
+require_once("boot.php");
function update_queue_time($id) {
logger('queue: requeue item ' . $id);
@@ -16,14 +16,19 @@ function remove_queue_item($id) {
);
}
- require_once("boot.php");
-
- $a = new App;
+function queue_run($argv, $argc){
+ global $a, $db;
- @include(".htconfig.php");
- require_once("dba.php");
- $db = new dba($db_host, $db_user, $db_pass, $db_data);
- unset($db_host, $db_user, $db_pass, $db_data);
+ if(is_null($a)){
+ $a = new App;
+ }
+
+ if(is_null($db)){
+ @include(".htconfig.php");
+ require_once("dba.php");
+ $db = new dba($db_host, $db_user, $db_pass, $db_data);
+ unset($db_host, $db_user, $db_pass, $db_data);
+ };
require_once("session.php");
@@ -50,9 +55,9 @@ function remove_queue_item($id) {
$r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ");
- if(! count($r))
- killme();
-
+ if(! count($r)){
+ return;
+ }
// delivery loop
require_once('include/salmon.php');
@@ -118,7 +123,11 @@ function remove_queue_item($id) {
}
}
- killme();
+ return;
- // NOTREACHED
+}
+if (array_search(__file__,get_included_files())===0){
+ queue_run($argv,$argc);
+ killme();
+}
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 41e0771af..24e8bf106 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -438,8 +438,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"activity\" \"$i\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"activity\" \"$i\" &", array(),$foo));
+ proc_run($php_path,"include/notifier.php","activity","$i");
}
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index f581702d8..f904b06bc 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -304,9 +304,9 @@ function dfrn_notify_post(&$a) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"comment-import\" \"$posted_id\" &",
- array(),$foo));
-
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"comment-import\" \"$posted_id\" &", array(),$foo));
+ proc_run($php_path,"include/notifier.php","comment-import","$posted_id");
+
if((! $is_like) && ($importer['notify-flags'] & NOTIFY_COMMENT) && (! $importer['self'])) {
require_once('bbcode.php');
$from = stripslashes($datarray['author-name']);
diff --git a/mod/follow.php b/mod/follow.php
index b4e50fa45..a90ae3f51 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -208,8 +208,8 @@ function follow_post(&$a) {
// pull feed and consume it, which should subscribe to the hub.
$php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/poller.php\" \"$contact_id\" &", array(), $foo));
-
+ //proc_close(proc_open("\"$php_path\" \"include/poller.php\" \"$contact_id\" &", array(), $foo));
+ proc_run($php_path,"include/poller.php","$contact_id");
// create a follow slap
diff --git a/mod/item.php b/mod/item.php
index feef7c95f..11e79a7ab 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -421,8 +421,7 @@ function item_post(&$a) {
logger('mod_item: notifier invoked: ' . "\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &");
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &",
- array(),$foo));
+ proc_run($php_path, "include/notifier.php", $notify_type, "$post_id");
$datarray['id'] = $post_id;
@@ -520,8 +519,8 @@ function item_content(&$a) {
// send the notification upstream/downstream as the case may be
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" &",
- array(), $foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" &", array(), $foo));
+ proc_run($php_path,"include/notifier.php","drop","$drop_id");
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
return; //NOTREACHED
diff --git a/mod/like.php b/mod/like.php
index 7b2097578..c78c1f030 100644
--- a/mod/like.php
+++ b/mod/like.php
@@ -102,8 +102,8 @@ function like_content(&$a) {
);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &", array(),$foo));
+ proc_run($php_path,"include/notifier.php","like","$post_id");
return;
}
@@ -176,8 +176,8 @@ EOT;
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"like\" \"$post_id\" &", array(),$foo));
+ proc_run($php_path,"include/notifier.php","like","$post_id");
return; // NOTREACHED
} \ No newline at end of file
diff --git a/mod/message.php b/mod/message.php
index 9cc2e2826..7615f22be 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -72,8 +72,8 @@ function message_post(&$a) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
if($post_id) {
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"mail\" \"$post_id\" &", array(),$foo));
+ proc_run($php_path,"include/notifier.php","mail","$post_id");
notice( t('Message sent.') . EOL );
}
else {
diff --git a/mod/photos.php b/mod/photos.php
index 2a55fa5e9..82060378e 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -187,9 +187,8 @@ foreach($_FILES AS $key => $val) {
// send the notification upstream/downstream as the case may be
if($rr['visible'])
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ",
- array(),$foo));
-
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ",array(),$foo));
+ proc_run($php_path,"include/notifier.php","drop","$drop_id");
}
}
}
@@ -236,8 +235,8 @@ foreach($_FILES AS $key => $val) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
if($i[0]['visible'])
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"drop\" \"$drop_id\" & ", array(),$foo));
+ proc_run($php_path,"include/notifier.php","drop","$drop_id");
}
}
@@ -462,8 +461,8 @@ foreach($_FILES AS $key => $val) {
$item_id = item_store($arr);
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
- proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"tag\" \"$item_id\" & ",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/notifier.php\" \"tag\" \"$item_id\" & ",array(),$foo));
+ proc_run($php_path,"include/notifier.php","tag","$item_id");
}
}
diff --git a/mod/profile_photo.php b/mod/profile_photo.php
index 64093b2de..8b72bfca0 100644
--- a/mod/profile_photo.php
+++ b/mod/profile_photo.php
@@ -90,8 +90,8 @@ function profile_photo_post(&$a) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
$url = $_SESSION['my_url'];
if($url && strlen(get_config('system','directory_submit_url')))
- proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &",array(),$foo));
+ proc_run($php_path,"include/directory.php","$url");
}
else
notice( t('Unable to process image') . EOL);
diff --git a/mod/profiles.php b/mod/profiles.php
index 0bb476549..d74219501 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -203,8 +203,8 @@ function profiles_post(&$a) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
$url = $_SESSION['my_url'];
if($url && strlen(get_config('system','directory_submit_url')))
- proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &", array(),$foo));
+ proc_run($php_path,"include/directory.php","$url");
}
}
}
diff --git a/mod/settings.php b/mod/settings.php
index 32906d86e..dbbac8bde 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -182,8 +182,8 @@ function settings_post(&$a) {
$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
$url = $_SESSION['my_url'];
if($url && strlen(get_config('system','directory_submit_url')))
- proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &",
- array(),$foo));
+ //proc_close(proc_open("\"$php_path\" \"include/directory.php\" \"$url\" &",array(),$foo));
+ proc_run($php_path,"include/directory.php","$url");
}
$_SESSION['theme'] = $theme;