diff --git a/advancedcontentfilter/doc/advancedcontentfilter.md b/advancedcontentfilter/doc/advancedcontentfilter.md index 55e52ef4..41320fa3 100644 --- a/advancedcontentfilter/doc/advancedcontentfilter.md +++ b/advancedcontentfilter/doc/advancedcontentfilter.md @@ -322,7 +322,7 @@ You can also retrieve the variables of a specific post by pasting its URL below rendered_html string - Over-compensation #<a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street">Street</a> #<a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night">Night</a> #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights">CarLights</a> #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep">Jeep</a> #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople">NoPeople</a> #<a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close">Close</a>-up <div class="type-link"><a href="https://www.eyeem.com/p/120800309" target="_blank" rel="noopener noreferrer"><img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"></a><br><h4><a href="https://www.eyeem.com/p/120800309">Over-compensation Street Night Car Lights Jeep No | EyeEm</a></h4><blockquote>Photo by @<a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan">MrPetovan</a></blockquote><sup><a href="https://www.eyeem.com/p/120800309">www.eyeem.com</a></sup></div> + Over-compensation #<a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street">Street</a> #<a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night">Night</a> #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights">CarLights</a> #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep">Jeep</a> #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople">NoPeople</a> #<a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close">Close</a>-up <div class="type-link"><a href="https://www.eyeem.com/p/120800309" target="_blank"><img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"></a><br><h4><a href="https://www.eyeem.com/p/120800309">Over-compensation Street Night Car Lights Jeep No | EyeEm</a></h4><blockquote>Photo by @<a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan">MrPetovan</a></blockquote><sup><a href="https://www.eyeem.com/p/120800309">www.eyeem.com</a></sup></div> @@ -470,14 +470,14 @@ You can also retrieve the variables of a specific post by pasting its URL below list
    -
  1. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank" rel="noopener noreferrer">street</a>
  2. -
  3. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank" rel="noopener noreferrer">night</a>
  4. -
  5. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank" rel="noopener noreferrer">carlights</a>
  6. -
  7. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank" rel="noopener noreferrer">jeep</a>
  8. -
  9. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank" rel="noopener noreferrer">nopeople</a>
  10. -
  11. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank" rel="noopener noreferrer">close</a>
  12. -
  13. @<a href="https://twitter.com/MrPetovan" target="_blank" rel="noopener noreferrer">mrpetovan</a>
  14. -
  15. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank" rel="noopener noreferrer">close-up</a>
  16. +
  17. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank">street</a>
  18. +
  19. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank">night</a>
  20. +
  21. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank">carlights</a>
  22. +
  23. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank">jeep</a>
  24. +
  25. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank">nopeople</a>
  26. +
  27. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank">close</a>
  28. +
  29. @<a href="https://twitter.com/MrPetovan" target="_blank">mrpetovan</a>
  30. +
  31. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank">close-up</a>
@@ -486,13 +486,13 @@ You can also retrieve the variables of a specific post by pasting its URL below list
    -
  1. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank" rel="noopener noreferrer">street</a>
  2. -
  3. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank" rel="noopener noreferrer">night</a>
  4. -
  5. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank" rel="noopener noreferrer">carlights</a>
  6. -
  7. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank" rel="noopener noreferrer">jeep</a>
  8. -
  9. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank" rel="noopener noreferrer">nopeople</a>
  10. -
  11. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank" rel="noopener noreferrer">close</a>
  12. -
  13. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank" rel="noopener noreferrer">close-up</a>
  14. +
  15. #<a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank">street</a>
  16. +
  17. #<a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank">night</a>
  18. +
  19. #<a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank">carlights</a>
  20. +
  21. #<a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank">jeep</a>
  22. +
  23. #<a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank">nopeople</a>
  24. +
  25. #<a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank">close</a>
  26. +
  27. #<a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank">close-up</a>
@@ -501,7 +501,7 @@ You can also retrieve the variables of a specific post by pasting its URL below string
    -
  1. @<a href="https://twitter.com/MrPetovan" target="_blank" rel="noopener noreferrer">mrpetovan</a>
  2. +
  3. @<a href="https://twitter.com/MrPetovan" target="_blank">mrpetovan</a>
diff --git a/buglink/buglink.php b/buglink/buglink.php index 2414a3a3..5d354109 100644 --- a/buglink/buglink.php +++ b/buglink/buglink.php @@ -22,5 +22,5 @@ function buglink_uninstall() function buglink_active(App $a, &$b) { - $b .= ''; + $b .= ''; } diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 5ade04cf..93c57564 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -105,7 +105,7 @@ function forumdirectory_content(App $a) $limit = $pager->getStart()."," . $pager->getItemsPerPage(); - $r = DBA::p("SELECT `profile`.*, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, + $r = DBA::p("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, `contact`.`addr`, `contact`.`url` AS `profile_url` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid` diff --git a/irc/irc.php b/irc/irc.php index 2c969d4b..52778e55 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -117,7 +117,7 @@ function irc_content(&$a) { /* add the chatroom frame and some html */ $o .= <<< EOT

IRC chat

-

A beginner's guide to using IRC. [en]

+

A beginner's guide to using IRC. [en]

EOT; diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index 5df1c7d7..61fe1efd 100644 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -205,8 +205,8 @@ function openstreetmap_addon_admin(&$a, &$o) $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Submit'), - '$tmsserver' => ['tmsserver', DI::l10n()->t('Tile Server URL'), $tmsserver, DI::l10n()->t('A list of public tile servers')], - '$nomserver' => ['nomserver', DI::l10n()->t('Nominatim (reverse geocoding) Server URL'), $nomserver, DI::l10n()->t('A list of Nominatim servers')], + '$tmsserver' => ['tmsserver', DI::l10n()->t('Tile Server URL'), $tmsserver, DI::l10n()->t('A list of public tile servers')], + '$nomserver' => ['nomserver', DI::l10n()->t('Nominatim (reverse geocoding) Server URL'), $nomserver, DI::l10n()->t('A list of Nominatim servers')], '$zoom' => ['zoom', DI::l10n()->t('Default zoom'), $zoom, DI::l10n()->t('The default zoom level. (1:world, 18:highest, also depends on tile server)')], '$marker' => ['marker', DI::l10n()->t('Include marker on map'), $marker, DI::l10n()->t('Include a marker on the map.')], ]); diff --git a/public_server/public_server.php b/public_server/public_server.php index 41c62832..a02c8672 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -1,7 +1,7 @@ */ diff --git a/twitter/twitter.php b/twitter/twitter.php index 673b3b75..5bd0206f 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1016,6 +1016,48 @@ function twitter_fix_avatar($avatar) return $new_avatar; } +function twitter_get_relation($uid, $target, $contact = []) +{ + if (isset($contact['rel'])) { + $relation = $contact['rel']; + } else { + $relation = 0; + } + + $ckey = DI::config()->get('twitter', 'consumerkey'); + $csecret = DI::config()->get('twitter', 'consumersecret'); + $otoken = DI::pConfig()->get($uid, 'twitter', 'oauthtoken'); + $osecret = DI::pConfig()->get($uid, 'twitter', 'oauthsecret'); + $own_id = DI::pConfig()->get($uid, 'twitter', 'own_id'); + + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $parameters = ['source_id' => $own_id, 'target_screen_name' => $target]; + + try { + $status = $connection->get('friendships/show', $parameters); + } catch (TwitterOAuthException $e) { + Logger::info('Error fetching friendship status', ['user' => $uid, 'target' => $target, 'message' => $e->getMessage()]); + return $relation; + } + + $following = $status->relationship->source->following; + $followed = $status->relationship->source->followed_by; + + if ($following && !$followed) { + $relation = Contact::SHARING; + } elseif (!$following && $followed) { + $relation = Contact::FOLLOWER; + } elseif ($following && $followed) { + $relation = Contact::FRIEND; + } elseif (!$following && !$followed) { + $relation = 0; + } + + Logger::info('Fetched friendship relation', ['user' => $uid, 'target' => $target, 'relation' => $relation]); + + return $relation; +} + function twitter_fetch_contact($uid, $data, $create_user) { if (empty($data->id_str)) { @@ -1027,10 +1069,18 @@ function twitter_fetch_contact($uid, $data, $create_user) $addr = $data->screen_name . "@twitter.com"; $fields = ['url' => $url, 'network' => Protocol::TWITTER, + 'alias' => 'twitter::' . $data->id_str, 'name' => $data->name, 'nick' => $data->screen_name, 'addr' => $addr, 'location' => $data->location, 'about' => $data->description]; - $cid = Contact::getIdForURL($url, 0, true, $fields); + // Update the public contact + $pcontact = DBA::selectFirst('contact', ['id'], ['uid' => 0, 'alias' => "twitter::" . $data->id_str]); + if (DBA::isResult($pcontact)) { + $cid = $pcontact['id']; + } else { + $cid = Contact::getIdForURL($url, 0, true, $fields); + } + if (!empty($cid)) { DBA::update('contact', $fields, ['id' => $cid]); Contact::updateAvatar($avatar, 0, $cid); @@ -1043,13 +1093,14 @@ function twitter_fetch_contact($uid, $data, $create_user) } if (!DBA::isResult($contact)) { + $relation = twitter_get_relation($uid, $data->screen_name); + // create contact record $fields['uid'] = $uid; $fields['created'] = DateTimeFormat::utcNow(); $fields['nurl'] = Strings::normaliseLink($url); - $fields['alias'] = 'twitter::' . $data->id_str; $fields['poll'] = 'twitter::' . $data->id_str; - $fields['rel'] = Contact::FRIEND; + $fields['rel'] = $relation; $fields['priority'] = 1; $fields['writable'] = true; $fields['blocked'] = false; @@ -1072,20 +1123,34 @@ function twitter_fetch_contact($uid, $data, $create_user) } $contact_id = $contact['id']; + $update = false; - // update profile photos once every twelve hours as we have no notification of when they change. - $update_photo = ($contact['avatar-date'] < DateTimeFormat::utc('now -12 hours')); + // Update the contact relation once per day + if ($contact['updated'] < DateTimeFormat::utc('now -24 hours')) { + $fields['rel'] = twitter_get_relation($uid, $data->screen_name, $contact); + $update = true; + } - // check that we have all the photos, this has been known to fail on occasion - if (empty($contact['photo']) || empty($contact['thumb']) || empty($contact['micro']) || $update_photo) { - Logger::log("twitter_fetch_contact: Updating contact " . $data->screen_name, Logger::DEBUG); + Contact::updateAvatar($avatar, $uid, $contact['id']); - Contact::updateAvatar($avatar, $uid, $contact['id']); + if ($contact['name'] != $data->name) { + $fields['name-date'] = $fields['uri-date'] = DateTimeFormat::utcNow(); + $update = true; + } - $fields['name-date'] = DateTimeFormat::utcNow(); + if ($contact['nick'] != $data->screen_name) { $fields['uri-date'] = DateTimeFormat::utcNow(); + $update = true; + } + if (($contact['location'] != $data->location) || ($contact['about'] != $data->description)) { + $update = true; + } + + if ($update) { + $fields['updated'] = DateTimeFormat::utcNow(); DBA::update('contact', $fields, ['id' => $contact['id']]); + Logger::info('Updated contact', ['id' => $contact['id'], 'nick' => $data->screen_name]); } } diff --git a/widgets/templates/widget_like.tpl b/widgets/templates/widget_like.tpl index b99dbda4..ad529575 100644 --- a/widgets/templates/widget_like.tpl +++ b/widgets/templates/widget_like.tpl @@ -1,5 +1,3 @@ -{{$like}} like -{{if $dislike}} +{{$like}} like {{$dislike}} dislike -{{/if}} diff --git a/widgets/widget_friendheader.php b/widgets/widget_friendheader.php index c4031290..f47b1b57 100644 --- a/widgets/widget_friendheader.php +++ b/widgets/widget_friendheader.php @@ -25,7 +25,7 @@ function friendheader_widget_size() function friendheader_widget_content(&$a, $conf) { - $r = q("SELECT `profile`.* , `user`.* FROM `profile` + $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `user`.* FROM `profile` LEFT JOIN `user` ON `profile`.`uid` = `user`.`uid` WHERE `user`.`uid` = %s LIMIT 1", intval($conf['uid']) diff --git a/widgets/widget_friends.php b/widgets/widget_friends.php index 08b7415c..a3951cdc 100644 --- a/widgets/widget_friends.php +++ b/widgets/widget_friends.php @@ -27,7 +27,7 @@ function friends_widget_size() function friends_widget_content(&$a, $conf) { - $r = q("SELECT `profile`.* , `user`.* FROM `profile` + $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `user`.* FROM `profile` LEFT JOIN `user` ON `profile`.`uid` = `user`.`uid` WHERE `user`.`uid` = %s LIMIT 1", intval($conf['uid']) diff --git a/widgets/widget_like.php b/widgets/widget_like.php index 8dd6b8a7..464e6101 100644 --- a/widgets/widget_like.php +++ b/widgets/widget_like.php @@ -43,18 +43,14 @@ function like_widget_content(&$a, $conf){ DBA::escape($args[0]) ); $likes = $r[0]['c']; + $iid = $r[0]['id']; - $dislikes = 0; - $strdislike = ''; - if (!DI::pConfig()->get(local_user(), 'system', 'hide_dislike')) { - // count dislikes - $r = q( $baseq . "AND `item`.`verb` = 'http://purl.org/macgirvin/dfrn/1.0/dislike'", - intval($conf['uid']), - DBA::escape($args[0]) - ); - $dislikes = $r[0]['c']; - $strdislike = DI::l10n()->tt("%d person doesn't like this", "%d people don't like this", $dislikes); - } + // count dislikes + $r = q( $baseq . "AND `item`.`verb` = 'http://purl.org/macgirvin/dfrn/1.0/dislike'", + intval($conf['uid']), + DBA::escape($args[0]) + ); + $dislikes = $r[0]['c']; $o = ""; @@ -66,7 +62,7 @@ function like_widget_content(&$a, $conf){ '$strlike' => DI::l10n()->tt("%d person likes this", "%d people like this", $likes), '$dislike' => $dislikes, - '$strdislike'=> $strdislike, + '$strdislike'=> DI::l10n()->tt("%d person doesn't like this", "%d people don't like this", $dislikes), ]); return $o;