From 4abfd4053a955a70c461290b7220145d2ce1a861 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 10 Sep 2015 19:18:12 -0700 Subject: sync likes --- doc/to_do_code.bb | 2 +- include/import.php | 37 +++++++++++++++++++++++++++++++++++++ include/zot.php | 3 +++ mod/import.php | 3 +++ mod/like.php | 16 +++++++++++++++- 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb index 90c5f78e5..b5c7b9903 100644 --- a/doc/to_do_code.bb +++ b/doc/to_do_code.bb @@ -4,7 +4,7 @@ We need much more than this, but here are areas where developers can help. Pleas [li]Documentation - see Red Documentation Project To-Do List[/li] [li]Include TOS link in registration/verification email[/li] -[li](done) forum widget with unread counts (requires the DB schema changes from v3/hubzilla to be viable)[/li] +[li]Auto preview posts/comments (configurable timer kicks in the preview if not 0)[/li] [li]Create bug tracker module[/li] [li]translation plugins - moses or apertium[/li] [li]plugins - provide 'disable' which is softer than 'uninstall' for those plugins which create additional DB tables[/li] diff --git a/include/import.php b/include/import.php index 168446be9..ad8bcd84e 100644 --- a/include/import.php +++ b/include/import.php @@ -762,6 +762,43 @@ function sync_menus($channel,$menus) { +function import_likes($channel,$likes) { + if($channel && $likes) { + foreach($likes as $like) { + if($like['deleted']) { + q("delete from likes where liker = '%s' and likee = '%s' and verb = '%s' and target_type = '%s' and target_id = '%s'", + dbesc($like['liker']), + dbesc($like['likee']), + dbesc($like['verb']), + dbesc($like['target_type']), + dbesc($like['target_id']) + ); + continue; + } + + unset($like['id']); + unset($like['iid']); + $like['channel_id'] = $channel['channel_id']; + $r = q("select * from likes where liker = '%s' and likee = '%s' and verb = '%s' and target_type = '%s' and target_id = '%s' and i_mid = '%s'", + dbesc($like['liker']), + dbesc($like['likee']), + dbesc($like['verb']), + dbesc($like['target_type']), + dbesc($like['target_id']), + dbesc($like['i_mid']) + ); + if($r) + continue; + + dbesc_array($config); + $r = dbq("INSERT INTO likes (`" + . implode("`, `", array_keys($like)) + . "`) VALUES ('" + . implode("', '", array_values($like)) + . "')" ); + } + } +} diff --git a/include/zot.php b/include/zot.php index 6b5ea4be3..0e00f39b4 100644 --- a/include/zot.php +++ b/include/zot.php @@ -2888,6 +2888,9 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) { if(array_key_exists('obj',$arr) && $arr['obj']) sync_objs($channel,$arr['obj']); + if(array_key_exists('likes',$arr) && $arr['likes']) + import_likes($channel,$arr['likes']); + if(array_key_exists('app',$arr) && $arr['app']) sync_apps($channel,$arr['app']); diff --git a/mod/import.php b/mod/import.php index 0e43d2444..563967aa2 100644 --- a/mod/import.php +++ b/mod/import.php @@ -432,6 +432,9 @@ function import_post(&$a) { if(is_array($data['obj'])) import_objs($channel,$data['obj']); + if(is_array($data['likes'])) + import_likes($channel,$data['likes']); + if(is_array($data['app'])) import_apps($channel,$data['app']); diff --git a/mod/like.php b/mod/like.php index 87f012874..ce8bc3063 100755 --- a/mod/like.php +++ b/mod/like.php @@ -219,6 +219,9 @@ function like_content(&$a) { ); if($z) { + $z[0]['deleted'] = 1; + build_sync_packet($ch[0]['channel_id'],array('likes' => $z)); + q("delete from likes where id = %d limit 1", intval($z[0]['id']) ); @@ -497,7 +500,18 @@ function like_content(&$a) { dbesc($obj_id), dbesc(($target) ? $target : $object) ); - }; + $r = q("select * from likes where liker = '%s' and likee = '%s' and i_mid = '%s' and verb = '%s' and target_type = '%s' and target_id = '%s' ", + dbesc($observer['xchan_hash']), + dbesc($ch[0]['channel_hash']), + dbesc($mid), + dbesc($activity), + dbesc(($tgttype)? $tgttype : $objtype), + dbesc($obj_id) + ); + if($r) + build_sync_packet($ch[0]['channel_id'],array('likes' => $r)); + + } proc_run('php',"include/notifier.php","like","$post_id"); -- cgit v1.2.3