diff --git a/boot.php b/boot.php index 2c9bb68d19..a988e826dd 100755 --- a/boot.php +++ b/boot.php @@ -11,7 +11,7 @@ require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '2.3.1258' ); define ( 'DFRN_PROTOCOL_VERSION', '2.22' ); -define ( 'DB_UPDATE_VERSION', 1122 ); +define ( 'DB_UPDATE_VERSION', 1123 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 32d7cf40b4..e051cdaac5 100755 --- a/database.sql +++ b/database.sql @@ -741,6 +741,7 @@ CREATE TABLE IF NOT EXISTS `conv` ( CREATE TABLE IF NOT EXISTS `notify` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , +`hash` CHAR( 64 ) NOT NULL, `type` INT( 11 ) NOT NULL , `name` CHAR( 255 ) NOT NULL , `url` CHAR( 255 ) NOT NULL , @@ -752,6 +753,7 @@ CREATE TABLE IF NOT EXISTS `notify` ( `seen` TINYINT( 1 ) NOT NULL DEFAULT '0', `verb` CHAR( 255 ) NOT NULL, `otype` CHAR( 16 ) NOT NULL, +INDEX ( `hash` ), INDEX ( `type` ), INDEX ( `uid` ), INDEX ( `seen` ), diff --git a/include/enotify.php b/include/enotify.php index b0967cff1b..c19cc3a9c8 100755 --- a/include/enotify.php +++ b/include/enotify.php @@ -116,10 +116,23 @@ function notification($params) { require_once('include/html2bbcode.php'); + do { + $dups = false; + $hash = random_string(); + $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", + dbesc($hash)); + if(count($r)) + $dups = true; + } while($dups == true); + + + + // create notification entry in DB - $r = q("insert into notify (name,url,photo,date,msg,uid,link,type,verb,otype) - values('%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')", + $r = q("insert into notify (hash,name,url,photo,date,msg,uid,link,type,verb,otype) + values('%s','%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')", + dbesc($hash), dbesc($params['source_name']), dbesc($params['source_link']), dbesc($params['source_photo']), @@ -132,6 +145,17 @@ function notification($params) { dbesc($params['otype']) ); + $r = q("select id from notify where hash = '%s' and uid = %d limit 1", + dbesc($hash), + intval($params['uid']) + ); + if($r) + $notify_id = $r[0]['id']; + else + return; + + $itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id; + // send email notification if notification preferences permit require_once('bbcode.php'); diff --git a/include/items.php b/include/items.php index f87a92334c..5beccfbe7b 100755 --- a/include/items.php +++ b/include/items.php @@ -2040,7 +2040,6 @@ function local_delivery($importer,$data) { } if($is_reply) { - $community = false; if($importer['page-flags'] == PAGE_COMMUNITY) { @@ -2054,7 +2053,9 @@ function local_delivery($importer,$data) { // was the top-level post for this reply written by somebody on this site? // Specifically, the recipient? - $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, + $is_a_remote_comment = false; + + $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`, `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uri` = '%s' AND `item`.`parent-uri` = '%s' @@ -2065,9 +2066,13 @@ function local_delivery($importer,$data) { dbesc($parent_uri), intval($importer['importer_uid']) ); + if($r && count($r)) + $is_a_remote_comment = true; - if($r && count($r)) { + if(($community) && (! $r[0]['forum_mode'])) + $is_a_remote_comment = false; + if($is_a_remote_comment) { logger('local_delivery: received remote comment'); $is_like = false; // remote reply to our post. Import and then notify everybody else. @@ -2188,6 +2193,7 @@ function local_delivery($importer,$data) { } } + return 0; // NOTREACHED } diff --git a/mod/notify.php b/mod/notify.php new file mode 100644 index 0000000000..d1e5022bcb --- /dev/null +++ b/mod/notify.php @@ -0,0 +1,29 @@ +argc > 2 && $a->argv[1] === 'view' && intval($a->argv[2])) { + $r = q("select * from notify where id = %d and uid = %d limit 1", + intval($a->argv[2]), + intval(local_user()) + ); + if(count($r)) { + q("update notify set seen = 1 where id = %d and uid = %d limit 1", + intval($a->argv[2]), + intval(local_user()) + ); + goaway($r[0]['link']); + } + + goaway($a->get_baseurl()); + } +} + + +function notify_content(&$a) { + if(! local_user()) + return login(); +} \ No newline at end of file diff --git a/update.php b/update.php index 24138450aa..16c1d78488 100755 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@