From 4b4d680dc4e40384e9cc71591609a1f788f31c66 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Wed, 7 Jul 2010 22:44:22 -0700 Subject: [PATCH] sort out anon profile display and write permissions --- include/notifier.php | 224 +++---------------------------------------- mod/item.php | 3 +- mod/profile.php | 15 +-- view/head.tpl | 4 +- view/jot-header.tpl | 12 --- 5 files changed, 26 insertions(+), 232 deletions(-) diff --git a/include/notifier.php b/include/notifier.php index 0beb72cd0e..391b711ba8 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -1,223 +1,26 @@ +require_once("session.php"); +require_once("datetime.php"); + +if(($argc != 2) || (! intval($argv[1]))) + exit; -If you want to execute some code after your php page has been returned to the user. Try something like this - - - - -while(count($this->currentJobs) >= $this->maxProcesses){ - echo "Maximum children allowed, waiting...\n"; - sleep(1); -} -duerra at yahoo dot com -02-Jul-2010 02:06 -Using pcntl_fork() can be a little tricky in some situations. For fast jobs, a child can finish processing before the parent process has executed some code related to the launching of the process. The parent can receive a signal before it's ready to handle the child process' status. To handle this scenario, I add an id to a "queue" of processes in the signal handler that need to be cleaned up if the parent process is not yet ready to handle them. - -I am including a stripped down version of a job daemon that should get a person on the right track. - -parentPID = getmypid(); - pcntl_signal(SIGCHLD, array($this, "childSignalHandler")); - } - - /** - * Run the Daemon - */ - public function run(){ - echo "Running \n"; - for($i=0; $i<10000; $i++){ - $jobID = rand(0,10000000000000); - $launched = $this->launchJob($jobID); - } - - //Wait for child processes to finish before exiting here - while(count($this->currentJobs)){ - echo "Waiting for current jobs to finish... \n"; - sleep(1); - } - } - - /** - * Launch a job from the job queue - */ - protected function launchJob($jobID){ - $pid = pcntl_fork(); - if($pid == -1){ - //Problem launching the job - error_log('Could not launch new job, exiting'); - return false; - } - else if ($pid){ - // Parent process - // Sometimes you can receive a signal to the childSignalHandler function before this code executes if - // the child script executes quickly enough! - // - $this->currentJobs[$pid] = $jobID; - - // In the event that a signal for this pid was caught before we get here, it will be in our signalQueue array - // So let's go ahead and process it now as if we'd just received the signal - if(isset($this->signalQueue[$pid])){ - echo "found $pid in the signal queue, processing it now \n"; - $this->childSignalHandler(SIGCHLD, $pid, $this->signalQueue[$pid]); - unset($this->signalQueue[$pid]); - } - } - else{ - //Forked child, do your deeds.... - $exitStatus = 0; //Error code if you need to or whatever - echo "Doing something fun in pid ".getmypid()."\n"; - exit($exitStatus); - } - return true; - } - - public function childSignalHandler($signo, $pid=null, $status=null){ - - //If no pid is provided, that means we're getting the signal from the system. Let's figure out - //which child process ended - if(!$pid){ - $pid = pcntl_waitpid(-1, $status, WNOHANG); - } - - //Make sure we get all of the exited children - while($pid > 0){ - if($pid && isset($this->currentJobs[$pid])){ - $exitCode = pcntl_wexitstatus($status); - if($exitCode != 0){ - echo "$pid exited with status ".$exitCode."\n"; - } - unset($this->currentJobs[$pid]); - } - else if($pid){ - //Oh no, our job has finished before this parent process could even note that it had been launched! - //Let's make note of it and handle it when the parent process is ready for it - echo "..... Adding $pid to the signal queue ..... \n"; - $this->signalQueue[$pid] = $status; - } - $pid = pcntl_waitpid(-1, $status, WNOHANG); - } - return true; - } -} - - - -*/ - - - -function notifier(&$a,$item_id,$parent_id) { - - $pid = pcntl_fork(); - - if ($pid == (-1)) { - notice("Failed to launch background notifier." . EOL ); - return; - } - - if ($pid > 0) { - // parent process - regenerate our connections in case the kid kills them - - @include(".htconfig.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); - unset($db_host, $db_user, $db_pass, $db_data); - session_write_close(); - session_start(); - - // go back and finish the page - return; - } - else { - // We are the child // fetch item - // if not parent, fetch it + // if not parent, fetch it too // atomify @@ -238,5 +41,4 @@ function notifier(&$a,$item_id,$parent_id) { // continue killme(); - } -} + diff --git a/mod/item.php b/mod/item.php index 2b03ecaa2f..23917161b4 100644 --- a/mod/item.php +++ b/mod/item.php @@ -58,8 +58,9 @@ function item_post(&$a) { intval($post_id)); } -// require('notifier.php'); + proc_close(proc_open("php include/notifier.php $post_id > notify.log &", + array(),$foo)); // notifier($a,$post_id,$parent); diff --git a/mod/profile.php b/mod/profile.php index 957d67be31..1caa3478f9 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -149,12 +149,15 @@ function profile_content(&$a) { if(count($r)) { foreach($r as $rr) { - $comment = replace_macros($template,array( - '$id' => $rr['item_id'], - '$profile_uid' => $a->profile['profile_uid'] - )); - - + if(can_write_wall($a,$a->profile['profile_uid'])) { + $comment = replace_macros($template,array( + '$id' => $rr['item_id'], + '$profile_uid' => $a->profile['profile_uid'] + )); + } + else { + $comment = ''; + } $o .= item_display($a,$rr,$tpl,$comment); } diff --git a/view/head.tpl b/view/head.tpl index 3a7bcc6041..d520e45f0d 100644 --- a/view/head.tpl +++ b/view/head.tpl @@ -3,6 +3,6 @@ - + diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 23e798ecd7..7c17196ce0 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -24,18 +24,6 @@ tinyMCE.init({ }); - function openClose(theID) { - if(document.getElementById(theID).style.display == "block") { - document.getElementById(theID).style.display = "none" - } - else { - document.getElementById(theID).style.display = "block" - } - } - function openMenu(theID) { - document.getElementById(theID).style.display = "block" - } -