From 99f8cb53b469fb5a07396ae38690f9b6aaceb64b Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Mon, 17 Jun 2024 14:13:22 -0700 Subject: [PATCH 01/22] version+strings --- util/messages.po | 1835 +++++++++++++++++++++++----------------------- version.php | 2 +- 2 files changed, 929 insertions(+), 908 deletions(-) diff --git a/util/messages.po b/util/messages.po index 726968ebf..dc94e9f9b 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 24.06.14\n" +"Project-Id-Version: 24.06.18\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-13 12:57-0700\n" +"POT-Creation-Date: 2024-06-17 13:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgid "Create an account to access services and applications" msgstr "" #: boot.php:1107 src/Lib/Navbar.php:164 src/Module/Communities.php:93 -#: src/Module/Register.php:324 +#: src/Module/Register.php:341 msgid "Register" msgstr "" @@ -657,7 +657,7 @@ msgstr "" msgid "article" msgstr "" -#: include/bbcode.php:686 include/misc.php:2385 include/conversation.php:91 +#: include/bbcode.php:686 include/conversation.php:91 include/misc.php:2385 #: src/Lib/Markdown.php:220 src/Module/Tagger.php:93 msgid "post" msgstr "" @@ -754,7 +754,7 @@ msgstr "" #: include/connections.php:970 src/Lib/AccessList.php:387 src/Lib/Apps.php:400 #: src/Lib/Libacl.php:87 src/Module/Affinity.php:68 src/Module/Connedit.php:699 -#: src/Module/Connections.php:419 src/Module/Lists.php:30 +#: src/Module/Connections.php:421 src/Module/Lists.php:30 #: src/Module/Stream.php:151 src/Widget/Affinity.php:33 msgid "Connections" msgstr "" @@ -769,848 +769,25 @@ msgstr "" msgid "Network: %s" msgstr "" -#: include/event.php:38 include/event.php:125 -msgid "l F d, Y \\@ g:i A" +#: include/conversation.php:61 include/misc.php:2379 src/Module/Like.php:177 +#: src/Module/Tagger.php:85 src/Module/Subthread.php:126 +msgid "photo" msgstr "" -#: include/event.php:46 include/event.php:131 -msgid "Starts:" -msgstr "" - -#: include/event.php:64 include/event.php:135 -msgid "Finishes:" -msgstr "" - -#: include/event.php:85 include/event.php:143 src/Lib/Libprofile.php:331 -#: src/Module/Communities.php:133 src/Module/Directory.php:437 -msgid "Location:" -msgstr "" - -#: include/event.php:1191 -msgid "This event has been added to your calendar." -msgstr "" - -#: include/event.php:1303 include/misc.php:2382 include/conversation.php:64 +#: include/conversation.php:64 include/misc.php:2382 include/event.php:1303 #: src/Module/Calendar.php:238 src/Module/Events.php:284 #: src/Module/Like.php:179 src/Module/Tagger.php:89 msgid "event" msgstr "" -#: include/event.php:1390 -msgid "Not specified" -msgstr "" - -#: include/event.php:1391 -msgid "Needs Action" -msgstr "" - -#: include/event.php:1392 -msgid "Completed" -msgstr "" - -#: include/event.php:1393 -msgid "In Process" -msgstr "" - -#: include/event.php:1394 -msgid "Cancelled" -msgstr "" - -#: include/taxonomy.php:378 -msgid "Popular Tags" -msgstr "" - -#: include/taxonomy.php:378 include/taxonomy.php:523 include/taxonomy.php:546 -#: src/Widget/Tagcloud.php:25 -msgid "Tags" -msgstr "" - -#: include/taxonomy.php:479 include/taxonomy.php:573 include/taxonomy.php:595 -#: include/taxonomy.php:618 src/Lib/Apps.php:391 src/Module/Cdav.php:1092 -#: src/Widget/Categories.php:87 src/Widget/Categories.php:135 -#: src/Widget/Categories.php:186 src/Widget/Appcategories.php:52 -msgid "Categories" -msgstr "" - -#: include/taxonomy.php:640 -msgid "Keywords" -msgstr "" - -#: include/taxonomy.php:662 -msgid "have" -msgstr "" - -#: include/taxonomy.php:662 -msgid "has" -msgstr "" - -#: include/taxonomy.php:663 -msgid "want" -msgstr "" - -#: include/taxonomy.php:663 -msgid "wants" -msgstr "" - -#: include/taxonomy.php:664 -msgid "like" -msgstr "" - -#: include/taxonomy.php:664 -msgid "likes" -msgstr "" - -#: include/taxonomy.php:665 -msgid "dislike" -msgstr "" - -#: include/taxonomy.php:665 -msgid "dislikes" -msgstr "" - -#: include/taxonomy.php:755 include/conversation.php:1896 -#: src/Lib/ThreadItem.php:248 src/Module/Photos.php:1229 -msgctxt "noun" -msgid "Like" -msgid_plural "Likes" -msgstr[0] "" -msgstr[1] "" - -#: include/language.php:367 include/misc.php:2203 -msgid "default" -msgstr "" - -#: include/language.php:380 -msgid "Select an alternate language" -msgstr "" - -#: include/zid.php:416 -#, php-format -msgid "OpenWebAuth: %1$s welcomes %2$s" -msgstr "" - -#: include/photo_factory.php:410 src/Module/Profile_photo.php:123 -#: src/Module/Profile_photo.php:292 -msgid "Profile Photos" -msgstr "" - -#: include/datetime.php:74 src/Module/Settings/Channel.php:545 -#: src/Module/Settings/Profile_edit.php:607 src/Widget/Newmember.php:55 -msgid "Miscellaneous" -msgstr "" - -#: include/datetime.php:167 -msgid "Birthday" -msgstr "" - -#: include/datetime.php:167 -msgid "Age: " -msgstr "" - -#: include/datetime.php:167 -msgid "YYYY-MM-DD or MM-DD" -msgstr "" - -#: include/datetime.php:251 src/Module/Appman.php:151 src/Module/Appman.php:152 -#: src/Module/Events.php:495 src/Module/Events.php:500 -#: src/Module/Settings/Profile_edit.php:617 -#: src/Module/Settings/Profile_edit.php:621 -msgid "Required" -msgstr "" - -#: include/datetime.php:283 -msgid "from now" -msgstr "" - -#: include/datetime.php:286 -msgid "ago" -msgstr "" - -#: include/datetime.php:291 -#, php-format -msgid "less than a second %s" -msgstr "" - -#: include/datetime.php:309 -#, php-format -msgctxt "e.g. 22 hours ago, 1 minute ago" -msgid "%1$d %2$s %3$s" -msgstr "" - -#: include/datetime.php:320 -msgctxt "relative_date" -msgid "year" -msgid_plural "years" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:321 -msgctxt "relative_date" -msgid "month" -msgid_plural "months" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:322 -msgctxt "relative_date" -msgid "week" -msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:323 -msgctxt "relative_date" -msgid "day" -msgid_plural "days" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:324 -msgctxt "relative_date" -msgid "hour" -msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:325 -msgctxt "relative_date" -msgid "minute" -msgid_plural "minutes" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:326 -msgctxt "relative_date" -msgid "second" -msgid_plural "seconds" -msgstr[0] "" -msgstr[1] "" - -#: include/datetime.php:576 -#, php-format -msgid "%1$s's birthday" -msgstr "" - -#: include/datetime.php:577 -#, php-format -msgid "Happy Birthday %1$s" -msgstr "" - -#: include/import.php:38 -msgid "Unable to import a removed channel." -msgstr "" - -#: include/import.php:68 -msgid "" -"A channel with these settings was discovered and is not usable as it was " -"removed or reserved for system use. Import failed." -msgstr "" - -#: include/import.php:77 -msgid "" -"Cannot create a duplicate channel identifier on this system. Import failed." -msgstr "" - -#: include/import.php:98 -msgid "Unable to create a unique channel address. Import failed." -msgstr "" - -#: include/import.php:151 -msgid "Cloned channel not found. Import failed." -msgstr "" - -#: include/items.php:416 src/Module/Cloud.php:134 src/Module/Dreport.php:19 -#: src/Module/Dreport.php:85 src/Module/Import_items.php:133 -#: src/Module/Like.php:114 src/Module/Lists.php:191 src/Module/Lists.php:234 -#: src/Module/Lists.php:263 src/Module/Profperm.php:35 -#: src/Module/Subthread.php:99 src/Module/Share.php:82 src/Module/Search.php:97 -#: src/Web/WebServer.php:68 -msgid "Permission denied" -msgstr "" - -#: include/items.php:897 -msgid "(Unknown)" -msgstr "" - -#: include/items.php:1068 -msgid "Visible to anybody on the internet." -msgstr "" - -#: include/items.php:1070 -msgid "Visible to you only." -msgstr "" - -#: include/items.php:1072 -msgid "Visible to anybody in this network." -msgstr "" - -#: include/items.php:1074 -msgid "Visible to anybody authenticated." -msgstr "" - -#: include/items.php:1076 -#, php-format -msgid "Visible to anybody on %s." -msgstr "" - -#: include/items.php:1078 -msgid "Visible to all connections." -msgstr "" - -#: include/items.php:1080 -msgid "Visible to approved connections." -msgstr "" - -#: include/items.php:1082 -msgid "Visible to specific connections." -msgstr "" - -#: include/items.php:3099 include/misc.php:1696 include/misc.php:3168 -#: src/Lib/Activity.php:3942 -#, php-format -msgid "%1$s (%2$s)" -msgstr "" - -#: include/items.php:3280 src/Lib/Share.php:126 src/Module/Share.php:118 -#, php-format -msgid "📢 Repeated %1$s's %2$s" -msgstr "" - -#: include/items.php:4293 src/Module/Lists.php:152 src/Module/Lists.php:303 -msgid "Access list not found." -msgstr "" - -#: include/items.php:4310 -msgid "Privacy group is empty." -msgstr "" - -#: include/items.php:4317 src/Module/Stream.php:318 -#, php-format -msgid "Access list: %s" -msgstr "" - -#: include/items.php:4327 src/Module/Connedit.php:811 -#, php-format -msgid "Connection: %s" -msgstr "" - -#: include/items.php:4330 src/Module/Block.php:49 src/Module/Cal.php:64 -#: src/Module/Card_edit.php:56 src/Module/Chanview.php:76 -#: src/Module/Page.php:85 src/Module/Wall_upload.php:37 -#: src/Module/Superblock.php:44 -msgid "Channel not found." -msgstr "" - -#: include/items.php:4685 src/Module/Cover_photo.php:282 -msgid "female" -msgstr "" - -#: include/items.php:4686 src/Module/Cover_photo.php:283 -#, php-format -msgid "%1$s updated her %2$s" -msgstr "" - -#: include/items.php:4687 src/Module/Cover_photo.php:284 -msgid "male" -msgstr "" - -#: include/items.php:4688 src/Module/Cover_photo.php:285 -#, php-format -msgid "%1$s updated his %2$s" -msgstr "" - -#: include/items.php:4690 src/Module/Cover_photo.php:287 -#, php-format -msgid "%1$s updated their %2$s" -msgstr "" - -#: include/items.php:4692 -msgid "profile photo" -msgstr "" - -#: include/items.php:4908 -#, php-format -msgid "[Edited %s]" -msgstr "" - -#: include/items.php:4908 -msgctxt "edit_activity" -msgid "Post" -msgstr "" - -#: include/items.php:4908 -msgctxt "edit_activity" -msgid "Comment" -msgstr "" - -#: include/misc.php:542 -msgid "prev" -msgstr "" - -#: include/misc.php:545 -msgid "first" -msgstr "" - -#: include/misc.php:576 -msgid "last" -msgstr "" - -#: include/misc.php:579 -msgid "next" -msgstr "" - -#: include/misc.php:592 -msgid "older" -msgstr "" - -#: include/misc.php:595 -msgid "newer" -msgstr "" - -#: include/misc.php:1051 include/misc.php:1063 src/Lib/Apps.php:447 -#: src/Lib/Navbar.php:169 src/Lib/Libacl.php:140 src/Module/Connections.php:426 -#: src/Module/Search.php:122 src/Widget/Sitesearch.php:35 -msgid "Search" -msgstr "" - -#: include/misc.php:1195 include/misc.php:1199 -msgid "poke" -msgstr "" - -#: include/misc.php:1195 include/misc.php:1199 include/conversation.php:203 -msgid "poked" -msgstr "" - -#: include/misc.php:1200 -msgid "ping" -msgstr "" - -#: include/misc.php:1200 -msgid "pinged" -msgstr "" - -#: include/misc.php:1201 -msgid "prod" -msgstr "" - -#: include/misc.php:1201 -msgid "prodded" -msgstr "" - -#: include/misc.php:1202 -msgid "slap" -msgstr "" - -#: include/misc.php:1202 -msgid "slapped" -msgstr "" - -#: include/misc.php:1203 -msgid "finger" -msgstr "" - -#: include/misc.php:1203 -msgid "fingered" -msgstr "" - -#: include/misc.php:1204 -msgid "rebuff" -msgstr "" - -#: include/misc.php:1204 -msgid "rebuffed" -msgstr "" - -#: include/misc.php:1228 -msgid "happy" -msgstr "" - -#: include/misc.php:1229 -msgid "sad" -msgstr "" - -#: include/misc.php:1230 -msgid "mellow" -msgstr "" - -#: include/misc.php:1231 -msgid "tired" -msgstr "" - -#: include/misc.php:1232 -msgid "perky" -msgstr "" - -#: include/misc.php:1233 -msgid "angry" -msgstr "" - -#: include/misc.php:1234 -msgid "stupefied" -msgstr "" - -#: include/misc.php:1235 -msgid "puzzled" -msgstr "" - -#: include/misc.php:1236 -msgid "interested" -msgstr "" - -#: include/misc.php:1237 -msgid "bitter" -msgstr "" - -#: include/misc.php:1238 -msgid "cheerful" -msgstr "" - -#: include/misc.php:1239 -msgid "alive" -msgstr "" - -#: include/misc.php:1240 -msgid "annoyed" -msgstr "" - -#: include/misc.php:1241 -msgid "anxious" -msgstr "" - -#: include/misc.php:1242 -msgid "cranky" -msgstr "" - -#: include/misc.php:1243 -msgid "disturbed" -msgstr "" - -#: include/misc.php:1244 -msgid "frustrated" -msgstr "" - -#: include/misc.php:1245 -msgid "depressed" -msgstr "" - -#: include/misc.php:1246 -msgid "motivated" -msgstr "" - -#: include/misc.php:1247 -msgid "relaxed" -msgstr "" - -#: include/misc.php:1248 -msgid "surprised" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:95 -#: src/Module/Settings/Channel.php:562 -msgid "Monday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:96 -#: src/Module/Settings/Channel.php:563 -msgid "Tuesday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:97 -#: src/Module/Settings/Channel.php:564 -msgid "Wednesday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:98 -#: src/Module/Settings/Channel.php:565 -msgid "Thursday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:99 -#: src/Module/Settings/Channel.php:566 -msgid "Friday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:100 -#: src/Module/Settings/Channel.php:567 -msgid "Saturday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:94 -#: src/Module/Settings/Channel.php:561 -msgid "Sunday" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:70 -msgid "January" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:71 -msgid "February" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:72 -msgid "March" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:73 -msgid "April" -msgstr "" - -#: include/misc.php:1446 -msgid "May" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:75 -msgid "June" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:76 -msgid "July" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:77 -msgid "August" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:78 -msgid "September" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:79 -msgid "October" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:80 -msgid "November" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:81 -msgid "December" -msgstr "" - -#: include/misc.php:1540 -msgid "Unknown Attachment" -msgstr "" - -#: include/misc.php:1543 src/Module/Sharedwithme.php:109 -#: src/Storage/Browser.php:316 -msgid "Size" -msgstr "" - -#: include/misc.php:1543 -msgid "unknown" -msgstr "" - -#: include/misc.php:1597 -msgid "remove category" -msgstr "" - -#: include/misc.php:1736 -msgid "remove from file" -msgstr "" - -#: include/misc.php:1874 -msgid "Added to your calendar" -msgstr "" - -#: include/misc.php:1975 -msgid "Link" -msgstr "" - -#: include/misc.php:2047 include/misc.php:2073 -#, php-format -msgctxt "noun" -msgid "%d Vote" -msgid_plural "%d Votes" -msgstr[0] "" -msgstr[1] "" - -#: include/misc.php:2080 -#, php-format -msgctxt "noun" -msgid "%d Vote in total" -msgid_plural "%d Votes in total" -msgstr[0] "" -msgstr[1] "" - -#: include/misc.php:2084 -msgid "Poll has ended." -msgstr "" - -#: include/misc.php:2086 -#, php-format -msgid "Poll ends: %1$s (%2$s)" -msgstr "" - -#: include/misc.php:2091 src/Lib/ThreadItem.php:495 -msgid "Vote" -msgstr "" - -#: include/misc.php:2102 -msgid "Download binary/encrypted content" -msgstr "" - -#: include/misc.php:2183 src/Module/Cal.php:325 src/Module/Calendar.php:423 -#: src/Module/Cdav.php:974 src/Module/Events.php:714 -msgid "Link to source" -msgstr "" - -#: include/misc.php:2211 -msgid "Page layout" -msgstr "" - -#: include/misc.php:2211 -msgid "You can create your own with the layouts tool" -msgstr "" - -#: include/misc.php:2222 -msgid "BBcode" -msgstr "" - -#: include/misc.php:2223 -msgid "Multicode" -msgstr "" - -#: include/misc.php:2224 -msgid "HTML" -msgstr "" - -#: include/misc.php:2225 -msgid "Markdown" -msgstr "" - -#: include/misc.php:2226 -msgid "Text" -msgstr "" - -#: include/misc.php:2227 -msgid "Comanche Layout" -msgstr "" - -#: include/misc.php:2231 -msgid "PHP" -msgstr "" - -#: include/misc.php:2240 -msgid "Page content type" -msgstr "" - -#: include/misc.php:2379 include/conversation.php:61 src/Module/Like.php:177 -#: src/Module/Tagger.php:85 src/Module/Subthread.php:126 -msgid "photo" -msgstr "" - -#: include/misc.php:2387 include/conversation.php:93 src/Module/Tagger.php:95 -msgid "comment" -msgstr "" - -#: include/misc.php:2393 -msgid "activity" -msgstr "" - -#: include/misc.php:2506 -msgid "a-z, 0-9, -, and _ only" -msgstr "" - -#: include/misc.php:2862 -msgid "Design Tools" -msgstr "" - -#: include/misc.php:2865 src/Module/Blocks.php:167 -msgid "Blocks" -msgstr "" - -#: include/misc.php:2866 src/Module/Menu.php:177 -msgid "Menus" -msgstr "" - -#: include/misc.php:2867 src/Module/Layouts.php:200 -msgid "Layouts" -msgstr "" - -#: include/misc.php:2868 -msgid "Pages" -msgstr "" - -#: include/misc.php:2890 src/Module/Cal.php:352 -msgid "Import" -msgstr "" - -#: include/misc.php:2891 -msgid "Import website..." -msgstr "" - -#: include/misc.php:2892 -msgid "Select folder to import" -msgstr "" - -#: include/misc.php:2893 -msgid "Import from a zipped folder:" -msgstr "" - -#: include/misc.php:2894 -msgid "Import from cloud files:" -msgstr "" - -#: include/misc.php:2895 -msgid "/cloud/channel/path/to/folder" -msgstr "" - -#: include/misc.php:2896 -msgid "Enter path to website files" -msgstr "" - -#: include/misc.php:2897 -msgid "Select folder" -msgstr "" - -#: include/misc.php:2898 -msgid "Export website..." -msgstr "" - -#: include/misc.php:2899 -msgid "Export to a zip file" -msgstr "" - -#: include/misc.php:2900 -msgid "website.zip" -msgstr "" - -#: include/misc.php:2901 -msgid "Enter a name for the zip file." -msgstr "" - -#: include/misc.php:2902 -msgid "Export to cloud files" -msgstr "" - -#: include/misc.php:2903 -msgid "/path/to/export/folder" -msgstr "" - -#: include/misc.php:2904 -msgid "Enter a path to a cloud files destination." -msgstr "" - -#: include/misc.php:2905 -msgid "Specify folder" -msgstr "" - -#: include/misc.php:3311 src/Module/Directory.php:455 src/Module/Manage.php:85 -#: src/Module/Manage.php:198 src/Module/Manage.php:211 -#: src/Storage/Browser.php:149 -msgid "Collection" -msgstr "" - -#: include/misc.php:3624 src/Module/Admin/Site.php:204 -#: view/theme/redbasic/php/config.php:22 view/theme/fresh/php/config.php:22 -msgid "Default" -msgstr "" - #: include/conversation.php:67 src/Module/Plike.php:130 msgid "channel" msgstr "" +#: include/conversation.php:93 include/misc.php:2387 src/Module/Tagger.php:95 +msgid "comment" +msgstr "" + #: include/conversation.php:108 src/Module/Like.php:226 #: src/Module/Plike.php:204 #, php-format @@ -1653,6 +830,10 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" +#: include/conversation.php:203 include/misc.php:1195 include/misc.php:1199 +msgid "poked" +msgstr "" + #: include/conversation.php:221 src/Module/Mood.php:84 #, php-format msgctxt "mood" @@ -1850,9 +1031,9 @@ msgid "Block author" msgstr "" #: include/conversation.php:970 include/attach.php:1380 include/attach.php:1401 -#: src/Lib/Activity.php:2401 src/Lib/Apps.php:1261 src/Lib/Apps.php:1352 +#: src/Lib/Activity.php:2402 src/Lib/Apps.php:1261 src/Lib/Apps.php:1352 #: src/Module/Cdav.php:877 src/Module/Cdav.php:878 src/Module/Cdav.php:884 -#: src/Module/Embedphotos.php:379 src/Module/Photos.php:856 +#: src/Module/Embedphotos.php:380 src/Module/Photos.php:856 #: src/Module/Photos.php:1324 src/Storage/Browser.php:183 #: src/Widget/Album.php:100 src/Widget/Portfolio.php:110 msgid "Unknown" @@ -2171,6 +1352,14 @@ msgstr "" msgid " distance: " msgstr "" +#: include/conversation.php:1896 include/taxonomy.php:755 +#: src/Lib/ThreadItem.php:248 src/Module/Photos.php:1229 +msgctxt "noun" +msgid "Like" +msgid_plural "Likes" +msgstr[0] "" +msgstr[1] "" + #: include/conversation.php:1898 src/Lib/ThreadItem.php:250 #: src/Lib/ThreadItem.php:548 src/Module/Photos.php:1336 msgctxt "noun" @@ -2245,8 +1434,656 @@ msgid_plural "Abstains" msgstr[0] "" msgstr[1] "" -#: include/help.php:62 src/Lib/Apps.php:415 src/Lib/Navbar.php:276 -msgid "Help" +#: include/taxonomy.php:378 +msgid "Popular Tags" +msgstr "" + +#: include/taxonomy.php:378 include/taxonomy.php:523 include/taxonomy.php:546 +#: src/Widget/Tagcloud.php:25 +msgid "Tags" +msgstr "" + +#: include/taxonomy.php:479 include/taxonomy.php:573 include/taxonomy.php:595 +#: include/taxonomy.php:618 src/Lib/Apps.php:391 src/Module/Cdav.php:1092 +#: src/Widget/Categories.php:87 src/Widget/Categories.php:135 +#: src/Widget/Categories.php:186 src/Widget/Appcategories.php:52 +msgid "Categories" +msgstr "" + +#: include/taxonomy.php:640 +msgid "Keywords" +msgstr "" + +#: include/taxonomy.php:662 +msgid "have" +msgstr "" + +#: include/taxonomy.php:662 +msgid "has" +msgstr "" + +#: include/taxonomy.php:663 +msgid "want" +msgstr "" + +#: include/taxonomy.php:663 +msgid "wants" +msgstr "" + +#: include/taxonomy.php:664 +msgid "like" +msgstr "" + +#: include/taxonomy.php:664 +msgid "likes" +msgstr "" + +#: include/taxonomy.php:665 +msgid "dislike" +msgstr "" + +#: include/taxonomy.php:665 +msgid "dislikes" +msgstr "" + +#: include/language.php:367 include/misc.php:2203 +msgid "default" +msgstr "" + +#: include/language.php:380 +msgid "Select an alternate language" +msgstr "" + +#: include/zid.php:416 +#, php-format +msgid "OpenWebAuth: %1$s welcomes %2$s" +msgstr "" + +#: include/photo_factory.php:410 src/Module/Profile_photo.php:123 +#: src/Module/Profile_photo.php:292 +msgid "Profile Photos" +msgstr "" + +#: include/datetime.php:74 src/Module/Settings/Channel.php:545 +#: src/Module/Settings/Profile_edit.php:607 src/Widget/Newmember.php:55 +msgid "Miscellaneous" +msgstr "" + +#: include/datetime.php:167 +msgid "Birthday" +msgstr "" + +#: include/datetime.php:167 +msgid "Age: " +msgstr "" + +#: include/datetime.php:167 +msgid "YYYY-MM-DD or MM-DD" +msgstr "" + +#: include/datetime.php:251 src/Module/Appman.php:151 src/Module/Appman.php:152 +#: src/Module/Events.php:495 src/Module/Events.php:500 +#: src/Module/Settings/Profile_edit.php:617 +#: src/Module/Settings/Profile_edit.php:621 +msgid "Required" +msgstr "" + +#: include/datetime.php:283 +msgid "from now" +msgstr "" + +#: include/datetime.php:286 +msgid "ago" +msgstr "" + +#: include/datetime.php:291 +#, php-format +msgid "less than a second %s" +msgstr "" + +#: include/datetime.php:309 +#, php-format +msgctxt "e.g. 22 hours ago, 1 minute ago" +msgid "%1$d %2$s %3$s" +msgstr "" + +#: include/datetime.php:320 +msgctxt "relative_date" +msgid "year" +msgid_plural "years" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:321 +msgctxt "relative_date" +msgid "month" +msgid_plural "months" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:322 +msgctxt "relative_date" +msgid "week" +msgid_plural "weeks" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:323 +msgctxt "relative_date" +msgid "day" +msgid_plural "days" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:324 +msgctxt "relative_date" +msgid "hour" +msgid_plural "hours" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:325 +msgctxt "relative_date" +msgid "minute" +msgid_plural "minutes" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:326 +msgctxt "relative_date" +msgid "second" +msgid_plural "seconds" +msgstr[0] "" +msgstr[1] "" + +#: include/datetime.php:576 +#, php-format +msgid "%1$s's birthday" +msgstr "" + +#: include/datetime.php:577 +#, php-format +msgid "Happy Birthday %1$s" +msgstr "" + +#: include/import.php:38 +msgid "Unable to import a removed channel." +msgstr "" + +#: include/import.php:68 +msgid "" +"A channel with these settings was discovered and is not usable as it was " +"removed or reserved for system use. Import failed." +msgstr "" + +#: include/import.php:77 +msgid "" +"Cannot create a duplicate channel identifier on this system. Import failed." +msgstr "" + +#: include/import.php:98 +msgid "Unable to create a unique channel address. Import failed." +msgstr "" + +#: include/import.php:151 +msgid "Cloned channel not found. Import failed." +msgstr "" + +#: include/misc.php:542 +msgid "prev" +msgstr "" + +#: include/misc.php:545 +msgid "first" +msgstr "" + +#: include/misc.php:576 +msgid "last" +msgstr "" + +#: include/misc.php:579 +msgid "next" +msgstr "" + +#: include/misc.php:592 +msgid "older" +msgstr "" + +#: include/misc.php:595 +msgid "newer" +msgstr "" + +#: include/misc.php:1051 include/misc.php:1063 src/Lib/Apps.php:447 +#: src/Lib/Navbar.php:169 src/Lib/Libacl.php:140 src/Module/Connections.php:428 +#: src/Module/Search.php:122 src/Widget/Sitesearch.php:35 +msgid "Search" +msgstr "" + +#: include/misc.php:1195 include/misc.php:1199 +msgid "poke" +msgstr "" + +#: include/misc.php:1200 +msgid "ping" +msgstr "" + +#: include/misc.php:1200 +msgid "pinged" +msgstr "" + +#: include/misc.php:1201 +msgid "prod" +msgstr "" + +#: include/misc.php:1201 +msgid "prodded" +msgstr "" + +#: include/misc.php:1202 +msgid "slap" +msgstr "" + +#: include/misc.php:1202 +msgid "slapped" +msgstr "" + +#: include/misc.php:1203 +msgid "finger" +msgstr "" + +#: include/misc.php:1203 +msgid "fingered" +msgstr "" + +#: include/misc.php:1204 +msgid "rebuff" +msgstr "" + +#: include/misc.php:1204 +msgid "rebuffed" +msgstr "" + +#: include/misc.php:1228 +msgid "happy" +msgstr "" + +#: include/misc.php:1229 +msgid "sad" +msgstr "" + +#: include/misc.php:1230 +msgid "mellow" +msgstr "" + +#: include/misc.php:1231 +msgid "tired" +msgstr "" + +#: include/misc.php:1232 +msgid "perky" +msgstr "" + +#: include/misc.php:1233 +msgid "angry" +msgstr "" + +#: include/misc.php:1234 +msgid "stupefied" +msgstr "" + +#: include/misc.php:1235 +msgid "puzzled" +msgstr "" + +#: include/misc.php:1236 +msgid "interested" +msgstr "" + +#: include/misc.php:1237 +msgid "bitter" +msgstr "" + +#: include/misc.php:1238 +msgid "cheerful" +msgstr "" + +#: include/misc.php:1239 +msgid "alive" +msgstr "" + +#: include/misc.php:1240 +msgid "annoyed" +msgstr "" + +#: include/misc.php:1241 +msgid "anxious" +msgstr "" + +#: include/misc.php:1242 +msgid "cranky" +msgstr "" + +#: include/misc.php:1243 +msgid "disturbed" +msgstr "" + +#: include/misc.php:1244 +msgid "frustrated" +msgstr "" + +#: include/misc.php:1245 +msgid "depressed" +msgstr "" + +#: include/misc.php:1246 +msgid "motivated" +msgstr "" + +#: include/misc.php:1247 +msgid "relaxed" +msgstr "" + +#: include/misc.php:1248 +msgid "surprised" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:95 +#: src/Module/Settings/Channel.php:562 +msgid "Monday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:96 +#: src/Module/Settings/Channel.php:563 +msgid "Tuesday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:97 +#: src/Module/Settings/Channel.php:564 +msgid "Wednesday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:98 +#: src/Module/Settings/Channel.php:565 +msgid "Thursday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:99 +#: src/Module/Settings/Channel.php:566 +msgid "Friday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:100 +#: src/Module/Settings/Channel.php:567 +msgid "Saturday" +msgstr "" + +#: include/misc.php:1440 src/Lib/Stringsjs.php:94 +#: src/Module/Settings/Channel.php:561 +msgid "Sunday" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:70 +msgid "January" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:71 +msgid "February" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:72 +msgid "March" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:73 +msgid "April" +msgstr "" + +#: include/misc.php:1446 +msgid "May" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:75 +msgid "June" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:76 +msgid "July" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:77 +msgid "August" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:78 +msgid "September" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:79 +msgid "October" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:80 +msgid "November" +msgstr "" + +#: include/misc.php:1446 src/Lib/Stringsjs.php:81 +msgid "December" +msgstr "" + +#: include/misc.php:1540 +msgid "Unknown Attachment" +msgstr "" + +#: include/misc.php:1543 src/Module/Sharedwithme.php:109 +#: src/Storage/Browser.php:316 +msgid "Size" +msgstr "" + +#: include/misc.php:1543 +msgid "unknown" +msgstr "" + +#: include/misc.php:1597 +msgid "remove category" +msgstr "" + +#: include/misc.php:1696 include/misc.php:3168 include/items.php:3099 +#: src/Lib/Activity.php:3943 +#, php-format +msgid "%1$s (%2$s)" +msgstr "" + +#: include/misc.php:1736 +msgid "remove from file" +msgstr "" + +#: include/misc.php:1874 +msgid "Added to your calendar" +msgstr "" + +#: include/misc.php:1975 +msgid "Link" +msgstr "" + +#: include/misc.php:2047 include/misc.php:2073 +#, php-format +msgctxt "noun" +msgid "%d Vote" +msgid_plural "%d Votes" +msgstr[0] "" +msgstr[1] "" + +#: include/misc.php:2080 +#, php-format +msgctxt "noun" +msgid "%d Vote in total" +msgid_plural "%d Votes in total" +msgstr[0] "" +msgstr[1] "" + +#: include/misc.php:2084 +msgid "Poll has ended." +msgstr "" + +#: include/misc.php:2086 +#, php-format +msgid "Poll ends: %1$s (%2$s)" +msgstr "" + +#: include/misc.php:2091 src/Lib/ThreadItem.php:495 +msgid "Vote" +msgstr "" + +#: include/misc.php:2102 +msgid "Download binary/encrypted content" +msgstr "" + +#: include/misc.php:2183 src/Module/Cal.php:325 src/Module/Calendar.php:423 +#: src/Module/Cdav.php:974 src/Module/Events.php:714 +msgid "Link to source" +msgstr "" + +#: include/misc.php:2211 +msgid "Page layout" +msgstr "" + +#: include/misc.php:2211 +msgid "You can create your own with the layouts tool" +msgstr "" + +#: include/misc.php:2222 +msgid "BBcode" +msgstr "" + +#: include/misc.php:2223 +msgid "Multicode" +msgstr "" + +#: include/misc.php:2224 +msgid "HTML" +msgstr "" + +#: include/misc.php:2225 +msgid "Markdown" +msgstr "" + +#: include/misc.php:2226 +msgid "Text" +msgstr "" + +#: include/misc.php:2227 +msgid "Comanche Layout" +msgstr "" + +#: include/misc.php:2231 +msgid "PHP" +msgstr "" + +#: include/misc.php:2240 +msgid "Page content type" +msgstr "" + +#: include/misc.php:2393 +msgid "activity" +msgstr "" + +#: include/misc.php:2506 +msgid "a-z, 0-9, -, and _ only" +msgstr "" + +#: include/misc.php:2862 +msgid "Design Tools" +msgstr "" + +#: include/misc.php:2865 src/Module/Blocks.php:167 +msgid "Blocks" +msgstr "" + +#: include/misc.php:2866 src/Module/Menu.php:177 +msgid "Menus" +msgstr "" + +#: include/misc.php:2867 src/Module/Layouts.php:200 +msgid "Layouts" +msgstr "" + +#: include/misc.php:2868 +msgid "Pages" +msgstr "" + +#: include/misc.php:2890 src/Module/Cal.php:352 +msgid "Import" +msgstr "" + +#: include/misc.php:2891 +msgid "Import website..." +msgstr "" + +#: include/misc.php:2892 +msgid "Select folder to import" +msgstr "" + +#: include/misc.php:2893 +msgid "Import from a zipped folder:" +msgstr "" + +#: include/misc.php:2894 +msgid "Import from cloud files:" +msgstr "" + +#: include/misc.php:2895 +msgid "/cloud/channel/path/to/folder" +msgstr "" + +#: include/misc.php:2896 +msgid "Enter path to website files" +msgstr "" + +#: include/misc.php:2897 +msgid "Select folder" +msgstr "" + +#: include/misc.php:2898 +msgid "Export website..." +msgstr "" + +#: include/misc.php:2899 +msgid "Export to a zip file" +msgstr "" + +#: include/misc.php:2900 +msgid "website.zip" +msgstr "" + +#: include/misc.php:2901 +msgid "Enter a name for the zip file." +msgstr "" + +#: include/misc.php:2902 +msgid "Export to cloud files" +msgstr "" + +#: include/misc.php:2903 +msgid "/path/to/export/folder" +msgstr "" + +#: include/misc.php:2904 +msgid "Enter a path to a cloud files destination." +msgstr "" + +#: include/misc.php:2905 +msgid "Specify folder" +msgstr "" + +#: include/misc.php:3311 src/Module/Directory.php:455 src/Module/Manage.php:85 +#: src/Module/Manage.php:198 src/Module/Manage.php:211 +#: src/Storage/Browser.php:149 +msgid "Collection" +msgstr "" + +#: include/misc.php:3624 src/Module/Admin/Site.php:204 +#: view/theme/redbasic/php/config.php:22 view/theme/fresh/php/config.php:22 +msgid "Default" msgstr "" #: include/security.php:665 @@ -2255,6 +2092,169 @@ msgid "" "form has been opened for too long (>3 hours) before submitting it." msgstr "" +#: include/items.php:416 src/Module/Cloud.php:134 src/Module/Dreport.php:19 +#: src/Module/Dreport.php:85 src/Module/Import_items.php:133 +#: src/Module/Like.php:114 src/Module/Lists.php:191 src/Module/Lists.php:234 +#: src/Module/Lists.php:263 src/Module/Profperm.php:35 +#: src/Module/Subthread.php:99 src/Module/Share.php:82 src/Module/Search.php:97 +#: src/Web/WebServer.php:68 +msgid "Permission denied" +msgstr "" + +#: include/items.php:897 +msgid "(Unknown)" +msgstr "" + +#: include/items.php:1068 +msgid "Visible to anybody on the internet." +msgstr "" + +#: include/items.php:1070 +msgid "Visible to you only." +msgstr "" + +#: include/items.php:1072 +msgid "Visible to anybody in this network." +msgstr "" + +#: include/items.php:1074 +msgid "Visible to anybody authenticated." +msgstr "" + +#: include/items.php:1076 +#, php-format +msgid "Visible to anybody on %s." +msgstr "" + +#: include/items.php:1078 +msgid "Visible to all connections." +msgstr "" + +#: include/items.php:1080 +msgid "Visible to approved connections." +msgstr "" + +#: include/items.php:1082 +msgid "Visible to specific connections." +msgstr "" + +#: include/items.php:3280 src/Lib/Share.php:126 src/Module/Share.php:118 +#, php-format +msgid "📢 Repeated %1$s's %2$s" +msgstr "" + +#: include/items.php:4293 src/Module/Lists.php:152 src/Module/Lists.php:303 +msgid "Access list not found." +msgstr "" + +#: include/items.php:4310 +msgid "Privacy group is empty." +msgstr "" + +#: include/items.php:4317 src/Module/Stream.php:318 +#, php-format +msgid "Access list: %s" +msgstr "" + +#: include/items.php:4327 src/Module/Connedit.php:811 +#, php-format +msgid "Connection: %s" +msgstr "" + +#: include/items.php:4330 src/Module/Block.php:49 src/Module/Cal.php:64 +#: src/Module/Card_edit.php:56 src/Module/Chanview.php:76 +#: src/Module/Page.php:85 src/Module/Wall_upload.php:37 +#: src/Module/Superblock.php:44 +msgid "Channel not found." +msgstr "" + +#: include/items.php:4685 src/Module/Cover_photo.php:282 +msgid "female" +msgstr "" + +#: include/items.php:4686 src/Module/Cover_photo.php:283 +#, php-format +msgid "%1$s updated her %2$s" +msgstr "" + +#: include/items.php:4687 src/Module/Cover_photo.php:284 +msgid "male" +msgstr "" + +#: include/items.php:4688 src/Module/Cover_photo.php:285 +#, php-format +msgid "%1$s updated his %2$s" +msgstr "" + +#: include/items.php:4690 src/Module/Cover_photo.php:287 +#, php-format +msgid "%1$s updated their %2$s" +msgstr "" + +#: include/items.php:4692 +msgid "profile photo" +msgstr "" + +#: include/items.php:4908 +#, php-format +msgid "[Edited %s]" +msgstr "" + +#: include/items.php:4908 +msgctxt "edit_activity" +msgid "Post" +msgstr "" + +#: include/items.php:4908 +msgctxt "edit_activity" +msgid "Comment" +msgstr "" + +#: include/help.php:62 src/Lib/Apps.php:415 src/Lib/Navbar.php:276 +msgid "Help" +msgstr "" + +#: include/event.php:38 include/event.php:125 +msgid "l F d, Y \\@ g:i A" +msgstr "" + +#: include/event.php:46 include/event.php:131 +msgid "Starts:" +msgstr "" + +#: include/event.php:64 include/event.php:135 +msgid "Finishes:" +msgstr "" + +#: include/event.php:85 include/event.php:143 src/Lib/Libprofile.php:331 +#: src/Module/Communities.php:133 src/Module/Directory.php:437 +msgid "Location:" +msgstr "" + +#: include/event.php:1191 +msgid "This event has been added to your calendar." +msgstr "" + +#: include/event.php:1390 +msgid "Not specified" +msgstr "" + +#: include/event.php:1391 +msgid "Needs Action" +msgstr "" + +#: include/event.php:1392 +msgid "Completed" +msgstr "" + +#: include/event.php:1393 +msgid "In Process" +msgstr "" + +#: include/event.php:1394 +msgid "Cancelled" +msgstr "" + #: include/network.php:1213 msgid "RSS/Atom" msgstr "" @@ -2300,7 +2300,7 @@ msgstr "" #: src/Module/Inspect.php:17 src/Module/Invite.php:103 src/Module/Manage.php:25 #: src/Module/Layouts.php:82 src/Module/Layouts.php:89 #: src/Module/Layouts.php:100 src/Module/Lists.php:107 src/Module/Lists.php:119 -#: src/Module/Lists.php:150 src/Module/Locs.php:105 src/Module/Register.php:101 +#: src/Module/Lists.php:150 src/Module/Locs.php:105 src/Module/Register.php:115 #: src/Module/Menu.php:136 src/Module/Menu.php:147 src/Module/Mitem.php:143 #: src/Module/Moderate.php:24 src/Module/Mood.php:147 #: src/Module/New_channel.php:114 src/Module/New_channel.php:137 @@ -2310,10 +2310,9 @@ msgstr "" #: src/Module/Profile.php:117 src/Module/Profile_photo.php:349 #: src/Module/Profile_photo.php:363 src/Module/Regmod.php:25 #: src/Module/Settings/Profile_edit.php:72 -#: src/Module/Settings/Profile_edit.php:529 src/Module/Webpages.php:144 -#: src/Module/Vote.php:23 src/Module/Viewsrc.php:24 -#: src/Module/Viewconnections.php:25 src/Module/Thing.php:318 -#: src/Module/Thing.php:339 src/Module/Thing.php:381 +#: src/Module/Settings/Profile_edit.php:529 src/Module/Viewconnections.php:25 +#: src/Module/Webpages.php:144 src/Module/Vote.php:23 src/Module/Viewsrc.php:24 +#: src/Module/Thing.php:318 src/Module/Thing.php:339 src/Module/Thing.php:381 #: src/Module/Suggestions.php:35 src/Module/Sources.php:88 #: src/Module/Sharedwithme.php:22 src/Module/Setup.php:220 #: src/Module/Settings.php:74 src/Module/Service_limits.php:16 @@ -2418,14 +2417,14 @@ msgstr "" msgid "Attach photos as album" msgstr "" -#: include/attach.php:1411 src/Module/Embedphotos.php:388 +#: include/attach.php:1411 src/Module/Embedphotos.php:389 #: src/Module/Photos.php:881 src/Widget/Album.php:109 #: src/Widget/Portfolio.php:122 msgid "Edit Album" msgstr "" #: include/attach.php:1413 src/Module/Cover_photo.php:421 -#: src/Module/Embedphotos.php:390 src/Module/Photos.php:747 +#: src/Module/Embedphotos.php:391 src/Module/Photos.php:747 #: src/Module/Profile_photo.php:512 src/Storage/Browser.php:423 #: src/Widget/Album.php:111 src/Widget/Cdav.php:157 src/Widget/Cdav.php:191 #: src/Widget/Portfolio.php:124 @@ -2607,56 +2606,56 @@ msgstr "" msgid "Quoted post" msgstr "" -#: src/Lib/Activity.php:3285 +#: src/Lib/Activity.php:3286 msgid "Activity" msgstr "" -#: src/Lib/Activity.php:3287 src/Lib/Libprofile.php:753 src/Lib/Apps.php:439 +#: src/Lib/Activity.php:3288 src/Lib/Libprofile.php:753 src/Lib/Apps.php:439 #: src/Module/Profperm.php:131 msgid "Profile" msgstr "" -#: src/Lib/Activity.php:3293 +#: src/Lib/Activity.php:3294 #, php-format msgid "Likes %1$s's %2$s" msgstr "" -#: src/Lib/Activity.php:3296 +#: src/Lib/Activity.php:3297 #, php-format msgid "Doesn't like %1$s's %2$s" msgstr "" -#: src/Lib/Activity.php:3299 +#: src/Lib/Activity.php:3300 #, php-format msgid "Flagged %1$s's %2$s" msgstr "" -#: src/Lib/Activity.php:3302 +#: src/Lib/Activity.php:3303 #, php-format msgid "Blocked %1$s's %2$s" msgstr "" -#: src/Lib/Activity.php:3308 +#: src/Lib/Activity.php:3309 #, php-format msgid "Will attend %s's event" msgstr "" -#: src/Lib/Activity.php:3311 +#: src/Lib/Activity.php:3312 #, php-format msgid "Will not attend %s's event" msgstr "" -#: src/Lib/Activity.php:3314 +#: src/Lib/Activity.php:3315 #, php-format msgid "May attend %s's event" msgstr "" -#: src/Lib/Activity.php:3317 +#: src/Lib/Activity.php:3318 #, php-format msgid "May not attend %s's event" msgstr "" -#: src/Lib/Activity.php:3323 +#: src/Lib/Activity.php:3324 #, php-format msgid "📢 Repeated %1$s's %2$s" msgstr "" @@ -3412,8 +3411,8 @@ msgstr "" #: src/Lib/Libprofile.php:203 src/Lib/Apps.php:666 src/Lib/Menu.php:142 #: src/Lib/ThreadItem.php:152 src/Module/Admin/Profs.php:192 #: src/Module/Blocks.php:173 src/Module/Card_edit.php:110 -#: src/Module/Connections.php:366 src/Module/Connections.php:409 -#: src/Module/Connections.php:430 src/Module/Editblock.php:129 +#: src/Module/Connections.php:366 src/Module/Connections.php:411 +#: src/Module/Connections.php:432 src/Module/Editblock.php:129 #: src/Module/Editlayout.php:127 src/Module/Editwebpage.php:160 #: src/Module/Layouts.php:209 src/Module/Lists.php:364 src/Module/Menu.php:182 #: src/Module/Settings/Oauth2.php:213 src/Module/Settings/Oauth.php:166 @@ -4989,7 +4988,7 @@ msgstr "" msgid "Site Configuration" msgstr "" -#: src/Module/Admin/Site.php:278 src/Module/Register.php:306 +#: src/Module/Admin/Site.php:278 src/Module/Register.php:322 msgid "Registration" msgstr "" @@ -7323,23 +7322,31 @@ msgstr "" msgid "Recent activity" msgstr "" -#: src/Module/Connections.php:422 +#: src/Module/Connections.php:398 +msgid "Is not following your posts" +msgstr "" + +#: src/Module/Connections.php:399 src/Module/Viewconnections.php:79 +msgid "Is only following group posts" +msgstr "" + +#: src/Module/Connections.php:424 msgid "Filter by" msgstr "" -#: src/Module/Connections.php:423 +#: src/Module/Connections.php:425 msgid "Sort by" msgstr "" -#: src/Module/Connections.php:427 +#: src/Module/Connections.php:429 msgid "Search your connections" msgstr "" -#: src/Module/Connections.php:428 +#: src/Module/Connections.php:430 msgid "Connections search" msgstr "" -#: src/Module/Connections.php:429 src/Module/Directory.php:554 +#: src/Module/Connections.php:431 src/Module/Directory.php:554 #: src/Module/Directory.php:559 src/Widget/Findpeople.php:36 msgid "Find" msgstr "" @@ -7876,7 +7883,7 @@ msgstr "" msgid "Validation token" msgstr "" -#: src/Module/Embedphotos.php:373 src/Module/Photos.php:850 +#: src/Module/Embedphotos.php:374 src/Module/Photos.php:850 #: src/Module/Photos.php:1397 src/Widget/Album.php:94 #: src/Widget/Portfolio.php:102 msgid "View Photo" @@ -8598,123 +8605,133 @@ msgid "" "Please indicate acceptance of the Terms of Service. Registration failed." msgstr "" -#: src/Module/Register.php:114 +#: src/Module/Register.php:98 +msgid "" +"The first account must be registered using the admin email " +"which was supplied during setup." +msgstr "" + +#: src/Module/Register.php:128 msgid "Passwords do not match." msgstr "" -#: src/Module/Register.php:168 +#: src/Module/Register.php:178 msgid "Registration successful. Continue to create your first channel..." msgstr "" -#: src/Module/Register.php:170 +#: src/Module/Register.php:180 msgid "" "Registration successful. Please check your email for validation instructions." msgstr "" -#: src/Module/Register.php:176 +#: src/Module/Register.php:186 msgid "Your registration is pending approval by the site owner." msgstr "" -#: src/Module/Register.php:178 +#: src/Module/Register.php:188 msgid "Your registration can not be processed." msgstr "" -#: src/Module/Register.php:224 +#: src/Module/Register.php:237 +msgid "Please use the admin email address supplied during setup." +msgstr "" + +#: src/Module/Register.php:241 src/Module/Register.php:242 msgid "Registration on this website is disabled." msgstr "" -#: src/Module/Register.php:229 +#: src/Module/Register.php:247 msgid "Registration on this website is by approval only." msgstr "" -#: src/Module/Register.php:237 +#: src/Module/Register.php:255 msgid "Registration on this site is by invitation only." msgstr "" -#: src/Module/Register.php:250 +#: src/Module/Register.php:268 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "" -#: src/Module/Register.php:266 +#: src/Module/Register.php:284 msgid "Terms of Service" msgstr "" -#: src/Module/Register.php:272 +#: src/Module/Register.php:290 #, php-format msgid "I accept the %s for this website" msgstr "" -#: src/Module/Register.php:278 +#: src/Module/Register.php:296 #, php-format msgid "I am over %s years of age and accept the %s for this website" msgstr "" -#: src/Module/Register.php:287 +#: src/Module/Register.php:305 msgid "Your email address" msgstr "" -#: src/Module/Register.php:288 +#: src/Module/Register.php:306 msgid "Choose a password" msgstr "" -#: src/Module/Register.php:289 +#: src/Module/Register.php:307 msgid "Please re-enter your password" msgstr "" -#: src/Module/Register.php:290 +#: src/Module/Register.php:308 msgid "Please enter your invitation code" msgstr "" -#: src/Module/Register.php:291 +#: src/Module/Register.php:309 msgid "Your Name" msgstr "" -#: src/Module/Register.php:291 +#: src/Module/Register.php:309 msgid "Real names are preferred." msgstr "" -#: src/Module/Register.php:293 +#: src/Module/Register.php:311 msgid "Please tell us briefly why you are requesting this account" msgstr "" -#: src/Module/Register.php:294 src/Module/New_channel.php:180 +#: src/Module/Register.php:312 src/Module/New_channel.php:180 msgid "Choose a short nickname" msgstr "" -#: src/Module/Register.php:294 +#: src/Module/Register.php:312 #, php-format msgid "" "Your nickname will be used to create an easy to remember channel address e." "g. nickname%s" msgstr "" -#: src/Module/Register.php:295 src/Module/New_channel.php:181 +#: src/Module/Register.php:313 src/Module/New_channel.php:181 msgid "Channel role and privacy" msgstr "" -#: src/Module/Register.php:295 +#: src/Module/Register.php:313 msgid "" "Select a channel permission role for your usage needs and privacy " "requirements." msgstr "" -#: src/Module/Register.php:296 +#: src/Module/Register.php:314 msgid "no" msgstr "" -#: src/Module/Register.php:296 +#: src/Module/Register.php:314 msgid "yes" msgstr "" -#: src/Module/Register.php:309 +#: src/Module/Register.php:325 msgid "" "Show affiliated sites - some " "of which may allow registration." msgstr "" -#: src/Module/Register.php:325 +#: src/Module/Register.php:342 msgid "" "This site requires email verification. After completing this form, please " "check your email for further instructions." @@ -10833,6 +10850,23 @@ msgstr "" msgid "Ask me" msgstr "" +#: src/Module/Viewconnections.php:51 +msgid "No connections." +msgstr "" + +#: src/Module/Viewconnections.php:68 +#, php-format +msgid "Visit %1$s's profile [%2$s]" +msgstr "" + +#: src/Module/Viewconnections.php:78 +msgid "Is not following back" +msgstr "" + +#: src/Module/Viewconnections.php:98 +msgid "View Connections" +msgstr "" + #: src/Module/Webpages.php:59 msgid "Provide managed web pages on your channel" msgstr "" @@ -10913,19 +10947,6 @@ msgstr "" msgid "Local link" msgstr "" -#: src/Module/Viewconnections.php:51 -msgid "No connections." -msgstr "" - -#: src/Module/Viewconnections.php:68 -#, php-format -msgid "Visit %1$s's profile [%2$s]" -msgstr "" - -#: src/Module/Viewconnections.php:95 -msgid "View Connections" -msgstr "" - #: src/Module/Uexport.php:68 src/Module/Uexport.php:69 msgid "Export Channel" msgstr "" diff --git a/version.php b/version.php index bf43eb8c9..19e3b7162 100644 --- a/version.php +++ b/version.php @@ -1,2 +1,2 @@ Date: Tue, 18 Jun 2024 08:58:21 +1000 Subject: [PATCH 02/22] update readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cf5cc060e..193622506 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -An open source fediverse server with a long history of innovation. See [FEATURES](https://codeberg.org/streams/streams/src/branch/dev/FEATURES.md). +An open source fediverse server with a long history of innovation. The primary focus is on privacy, consent, resilience, and the corresponding improvements in online safety that this provides. -The software supports a wide range of online behaviour, from personal communications with closed media access - all the way to fully public broadcasting. The default settings tend to favor personal and private use on relatively modest hardware for close friends and family. Adjust as desired. +See [FEATURES](https://codeberg.org/streams/streams/src/branch/dev/FEATURES.md). + +The software supports a wide range of online behaviour, from personal communications with restricted media access - all the way to fully public broadcasting. We're big on offering choice; and giving you full control of how you wish to interact and whom you wish to interact with online. The default settings tend to favor personal and private use on relatively modest hardware for close friends and family. Adjust as desired. This repository uses a community-driven model. This means that there are no dedicated developers working on new features or bug fixes or translations or documentation. Instead, it relies on the contributed efforts of those that choose to use it. From 11f3f8626796cc9e839f2b63d6f4d0f326376815 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 18 Jun 2024 17:01:52 +1000 Subject: [PATCH 03/22] fix like notifications on private mail --- src/Lib/Enotify.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Lib/Enotify.php b/src/Lib/Enotify.php index dc5cb0faf..ef51e0847 100644 --- a/src/Lib/Enotify.php +++ b/src/Lib/Enotify.php @@ -144,8 +144,17 @@ class Enotify $preamble = sprintf(t('%1$s sent you a new private message at %2$s.'), $sender['xchan_name'], $sitename); $epreamble = sprintf(t('%1$s sent you %2$s.'), '[zrl=' . $sender['xchan_url'] . ']' . html_entity_decode('​') . $sender['xchan_name'] . '[/zrl]', '[zrl=$itemlink]' . t('a private message') . '[/zrl]'); } else { - $preamble = sprintf(t('%1$s replied to a private message at %2$s.'), $sender['xchan_name'], $sitename); - $epreamble = sprintf(t('%1$s replied to %2$s.'), '[zrl=' . $sender['xchan_url'] . ']' . html_entity_decode('​') . $sender['xchan_name'] . '[/zrl]', '[zrl=$itemlink]' . t('a private message') . '[/zrl]'); + if (activity_match($params['item']['verb'], ACTIVITY_LIKE)) { + $action = t('liked'); + } + elseif (activity_match($params['item']['verb'], ACTIVITY_DISLIKE)) { + $action = t('disliked'); + } + else { + $action = t('replied to'); + } + $preamble = sprintf(t('%1$s %2%s a private message at %3$s.'), $sender['xchan_name'], $action, $sitename); + $epreamble = sprintf(t('%1$s %2$s %3$s.', 'react_private_message'), '[zrl=' . $sender['xchan_url'] . ']' . html_entity_decode('​') . $sender['xchan_name'] . '[/zrl]', $action, '[zrl=$itemlink]' . t('a private message') . '[/zrl]'); } $sitelink = t('Please visit %s to view and/or reply to your private messages.'); From 48f69903150aa0589c9dee143dd950b8b7cdb186 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Fri, 21 Jun 2024 06:11:27 +1000 Subject: [PATCH 04/22] couple of minor feditest webfinger fixes - very pedantic about which precise 4xx code is returned for different conditions --- src/Module/Webfinger.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Module/Webfinger.php b/src/Module/Webfinger.php index d027d4f42..1be98b253 100644 --- a/src/Module/Webfinger.php +++ b/src/Module/Webfinger.php @@ -2,6 +2,7 @@ namespace Code\Module; +use Code\Lib\ActivityStreams; use Code\Web\Controller; use Code\Lib\System; use Code\Lib\Channel; @@ -37,7 +38,7 @@ class Webfinger extends Controller $resource = $_REQUEST['resource']; - if (!$resource) { + if (!$resource || !ActivityStreams::is_url($resource)) { http_status_exit(400, 'Bad request'); } From 5b9ae23f3e9451dca9eba63674b29e363afad06b Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 08:45:32 +1000 Subject: [PATCH 05/22] add data url type to purifier and add tasklist to display module --- include/misc.php | 11 +++++++++++ view/pdl/mod_display.pdl | 1 + 2 files changed, 12 insertions(+) diff --git a/include/misc.php b/include/misc.php index 162dffd70..49bf2dbbf 100644 --- a/include/misc.php +++ b/include/misc.php @@ -176,6 +176,17 @@ function purify_html($s, $opts = []) // disable Unicode version of RTL over-ride $s = str_replace([ '‮', '‮', html_entity_decode('‮', ENT_QUOTES, 'UTF-8') ], [ '','','' ], $s); + $config->set('URI.AllowedSchemes', [ + 'data' => true, // This likely won't federate very well, but it has some interesting use cases. + 'http' => true, + 'https' => true, + 'mailto' => true, + 'ftp' => true, // This is kind of dubious in 2024, but we'll let it go + 'nntp' => false, // he's dead jim + 'news' => false, // he's dead jim + 'tel' => true, + // @todo create scheme definitions for geo: and ap: and did: + ]); // This will escape invalid tags in the output instead of removing. // This is necessary for mixed format (text+bbcode+html+markdown) messages or diff --git a/view/pdl/mod_display.pdl b/view/pdl/mod_display.pdl index a5461df50..3f11a6560 100644 --- a/view/pdl/mod_display.pdl +++ b/view/pdl/mod_display.pdl @@ -1,5 +1,6 @@ [region=aside] [widget=vcard][/widget] +[widget=tasklist][/widget] [/region] [region=right_aside] [widget=notifications][/widget] From e06d6c1fb10f6bd156fb3f5b16bd2e1b69c22d9a Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 10:56:34 +1000 Subject: [PATCH 06/22] better federation of map data (requires updating openstreetmap addon) --- include/bbcode.php | 14 +++++++++++++- include/misc.php | 29 +++++++++++++++++++++++++++++ src/Module/Inspect.php | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index 18d34904d..4484fa487 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -769,6 +769,18 @@ function bb_map_latlon($match) $match[0]); } +function bb_map_link($match) +{ + $x = str_replace(['/', ','], [' ', ' '], $match[1]); + $tmp = explode(' ', $x); + if (count($tmp) > 1) { + $lat = $tmp[0]; + $lon = $tmp[1]; + } + // the extra space in the following line is intentional + return str_replace($match[0], '' . t('Show map') . '', $match[0]); +} + function bb_map_coords($match) { @@ -1818,7 +1830,7 @@ function bbcode($Text, $options = []) if ($export) { $Text = str_replace([ '[map]','[/map]' ], [ '','' ], $Text); - $Text = preg_replace("/\[map=(.*?)[, ](.*?)\]/ism", 'geo:$1,$2', $Text); + $Text = preg_replace_callback("/\[map=(.*?)\]/ism", 'bb_map_link', $Text); } else { if (str_contains($Text, '[/map]')) { $Text = preg_replace_callback("/\[map\](.*?)\[\/map\]/ism", 'bb_map_location', $Text); diff --git a/include/misc.php b/include/misc.php index 49bf2dbbf..e62d8f418 100644 --- a/include/misc.php +++ b/include/misc.php @@ -188,6 +188,9 @@ function purify_html($s, $opts = []) // @todo create scheme definitions for geo: and ap: and did: ]); + $s = str_replace(['geo:', 'ap:', 'did:'], + ['https://example.com/escape/geo', 'https://example.com/escape/ap', 'https://example.com/escape/did' ], $s); + // This will escape invalid tags in the output instead of removing. // This is necessary for mixed format (text+bbcode+html+markdown) messages or // some angle brackets in plaintext may get stripped if they look like an HTML tag @@ -352,11 +355,17 @@ function purify_html($s, $opts = []) $purifier = new HTMLPurifier($config); + + // HTMLPurifier mangles intentionally escaped alt-text by unescaping it. // There is an option to encode all non-ascii characters, but we really don't want that either. // What we really want is for it to just not un-escape escaped double quotes. $s = str_replace('"','__!ESCAPED_DOUBLEQUOTE!__', $s); $s = str_replace('__!ESCAPED_DOUBLEQUOTE!__', '"', $purifier->purify($s)); + + $s = str_replace(['https://example.com/escape/geo', 'https://example.com/escape/ap', 'https://example.com/escape/did' ], + ['geo:', 'ap:', 'did:'], $s); + return $s; } @@ -1752,6 +1761,26 @@ function format_filer(&$item) return $s; } +function generate_map_link($lat, $lon, $zoom = 16) +{ + + $arr = [ + 'lat' => $lat, + 'lon' => $lon, + 'zoom' => $zoom, + 'link' => '' + ]; + + /** + * @hooks generate_map + * * \e string \b lat + * * \e string \b lon + * * \e string \b html the parsed HTML to return + */ + Hook::call('generate_map_link', $arr); + return (strlen($arr['link'])) ? $arr['link'] : 'geo:' . $lat . ',' . $lon . '&z=' . $zoom; +} + function generate_map($lat, $lon, $zoom = 16) { diff --git a/src/Module/Inspect.php b/src/Module/Inspect.php index 4f7ca848a..91484147e 100644 --- a/src/Module/Inspect.php +++ b/src/Module/Inspect.php @@ -69,7 +69,7 @@ class Inspect extends Controller $str = Activity::fetch($item['target']['id'], App::$channel); if ($str) { $output .= '(conversation)' . EOL . '
' .
-                            json_encode($str, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT) .
+                            escape_tags(json_encode($str, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT)) .
                             '
' . EOL . EOL; } } From 991ce88c697ecb5ae1b11bbfa002f3cfab5ee95e Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Fri, 21 Jun 2024 18:02:30 -0700 Subject: [PATCH 07/22] version+strings --- util/messages.po | 1707 +++++++++++++++++++++++----------------------- version.php | 2 +- 2 files changed, 859 insertions(+), 850 deletions(-) diff --git a/util/messages.po b/util/messages.po index dc94e9f9b..32f6e419d 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 24.06.18\n" +"Project-Id-Version: 24.06.22\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-17 13:00-0700\n" +"POT-Creation-Date: 2024-06-21 18:02-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -206,7 +206,7 @@ msgstr "" #: extend/addon/a/followlist/Mod_followlist.php:130 #: extend/addon/a/fuzzloc/Mod_Fuzzloc.php:58 #: extend/addon/a/logrot/logrot.php:38 extend/addon/a/nsfw/Mod_Nsfw.php:53 -#: extend/addon/a/openstreetmap/openstreetmap.php:218 +#: extend/addon/a/openstreetmap/openstreetmap.php:237 #: extend/addon/a/zotpost/Mod_zotpost.php:83 src/Lib/AccessList.php:403 #: src/Lib/ThreadItem.php:987 src/Lib/Stringsjs.php:27 #: src/Module/Admin/Themes.php:160 src/Module/Admin/Site.php:276 @@ -248,7 +248,7 @@ msgid "Profile Unavailable." msgstr "" #: extend/addon/a/faces/faces.php:293 extend/addon/a/logrot/logrot.php:57 -#: extend/addon/a/openstreetmap/openstreetmap.php:235 +#: extend/addon/a/openstreetmap/openstreetmap.php:254 #: src/Module/Defperms.php:103 src/Module/Settings/Channel.php:202 msgid "Settings updated." msgstr "" @@ -419,48 +419,48 @@ msgstr "" msgid "%s - view" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:92 src/Module/Photos.php:1330 +#: extend/addon/a/openstreetmap/openstreetmap.php:93 src/Module/Photos.php:1330 msgid "Map" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:157 +#: extend/addon/a/openstreetmap/openstreetmap.php:176 msgid "View Larger" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:219 +#: extend/addon/a/openstreetmap/openstreetmap.php:238 msgid "Tile Server URL" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:219 +#: extend/addon/a/openstreetmap/openstreetmap.php:238 msgid "" "A list of public tile servers" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:220 +#: extend/addon/a/openstreetmap/openstreetmap.php:239 msgid "Nominatim (reverse geocoding) Server URL" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:220 +#: extend/addon/a/openstreetmap/openstreetmap.php:239 msgid "" "A list of Nominatim servers" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:221 +#: extend/addon/a/openstreetmap/openstreetmap.php:240 msgid "Default zoom" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:221 +#: extend/addon/a/openstreetmap/openstreetmap.php:240 msgid "" "The default zoom level. (1:world, 18:highest, also depends on tile server)" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:222 +#: extend/addon/a/openstreetmap/openstreetmap.php:241 msgid "Include marker on map" msgstr "" -#: extend/addon/a/openstreetmap/openstreetmap.php:222 +#: extend/addon/a/openstreetmap/openstreetmap.php:241 msgid "Include a marker on the map." msgstr "" @@ -492,8 +492,8 @@ msgstr "" msgid "Queueworker Settings" msgstr "" -#: extend/addon/a/queueworker/Mod_Queueworker.php:118 include/misc.php:1052 -#: include/misc.php:1064 src/Lib/ThreadItem.php:290 +#: extend/addon/a/queueworker/Mod_Queueworker.php:118 include/misc.php:1072 +#: include/misc.php:1084 src/Lib/ThreadItem.php:290 #: src/Module/Admin/Profs.php:103 src/Module/Admin/Profs.php:124 #: src/Module/Filer.php:62 src/Widget/Notes.php:26 msgid "Save" @@ -603,84 +603,495 @@ msgstr "" msgid "Login failed." msgstr "" -#: include/bbcode.php:259 include/bbcode.php:1181 include/bbcode.php:2089 -#: include/bbcode.php:2092 include/misc.php:1835 src/Module/Embedphotos.php:121 +#: include/misc.php:562 +msgid "prev" +msgstr "" + +#: include/misc.php:565 +msgid "first" +msgstr "" + +#: include/misc.php:596 +msgid "last" +msgstr "" + +#: include/misc.php:599 +msgid "next" +msgstr "" + +#: include/misc.php:612 +msgid "older" +msgstr "" + +#: include/misc.php:615 +msgid "newer" +msgstr "" + +#: include/misc.php:1071 include/misc.php:1083 src/Lib/Apps.php:447 +#: src/Lib/Navbar.php:169 src/Lib/Libacl.php:140 src/Module/Connections.php:428 +#: src/Module/Search.php:122 src/Widget/Sitesearch.php:35 +msgid "Search" +msgstr "" + +#: include/misc.php:1215 include/misc.php:1219 +msgid "poke" +msgstr "" + +#: include/misc.php:1215 include/misc.php:1219 include/conversation.php:203 +msgid "poked" +msgstr "" + +#: include/misc.php:1220 +msgid "ping" +msgstr "" + +#: include/misc.php:1220 +msgid "pinged" +msgstr "" + +#: include/misc.php:1221 +msgid "prod" +msgstr "" + +#: include/misc.php:1221 +msgid "prodded" +msgstr "" + +#: include/misc.php:1222 +msgid "slap" +msgstr "" + +#: include/misc.php:1222 +msgid "slapped" +msgstr "" + +#: include/misc.php:1223 +msgid "finger" +msgstr "" + +#: include/misc.php:1223 +msgid "fingered" +msgstr "" + +#: include/misc.php:1224 +msgid "rebuff" +msgstr "" + +#: include/misc.php:1224 +msgid "rebuffed" +msgstr "" + +#: include/misc.php:1248 +msgid "happy" +msgstr "" + +#: include/misc.php:1249 +msgid "sad" +msgstr "" + +#: include/misc.php:1250 +msgid "mellow" +msgstr "" + +#: include/misc.php:1251 +msgid "tired" +msgstr "" + +#: include/misc.php:1252 +msgid "perky" +msgstr "" + +#: include/misc.php:1253 +msgid "angry" +msgstr "" + +#: include/misc.php:1254 +msgid "stupefied" +msgstr "" + +#: include/misc.php:1255 +msgid "puzzled" +msgstr "" + +#: include/misc.php:1256 +msgid "interested" +msgstr "" + +#: include/misc.php:1257 +msgid "bitter" +msgstr "" + +#: include/misc.php:1258 +msgid "cheerful" +msgstr "" + +#: include/misc.php:1259 +msgid "alive" +msgstr "" + +#: include/misc.php:1260 +msgid "annoyed" +msgstr "" + +#: include/misc.php:1261 +msgid "anxious" +msgstr "" + +#: include/misc.php:1262 +msgid "cranky" +msgstr "" + +#: include/misc.php:1263 +msgid "disturbed" +msgstr "" + +#: include/misc.php:1264 +msgid "frustrated" +msgstr "" + +#: include/misc.php:1265 +msgid "depressed" +msgstr "" + +#: include/misc.php:1266 +msgid "motivated" +msgstr "" + +#: include/misc.php:1267 +msgid "relaxed" +msgstr "" + +#: include/misc.php:1268 +msgid "surprised" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:95 +#: src/Module/Settings/Channel.php:562 +msgid "Monday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:96 +#: src/Module/Settings/Channel.php:563 +msgid "Tuesday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:97 +#: src/Module/Settings/Channel.php:564 +msgid "Wednesday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:98 +#: src/Module/Settings/Channel.php:565 +msgid "Thursday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:99 +#: src/Module/Settings/Channel.php:566 +msgid "Friday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:100 +#: src/Module/Settings/Channel.php:567 +msgid "Saturday" +msgstr "" + +#: include/misc.php:1460 src/Lib/Stringsjs.php:94 +#: src/Module/Settings/Channel.php:561 +msgid "Sunday" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:70 +msgid "January" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:71 +msgid "February" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:72 +msgid "March" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:73 +msgid "April" +msgstr "" + +#: include/misc.php:1466 +msgid "May" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:75 +msgid "June" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:76 +msgid "July" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:77 +msgid "August" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:78 +msgid "September" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:79 +msgid "October" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:80 +msgid "November" +msgstr "" + +#: include/misc.php:1466 src/Lib/Stringsjs.php:81 +msgid "December" +msgstr "" + +#: include/misc.php:1560 +msgid "Unknown Attachment" +msgstr "" + +#: include/misc.php:1563 src/Module/Sharedwithme.php:109 +#: src/Storage/Browser.php:316 +msgid "Size" +msgstr "" + +#: include/misc.php:1563 +msgid "unknown" +msgstr "" + +#: include/misc.php:1617 +msgid "remove category" +msgstr "" + +#: include/misc.php:1716 include/misc.php:3208 include/items.php:3099 +#: src/Lib/Activity.php:3943 +#, php-format +msgid "%1$s (%2$s)" +msgstr "" + +#: include/misc.php:1756 +msgid "remove from file" +msgstr "" + +#: include/misc.php:1875 include/bbcode.php:259 include/bbcode.php:1193 +#: include/bbcode.php:2101 include/bbcode.php:2104 +#: src/Module/Embedphotos.php:121 msgid "Image/photo" msgstr "" -#: include/bbcode.php:325 -msgid "Encrypted content" +#: include/misc.php:1914 +msgid "Added to your calendar" msgstr "" -#: include/bbcode.php:362 +#: include/misc.php:2015 +msgid "Link" +msgstr "" + +#: include/misc.php:2087 include/misc.php:2113 #, php-format -msgid "(Embedded app '%s' could not be displayed)." -msgstr "" +msgctxt "noun" +msgid "%d Vote" +msgid_plural "%d Votes" +msgstr[0] "" +msgstr[1] "" -#: include/bbcode.php:406 +#: include/misc.php:2120 #, php-format -msgid "Install %1$s element %2$s" +msgctxt "noun" +msgid "%d Vote in total" +msgid_plural "%d Votes in total" +msgstr[0] "" +msgstr[1] "" + +#: include/misc.php:2124 +msgid "Poll has ended." msgstr "" -#: include/bbcode.php:409 +#: include/misc.php:2126 #, php-format -msgid "" -"This post contains an installable %s element, however you lack permissions " -"to install it on this site." +msgid "Poll ends: %1$s (%2$s)" msgstr "" -#: include/bbcode.php:420 src/Module/Impel.php:55 -msgid "webpage" +#: include/misc.php:2131 src/Lib/ThreadItem.php:495 +msgid "Vote" msgstr "" -#: include/bbcode.php:423 src/Module/Impel.php:65 -msgid "layout" +#: include/misc.php:2142 +msgid "Download binary/encrypted content" msgstr "" -#: include/bbcode.php:426 src/Module/Impel.php:60 -msgid "block" +#: include/misc.php:2223 src/Module/Cal.php:325 src/Module/Calendar.php:423 +#: src/Module/Cdav.php:974 src/Module/Events.php:714 +msgid "Link to source" msgstr "" -#: include/bbcode.php:429 src/Module/Impel.php:72 -msgid "menu" +#: include/misc.php:2243 include/language.php:367 +msgid "default" msgstr "" -#: include/bbcode.php:680 -msgid "card" +#: include/misc.php:2251 +msgid "Page layout" msgstr "" -#: include/bbcode.php:682 -msgid "album" +#: include/misc.php:2251 +msgid "You can create your own with the layouts tool" msgstr "" -#: include/bbcode.php:684 -msgid "article" +#: include/misc.php:2262 +msgid "BBcode" msgstr "" -#: include/bbcode.php:686 include/conversation.php:91 include/misc.php:2385 +#: include/misc.php:2263 +msgid "Multicode" +msgstr "" + +#: include/misc.php:2264 +msgid "HTML" +msgstr "" + +#: include/misc.php:2265 +msgid "Markdown" +msgstr "" + +#: include/misc.php:2266 +msgid "Text" +msgstr "" + +#: include/misc.php:2267 +msgid "Comanche Layout" +msgstr "" + +#: include/misc.php:2271 +msgid "PHP" +msgstr "" + +#: include/misc.php:2280 +msgid "Page content type" +msgstr "" + +#: include/misc.php:2419 include/conversation.php:61 src/Module/Like.php:177 +#: src/Module/Tagger.php:85 src/Module/Subthread.php:126 +msgid "photo" +msgstr "" + +#: include/misc.php:2422 include/conversation.php:64 include/event.php:1303 +#: src/Module/Calendar.php:238 src/Module/Events.php:284 +#: src/Module/Like.php:179 src/Module/Tagger.php:89 +msgid "event" +msgstr "" + +#: include/misc.php:2425 include/conversation.php:91 include/bbcode.php:686 #: src/Lib/Markdown.php:220 src/Module/Tagger.php:93 msgid "post" msgstr "" -#: include/bbcode.php:692 src/Lib/Markdown.php:218 -#, php-format -msgid "%1$s wrote the following %2$s %3$s" +#: include/misc.php:2427 include/conversation.php:93 src/Module/Tagger.php:95 +msgid "comment" msgstr "" -#: include/bbcode.php:799 include/bbcode.php:808 -msgid "Click to open/close" +#: include/misc.php:2433 +msgid "activity" msgstr "" -#: include/bbcode.php:808 -msgid "spoiler" +#: include/misc.php:2546 +msgid "a-z, 0-9, -, and _ only" msgstr "" -#: include/bbcode.php:1526 include/bbcode.php:1736 -msgid "Different viewers will see this text differently" +#: include/misc.php:2902 +msgid "Design Tools" msgstr "" -#: include/bbcode.php:2067 -msgid "$1 wrote:" +#: include/misc.php:2905 src/Module/Blocks.php:167 +msgid "Blocks" +msgstr "" + +#: include/misc.php:2906 src/Module/Menu.php:177 +msgid "Menus" +msgstr "" + +#: include/misc.php:2907 src/Module/Layouts.php:200 +msgid "Layouts" +msgstr "" + +#: include/misc.php:2908 +msgid "Pages" +msgstr "" + +#: include/misc.php:2930 src/Module/Cal.php:352 +msgid "Import" +msgstr "" + +#: include/misc.php:2931 +msgid "Import website..." +msgstr "" + +#: include/misc.php:2932 +msgid "Select folder to import" +msgstr "" + +#: include/misc.php:2933 +msgid "Import from a zipped folder:" +msgstr "" + +#: include/misc.php:2934 +msgid "Import from cloud files:" +msgstr "" + +#: include/misc.php:2935 +msgid "/cloud/channel/path/to/folder" +msgstr "" + +#: include/misc.php:2936 +msgid "Enter path to website files" +msgstr "" + +#: include/misc.php:2937 +msgid "Select folder" +msgstr "" + +#: include/misc.php:2938 +msgid "Export website..." +msgstr "" + +#: include/misc.php:2939 +msgid "Export to a zip file" +msgstr "" + +#: include/misc.php:2940 +msgid "website.zip" +msgstr "" + +#: include/misc.php:2941 +msgid "Enter a name for the zip file." +msgstr "" + +#: include/misc.php:2942 +msgid "Export to cloud files" +msgstr "" + +#: include/misc.php:2943 +msgid "/path/to/export/folder" +msgstr "" + +#: include/misc.php:2944 +msgid "Enter a path to a cloud files destination." +msgstr "" + +#: include/misc.php:2945 +msgid "Specify folder" +msgstr "" + +#: include/misc.php:3351 src/Module/Directory.php:455 src/Module/Manage.php:85 +#: src/Module/Manage.php:198 src/Module/Manage.php:211 +#: src/Storage/Browser.php:149 +msgid "Collection" +msgstr "" + +#: include/misc.php:3664 src/Module/Admin/Site.php:204 +#: view/theme/redbasic/php/config.php:22 view/theme/fresh/php/config.php:22 +msgid "Default" msgstr "" #: include/connections.php:155 include/conversation.php:856 @@ -769,25 +1180,10 @@ msgstr "" msgid "Network: %s" msgstr "" -#: include/conversation.php:61 include/misc.php:2379 src/Module/Like.php:177 -#: src/Module/Tagger.php:85 src/Module/Subthread.php:126 -msgid "photo" -msgstr "" - -#: include/conversation.php:64 include/misc.php:2382 include/event.php:1303 -#: src/Module/Calendar.php:238 src/Module/Events.php:284 -#: src/Module/Like.php:179 src/Module/Tagger.php:89 -msgid "event" -msgstr "" - #: include/conversation.php:67 src/Module/Plike.php:130 msgid "channel" msgstr "" -#: include/conversation.php:93 include/misc.php:2387 src/Module/Tagger.php:95 -msgid "comment" -msgstr "" - #: include/conversation.php:108 src/Module/Like.php:226 #: src/Module/Plike.php:204 #, php-format @@ -830,10 +1226,6 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: include/conversation.php:203 include/misc.php:1195 include/misc.php:1199 -msgid "poked" -msgstr "" - #: include/conversation.php:221 src/Module/Mood.php:84 #, php-format msgctxt "mood" @@ -1486,10 +1878,6 @@ msgstr "" msgid "dislikes" msgstr "" -#: include/language.php:367 include/misc.php:2203 -msgid "default" -msgstr "" - #: include/language.php:380 msgid "Select an alternate language" msgstr "" @@ -1629,463 +2017,6 @@ msgstr "" msgid "Cloned channel not found. Import failed." msgstr "" -#: include/misc.php:542 -msgid "prev" -msgstr "" - -#: include/misc.php:545 -msgid "first" -msgstr "" - -#: include/misc.php:576 -msgid "last" -msgstr "" - -#: include/misc.php:579 -msgid "next" -msgstr "" - -#: include/misc.php:592 -msgid "older" -msgstr "" - -#: include/misc.php:595 -msgid "newer" -msgstr "" - -#: include/misc.php:1051 include/misc.php:1063 src/Lib/Apps.php:447 -#: src/Lib/Navbar.php:169 src/Lib/Libacl.php:140 src/Module/Connections.php:428 -#: src/Module/Search.php:122 src/Widget/Sitesearch.php:35 -msgid "Search" -msgstr "" - -#: include/misc.php:1195 include/misc.php:1199 -msgid "poke" -msgstr "" - -#: include/misc.php:1200 -msgid "ping" -msgstr "" - -#: include/misc.php:1200 -msgid "pinged" -msgstr "" - -#: include/misc.php:1201 -msgid "prod" -msgstr "" - -#: include/misc.php:1201 -msgid "prodded" -msgstr "" - -#: include/misc.php:1202 -msgid "slap" -msgstr "" - -#: include/misc.php:1202 -msgid "slapped" -msgstr "" - -#: include/misc.php:1203 -msgid "finger" -msgstr "" - -#: include/misc.php:1203 -msgid "fingered" -msgstr "" - -#: include/misc.php:1204 -msgid "rebuff" -msgstr "" - -#: include/misc.php:1204 -msgid "rebuffed" -msgstr "" - -#: include/misc.php:1228 -msgid "happy" -msgstr "" - -#: include/misc.php:1229 -msgid "sad" -msgstr "" - -#: include/misc.php:1230 -msgid "mellow" -msgstr "" - -#: include/misc.php:1231 -msgid "tired" -msgstr "" - -#: include/misc.php:1232 -msgid "perky" -msgstr "" - -#: include/misc.php:1233 -msgid "angry" -msgstr "" - -#: include/misc.php:1234 -msgid "stupefied" -msgstr "" - -#: include/misc.php:1235 -msgid "puzzled" -msgstr "" - -#: include/misc.php:1236 -msgid "interested" -msgstr "" - -#: include/misc.php:1237 -msgid "bitter" -msgstr "" - -#: include/misc.php:1238 -msgid "cheerful" -msgstr "" - -#: include/misc.php:1239 -msgid "alive" -msgstr "" - -#: include/misc.php:1240 -msgid "annoyed" -msgstr "" - -#: include/misc.php:1241 -msgid "anxious" -msgstr "" - -#: include/misc.php:1242 -msgid "cranky" -msgstr "" - -#: include/misc.php:1243 -msgid "disturbed" -msgstr "" - -#: include/misc.php:1244 -msgid "frustrated" -msgstr "" - -#: include/misc.php:1245 -msgid "depressed" -msgstr "" - -#: include/misc.php:1246 -msgid "motivated" -msgstr "" - -#: include/misc.php:1247 -msgid "relaxed" -msgstr "" - -#: include/misc.php:1248 -msgid "surprised" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:95 -#: src/Module/Settings/Channel.php:562 -msgid "Monday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:96 -#: src/Module/Settings/Channel.php:563 -msgid "Tuesday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:97 -#: src/Module/Settings/Channel.php:564 -msgid "Wednesday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:98 -#: src/Module/Settings/Channel.php:565 -msgid "Thursday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:99 -#: src/Module/Settings/Channel.php:566 -msgid "Friday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:100 -#: src/Module/Settings/Channel.php:567 -msgid "Saturday" -msgstr "" - -#: include/misc.php:1440 src/Lib/Stringsjs.php:94 -#: src/Module/Settings/Channel.php:561 -msgid "Sunday" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:70 -msgid "January" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:71 -msgid "February" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:72 -msgid "March" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:73 -msgid "April" -msgstr "" - -#: include/misc.php:1446 -msgid "May" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:75 -msgid "June" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:76 -msgid "July" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:77 -msgid "August" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:78 -msgid "September" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:79 -msgid "October" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:80 -msgid "November" -msgstr "" - -#: include/misc.php:1446 src/Lib/Stringsjs.php:81 -msgid "December" -msgstr "" - -#: include/misc.php:1540 -msgid "Unknown Attachment" -msgstr "" - -#: include/misc.php:1543 src/Module/Sharedwithme.php:109 -#: src/Storage/Browser.php:316 -msgid "Size" -msgstr "" - -#: include/misc.php:1543 -msgid "unknown" -msgstr "" - -#: include/misc.php:1597 -msgid "remove category" -msgstr "" - -#: include/misc.php:1696 include/misc.php:3168 include/items.php:3099 -#: src/Lib/Activity.php:3943 -#, php-format -msgid "%1$s (%2$s)" -msgstr "" - -#: include/misc.php:1736 -msgid "remove from file" -msgstr "" - -#: include/misc.php:1874 -msgid "Added to your calendar" -msgstr "" - -#: include/misc.php:1975 -msgid "Link" -msgstr "" - -#: include/misc.php:2047 include/misc.php:2073 -#, php-format -msgctxt "noun" -msgid "%d Vote" -msgid_plural "%d Votes" -msgstr[0] "" -msgstr[1] "" - -#: include/misc.php:2080 -#, php-format -msgctxt "noun" -msgid "%d Vote in total" -msgid_plural "%d Votes in total" -msgstr[0] "" -msgstr[1] "" - -#: include/misc.php:2084 -msgid "Poll has ended." -msgstr "" - -#: include/misc.php:2086 -#, php-format -msgid "Poll ends: %1$s (%2$s)" -msgstr "" - -#: include/misc.php:2091 src/Lib/ThreadItem.php:495 -msgid "Vote" -msgstr "" - -#: include/misc.php:2102 -msgid "Download binary/encrypted content" -msgstr "" - -#: include/misc.php:2183 src/Module/Cal.php:325 src/Module/Calendar.php:423 -#: src/Module/Cdav.php:974 src/Module/Events.php:714 -msgid "Link to source" -msgstr "" - -#: include/misc.php:2211 -msgid "Page layout" -msgstr "" - -#: include/misc.php:2211 -msgid "You can create your own with the layouts tool" -msgstr "" - -#: include/misc.php:2222 -msgid "BBcode" -msgstr "" - -#: include/misc.php:2223 -msgid "Multicode" -msgstr "" - -#: include/misc.php:2224 -msgid "HTML" -msgstr "" - -#: include/misc.php:2225 -msgid "Markdown" -msgstr "" - -#: include/misc.php:2226 -msgid "Text" -msgstr "" - -#: include/misc.php:2227 -msgid "Comanche Layout" -msgstr "" - -#: include/misc.php:2231 -msgid "PHP" -msgstr "" - -#: include/misc.php:2240 -msgid "Page content type" -msgstr "" - -#: include/misc.php:2393 -msgid "activity" -msgstr "" - -#: include/misc.php:2506 -msgid "a-z, 0-9, -, and _ only" -msgstr "" - -#: include/misc.php:2862 -msgid "Design Tools" -msgstr "" - -#: include/misc.php:2865 src/Module/Blocks.php:167 -msgid "Blocks" -msgstr "" - -#: include/misc.php:2866 src/Module/Menu.php:177 -msgid "Menus" -msgstr "" - -#: include/misc.php:2867 src/Module/Layouts.php:200 -msgid "Layouts" -msgstr "" - -#: include/misc.php:2868 -msgid "Pages" -msgstr "" - -#: include/misc.php:2890 src/Module/Cal.php:352 -msgid "Import" -msgstr "" - -#: include/misc.php:2891 -msgid "Import website..." -msgstr "" - -#: include/misc.php:2892 -msgid "Select folder to import" -msgstr "" - -#: include/misc.php:2893 -msgid "Import from a zipped folder:" -msgstr "" - -#: include/misc.php:2894 -msgid "Import from cloud files:" -msgstr "" - -#: include/misc.php:2895 -msgid "/cloud/channel/path/to/folder" -msgstr "" - -#: include/misc.php:2896 -msgid "Enter path to website files" -msgstr "" - -#: include/misc.php:2897 -msgid "Select folder" -msgstr "" - -#: include/misc.php:2898 -msgid "Export website..." -msgstr "" - -#: include/misc.php:2899 -msgid "Export to a zip file" -msgstr "" - -#: include/misc.php:2900 -msgid "website.zip" -msgstr "" - -#: include/misc.php:2901 -msgid "Enter a name for the zip file." -msgstr "" - -#: include/misc.php:2902 -msgid "Export to cloud files" -msgstr "" - -#: include/misc.php:2903 -msgid "/path/to/export/folder" -msgstr "" - -#: include/misc.php:2904 -msgid "Enter a path to a cloud files destination." -msgstr "" - -#: include/misc.php:2905 -msgid "Specify folder" -msgstr "" - -#: include/misc.php:3311 src/Module/Directory.php:455 src/Module/Manage.php:85 -#: src/Module/Manage.php:198 src/Module/Manage.php:211 -#: src/Storage/Browser.php:149 -msgid "Collection" -msgstr "" - -#: include/misc.php:3624 src/Module/Admin/Site.php:204 -#: view/theme/redbasic/php/config.php:22 view/theme/fresh/php/config.php:22 -msgid "Default" -msgstr "" - #: include/security.php:665 msgid "" "The form security token was not correct. This probably happened because the " @@ -2210,6 +2141,80 @@ msgctxt "edit_activity" msgid "Comment" msgstr "" +#: include/bbcode.php:325 +msgid "Encrypted content" +msgstr "" + +#: include/bbcode.php:362 +#, php-format +msgid "(Embedded app '%s' could not be displayed)." +msgstr "" + +#: include/bbcode.php:406 +#, php-format +msgid "Install %1$s element %2$s" +msgstr "" + +#: include/bbcode.php:409 +#, php-format +msgid "" +"This post contains an installable %s element, however you lack permissions " +"to install it on this site." +msgstr "" + +#: include/bbcode.php:420 src/Module/Impel.php:55 +msgid "webpage" +msgstr "" + +#: include/bbcode.php:423 src/Module/Impel.php:65 +msgid "layout" +msgstr "" + +#: include/bbcode.php:426 src/Module/Impel.php:60 +msgid "block" +msgstr "" + +#: include/bbcode.php:429 src/Module/Impel.php:72 +msgid "menu" +msgstr "" + +#: include/bbcode.php:680 +msgid "card" +msgstr "" + +#: include/bbcode.php:682 +msgid "album" +msgstr "" + +#: include/bbcode.php:684 +msgid "article" +msgstr "" + +#: include/bbcode.php:692 src/Lib/Markdown.php:218 +#, php-format +msgid "%1$s wrote the following %2$s %3$s" +msgstr "" + +#: include/bbcode.php:781 +msgid "Show map" +msgstr "" + +#: include/bbcode.php:811 include/bbcode.php:820 +msgid "Click to open/close" +msgstr "" + +#: include/bbcode.php:820 +msgid "spoiler" +msgstr "" + +#: include/bbcode.php:1538 include/bbcode.php:1748 +msgid "Different viewers will see this text differently" +msgstr "" + +#: include/bbcode.php:2079 +msgid "$1 wrote:" +msgstr "" + #: include/help.php:62 src/Lib/Apps.php:415 src/Lib/Navbar.php:276 msgid "Help" msgstr "" @@ -2593,6 +2598,324 @@ msgstr "" msgid "custom" msgstr "" +#: src/Lib/Enotify.php:70 +msgid "$Projectname Notification" +msgstr "" + +#: src/Lib/Enotify.php:71 +msgid "$projectname" +msgstr "" + +#: src/Lib/Enotify.php:73 +msgid "Thank You," +msgstr "" + +#: src/Lib/Enotify.php:75 +#, php-format +msgid "%s Administrator" +msgstr "" + +#: src/Lib/Enotify.php:76 +#, php-format +msgid "This email was sent by %1$s at %2$s." +msgstr "" + +#: src/Lib/Enotify.php:76 src/Module/Home.php:150 src/Module/Home.php:159 +msgid "$Projectname" +msgstr "" + +#: src/Lib/Enotify.php:77 +#, php-format +msgid "" +"To stop receiving these messages, please adjust your Notification Settings " +"at %s" +msgstr "" + +#: src/Lib/Enotify.php:78 +#, php-format +msgid "To stop receiving these messages, please adjust your %s." +msgstr "" + +#: src/Lib/Enotify.php:78 +msgid "Notification Settings" +msgstr "" + +#: src/Lib/Enotify.php:137 +#, php-format +msgid "%s " +msgstr "" + +#: src/Lib/Enotify.php:141 +#, php-format +msgid "[$Projectname:Notify] New mail received at %s" +msgstr "" + +#: src/Lib/Enotify.php:144 +#, php-format +msgid "%1$s sent you a new private message at %2$s." +msgstr "" + +#: src/Lib/Enotify.php:145 +#, php-format +msgid "%1$s sent you %2$s." +msgstr "" + +#: src/Lib/Enotify.php:145 src/Lib/Enotify.php:157 +msgid "a private message" +msgstr "" + +#: src/Lib/Enotify.php:148 src/Lib/Enotify.php:200 +msgid "liked" +msgstr "" + +#: src/Lib/Enotify.php:151 src/Lib/Enotify.php:204 +msgid "disliked" +msgstr "" + +#: src/Lib/Enotify.php:154 +msgid "replied to" +msgstr "" + +#: src/Lib/Enotify.php:156 +msgid "%1$s %2%s a private message at %3$s." +msgstr "" + +#: src/Lib/Enotify.php:157 +#, php-format +msgctxt "react_private_message" +msgid "%1$s %2$s %3$s." +msgstr "" + +#: src/Lib/Enotify.php:159 +#, php-format +msgid "Please visit %s to view and/or reply to your private messages." +msgstr "" + +#: src/Lib/Enotify.php:178 +msgid "repeated" +msgstr "" + +#: src/Lib/Enotify.php:185 +msgid "commented on" +msgstr "" + +#: src/Lib/Enotify.php:254 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:264 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:276 +#, php-format +msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:290 +#, php-format +msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s" +msgstr "" + +#: src/Lib/Enotify.php:293 +#, php-format +msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s" +msgstr "" + +#: src/Lib/Enotify.php:295 +#, php-format +msgid "%1$s commented on an item/conversation you have been following." +msgstr "" + +#: src/Lib/Enotify.php:299 +msgid "(Moderated)" +msgstr "" + +#: src/Lib/Enotify.php:302 src/Lib/Enotify.php:385 src/Lib/Enotify.php:413 +#: src/Lib/Enotify.php:444 src/Lib/Enotify.php:463 src/Lib/Enotify.php:478 +#, php-format +msgid "Please visit %s to view and/or reply to the conversation." +msgstr "" + +#: src/Lib/Enotify.php:306 src/Lib/Enotify.php:307 +#, php-format +msgid "Please visit %s to approve or reject this comment." +msgstr "" + +#: src/Lib/Enotify.php:366 +#, php-format +msgid "%1$s liked [zrl=%2$s]your %3$s[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:381 +#, php-format +msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s" +msgstr "" + +#: src/Lib/Enotify.php:382 +#, php-format +msgid "%1$s liked a post or conversation you created." +msgstr "" + +#: src/Lib/Enotify.php:393 +#, php-format +msgid "[$Projectname:Notify] %s posted to your profile wall" +msgstr "" + +#: src/Lib/Enotify.php:399 +#, php-format +msgid "%1$s posted to your profile wall at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:402 +#, php-format +msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:409 src/Lib/Enotify.php:410 +msgid " - " +msgstr "" + +#: src/Lib/Enotify.php:409 src/Lib/Enotify.php:410 +#: src/Module/Connections.php:95 src/Module/Connections.php:200 +msgid "Moderated" +msgstr "" + +#: src/Lib/Enotify.php:418 src/Lib/Enotify.php:419 +#, php-format +msgid "Please visit %s to approve or reject this post." +msgstr "" + +#: src/Lib/Enotify.php:436 +#, php-format +msgid "[$Projectname:Notify] %s tagged you" +msgstr "" + +#: src/Lib/Enotify.php:437 +#, php-format +msgid "%1$s tagged you at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:439 +#, php-format +msgid "%1$s [zrl=%2$s]tagged you[/zrl]." +msgstr "" + +#: src/Lib/Enotify.php:451 +#, php-format +msgid "[$Projectname:Notify] %1$s poked you" +msgstr "" + +#: src/Lib/Enotify.php:452 +#, php-format +msgid "%1$s poked you at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:454 +#, php-format +msgid "%1$s [zrl=%2$s]poked you[/zrl]." +msgstr "" + +#: src/Lib/Enotify.php:470 +#, php-format +msgid "[$Projectname:Notify] %s tagged your post" +msgstr "" + +#: src/Lib/Enotify.php:471 +#, php-format +msgid "%1$s tagged your post at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:473 +#, php-format +msgid "%1$s tagged [zrl=%2$s]your post[/zrl]" +msgstr "" + +#: src/Lib/Enotify.php:485 +msgid "[$Projectname:Notify] Introduction received" +msgstr "" + +#: src/Lib/Enotify.php:486 +#, php-format +msgid "You've received an new connection request from '%1$s' at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:488 +#, php-format +msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s." +msgstr "" + +#: src/Lib/Enotify.php:492 src/Lib/Enotify.php:512 +#, php-format +msgid "You may visit their profile at %s" +msgstr "" + +#: src/Lib/Enotify.php:494 +#, php-format +msgid "Please visit %s to approve or reject the connection request." +msgstr "" + +#: src/Lib/Enotify.php:501 +msgid "[$Projectname:Notify] Friend suggestion received" +msgstr "" + +#: src/Lib/Enotify.php:502 +#, php-format +msgid "You've received a friend suggestion from '%1$s' at %2$s" +msgstr "" + +#: src/Lib/Enotify.php:504 +#, php-format +msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s." +msgstr "" + +#: src/Lib/Enotify.php:510 +msgid "Name:" +msgstr "" + +#: src/Lib/Enotify.php:511 +msgid "Photo:" +msgstr "" + +#: src/Lib/Enotify.php:514 +#, php-format +msgid "Please visit %s to approve or reject the suggestion." +msgstr "" + +#: src/Lib/Enotify.php:755 +msgid "[$Projectname:Notify]" +msgstr "" + +#: src/Lib/Enotify.php:873 +msgid "created a new post" +msgstr "" + +#: src/Lib/Enotify.php:874 +#, php-format +msgid "reacted to %s's conversation" +msgstr "" + +#: src/Lib/Enotify.php:876 +#, php-format +msgid "shared %s's post" +msgstr "" + +#: src/Lib/Enotify.php:880 +msgid "sent a direct message" +msgstr "" + +#: src/Lib/Enotify.php:887 +#, php-format +msgid "updated a poll dated %s" +msgstr "" + +#: src/Lib/Enotify.php:890 +#, php-format +msgid "edited a post dated %s" +msgstr "" + #: src/Lib/Libsync.php:987 #, php-format msgid "Unable to verify site signature for %s" @@ -2904,320 +3227,6 @@ msgstr "" msgid "Provide a personal tag cloud on your channel page" msgstr "" -#: src/Lib/Enotify.php:70 -msgid "$Projectname Notification" -msgstr "" - -#: src/Lib/Enotify.php:71 -msgid "$projectname" -msgstr "" - -#: src/Lib/Enotify.php:73 -msgid "Thank You," -msgstr "" - -#: src/Lib/Enotify.php:75 -#, php-format -msgid "%s Administrator" -msgstr "" - -#: src/Lib/Enotify.php:76 -#, php-format -msgid "This email was sent by %1$s at %2$s." -msgstr "" - -#: src/Lib/Enotify.php:76 src/Module/Home.php:150 src/Module/Home.php:159 -msgid "$Projectname" -msgstr "" - -#: src/Lib/Enotify.php:77 -#, php-format -msgid "" -"To stop receiving these messages, please adjust your Notification Settings " -"at %s" -msgstr "" - -#: src/Lib/Enotify.php:78 -#, php-format -msgid "To stop receiving these messages, please adjust your %s." -msgstr "" - -#: src/Lib/Enotify.php:78 -msgid "Notification Settings" -msgstr "" - -#: src/Lib/Enotify.php:137 -#, php-format -msgid "%s " -msgstr "" - -#: src/Lib/Enotify.php:141 -#, php-format -msgid "[$Projectname:Notify] New mail received at %s" -msgstr "" - -#: src/Lib/Enotify.php:144 -#, php-format -msgid "%1$s sent you a new private message at %2$s." -msgstr "" - -#: src/Lib/Enotify.php:145 -#, php-format -msgid "%1$s sent you %2$s." -msgstr "" - -#: src/Lib/Enotify.php:145 src/Lib/Enotify.php:148 -msgid "a private message" -msgstr "" - -#: src/Lib/Enotify.php:147 -#, php-format -msgid "%1$s replied to a private message at %2$s." -msgstr "" - -#: src/Lib/Enotify.php:148 -#, php-format -msgid "%1$s replied to %2$s." -msgstr "" - -#: src/Lib/Enotify.php:150 -#, php-format -msgid "Please visit %s to view and/or reply to your private messages." -msgstr "" - -#: src/Lib/Enotify.php:169 -msgid "repeated" -msgstr "" - -#: src/Lib/Enotify.php:176 -msgid "commented on" -msgstr "" - -#: src/Lib/Enotify.php:191 -msgid "liked" -msgstr "" - -#: src/Lib/Enotify.php:195 -msgid "disliked" -msgstr "" - -#: src/Lib/Enotify.php:245 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:255 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:267 -#, php-format -msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:281 -#, php-format -msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s" -msgstr "" - -#: src/Lib/Enotify.php:284 -#, php-format -msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s" -msgstr "" - -#: src/Lib/Enotify.php:286 -#, php-format -msgid "%1$s commented on an item/conversation you have been following." -msgstr "" - -#: src/Lib/Enotify.php:290 -msgid "(Moderated)" -msgstr "" - -#: src/Lib/Enotify.php:293 src/Lib/Enotify.php:376 src/Lib/Enotify.php:404 -#: src/Lib/Enotify.php:435 src/Lib/Enotify.php:454 src/Lib/Enotify.php:469 -#, php-format -msgid "Please visit %s to view and/or reply to the conversation." -msgstr "" - -#: src/Lib/Enotify.php:297 src/Lib/Enotify.php:298 -#, php-format -msgid "Please visit %s to approve or reject this comment." -msgstr "" - -#: src/Lib/Enotify.php:357 -#, php-format -msgid "%1$s liked [zrl=%2$s]your %3$s[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:372 -#, php-format -msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s" -msgstr "" - -#: src/Lib/Enotify.php:373 -#, php-format -msgid "%1$s liked a post or conversation you created." -msgstr "" - -#: src/Lib/Enotify.php:384 -#, php-format -msgid "[$Projectname:Notify] %s posted to your profile wall" -msgstr "" - -#: src/Lib/Enotify.php:390 -#, php-format -msgid "%1$s posted to your profile wall at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:393 -#, php-format -msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:400 src/Lib/Enotify.php:401 -msgid " - " -msgstr "" - -#: src/Lib/Enotify.php:400 src/Lib/Enotify.php:401 -#: src/Module/Connections.php:95 src/Module/Connections.php:200 -msgid "Moderated" -msgstr "" - -#: src/Lib/Enotify.php:409 src/Lib/Enotify.php:410 -#, php-format -msgid "Please visit %s to approve or reject this post." -msgstr "" - -#: src/Lib/Enotify.php:427 -#, php-format -msgid "[$Projectname:Notify] %s tagged you" -msgstr "" - -#: src/Lib/Enotify.php:428 -#, php-format -msgid "%1$s tagged you at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:430 -#, php-format -msgid "%1$s [zrl=%2$s]tagged you[/zrl]." -msgstr "" - -#: src/Lib/Enotify.php:442 -#, php-format -msgid "[$Projectname:Notify] %1$s poked you" -msgstr "" - -#: src/Lib/Enotify.php:443 -#, php-format -msgid "%1$s poked you at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:445 -#, php-format -msgid "%1$s [zrl=%2$s]poked you[/zrl]." -msgstr "" - -#: src/Lib/Enotify.php:461 -#, php-format -msgid "[$Projectname:Notify] %s tagged your post" -msgstr "" - -#: src/Lib/Enotify.php:462 -#, php-format -msgid "%1$s tagged your post at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:464 -#, php-format -msgid "%1$s tagged [zrl=%2$s]your post[/zrl]" -msgstr "" - -#: src/Lib/Enotify.php:476 -msgid "[$Projectname:Notify] Introduction received" -msgstr "" - -#: src/Lib/Enotify.php:477 -#, php-format -msgid "You've received an new connection request from '%1$s' at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:479 -#, php-format -msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s." -msgstr "" - -#: src/Lib/Enotify.php:483 src/Lib/Enotify.php:503 -#, php-format -msgid "You may visit their profile at %s" -msgstr "" - -#: src/Lib/Enotify.php:485 -#, php-format -msgid "Please visit %s to approve or reject the connection request." -msgstr "" - -#: src/Lib/Enotify.php:492 -msgid "[$Projectname:Notify] Friend suggestion received" -msgstr "" - -#: src/Lib/Enotify.php:493 -#, php-format -msgid "You've received a friend suggestion from '%1$s' at %2$s" -msgstr "" - -#: src/Lib/Enotify.php:495 -#, php-format -msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s." -msgstr "" - -#: src/Lib/Enotify.php:501 -msgid "Name:" -msgstr "" - -#: src/Lib/Enotify.php:502 -msgid "Photo:" -msgstr "" - -#: src/Lib/Enotify.php:505 -#, php-format -msgid "Please visit %s to approve or reject the suggestion." -msgstr "" - -#: src/Lib/Enotify.php:746 -msgid "[$Projectname:Notify]" -msgstr "" - -#: src/Lib/Enotify.php:864 -msgid "created a new post" -msgstr "" - -#: src/Lib/Enotify.php:865 -#, php-format -msgid "reacted to %s's conversation" -msgstr "" - -#: src/Lib/Enotify.php:867 -#, php-format -msgid "shared %s's post" -msgstr "" - -#: src/Lib/Enotify.php:871 -msgid "sent a direct message" -msgstr "" - -#: src/Lib/Enotify.php:878 -#, php-format -msgid "updated a poll dated %s" -msgstr "" - -#: src/Lib/Enotify.php:881 -#, php-format -msgid "edited a post dated %s" -msgstr "" - #: src/Lib/AccessList.php:32 msgid "" "A deleted list with this name was revived. Existing item permissions " diff --git a/version.php b/version.php index 19e3b7162..825fc6241 100644 --- a/version.php +++ b/version.php @@ -1,2 +1,2 @@ Date: Sat, 22 Jun 2024 12:51:56 +1000 Subject: [PATCH 08/22] WIP: replies endpoint --- src/Module/Replies.php | 190 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 src/Module/Replies.php diff --git a/src/Module/Replies.php b/src/Module/Replies.php new file mode 100644 index 000000000..75261ed53 --- /dev/null +++ b/src/Module/Replies.php @@ -0,0 +1,190 @@ + Date: Sat, 22 Jun 2024 13:18:41 +1000 Subject: [PATCH 09/22] wip: replies continued --- src/Module/Replies.php | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Module/Replies.php b/src/Module/Replies.php index 75261ed53..eebec2d5e 100644 --- a/src/Module/Replies.php +++ b/src/Module/Replies.php @@ -17,9 +17,9 @@ class Replies extends Controller public function init() { if (ActivityStreams::is_as_request() || Libzot::is_nomad_request()) { - $item_id = argv(1); + $item_mid = argv(1); - if (!$item_id) { + if (!$item_mid) { http_status_exit(404, 'Not found'); } @@ -33,13 +33,13 @@ class Replies extends Controller $test = q( "select * from item where mid = '%s' $item_normal limit 1", - dbesc(z_root() . '/activity/' . $item_id) + dbesc(z_root() . '/activity/' . $item_mid) ); if (!$test) { $test = q( "select * from item where mid = '%s' $item_normal limit 1", - dbesc(z_root() . '/item/' . $item_id) + dbesc(z_root() . '/item/' . $item_mid) ); if (!$test) { http_status_exit(404, 'Not found'); @@ -71,7 +71,7 @@ class Replies extends Controller if ($xchans) { $hashes = ids_to_querystr($xchans, 'xchan_hash', true); $i = q( - "select id as item_id, item_private, uid from item where mid = '%s' $item_normal and owner_xchan in ( " . protect_sprintf($hashes) . " ) limit 1", + "select item.* id as item_id from item where mid = '%s' $item_normal and owner_xchan in ( " . protect_sprintf($hashes) . " ) limit 1", dbesc($test[0]['mid']) ); } @@ -94,8 +94,8 @@ class Replies extends Controller if (!$i) { $i = q( - "select id as item_id, item_private, uid from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1", - dbesc($test[0]['parent_mid']) + "select item.*, id as item_id from item where mid = '%s' $item_normal $sql_extra order by item_wall desc limit 1", + dbesc($test[0]['mid']) ); } @@ -103,13 +103,13 @@ class Replies extends Controller http_status_exit(403, 'Forbidden'); } - $parents_str = ids_to_querystr($i, 'item_id'); + xchan_query($i); $sql_noAdd = ($zot6Hubloc) ? " and verb not in ('Add', 'Remove') " : ''; $items = q( - "SELECT item.*, item.id AS item_id FROM item WHERE item.parent IN ( %s ) $item_normal $sql_noAdd and item_private = %d and item_deleted = 0 and uid = %d", - dbesc($parents_str), + "SELECT item.*, item.id AS item_id FROM item WHERE item.thr_parent = '%s' $item_normal $sql_noAdd and item_private = %d and item_deleted = 0 and uid = %d", + dbesc($i[0]['mid']), intval($i[0]['item_private']), intval($i[0]['uid']) ); @@ -122,31 +122,31 @@ class Replies extends Controller $items = fetch_post_tags($items); $observer = App::get_observer(); - $parent = $items[0]; + $parent = $i[0]; $recips = (($parent['owner']['xchan_network'] === 'activitypub') ? get_iconfig($parent['id'], 'activitypub', 'recips', []) : []); $to = (($recips && array_key_exists('to', $recips) && is_array($recips['to'])) ? $recips['to'] : null); $nitems = []; - foreach ($items as $i) { + foreach ($items as $item) { $mids = []; - if (intval($i['item_private'])) { + if (intval($item['item_private'])) { if (!$observer) { continue; } // ignore private reshare, possibly from hubzilla if ($i['verb'] === 'Announce') { - if (!in_array($i['thr_parent'], $mids)) { - $mids[] = $i['thr_parent']; + if (!in_array($item['thr_parent'], $mids)) { + $mids[] = $item['thr_parent']; } continue; } // also ignore any children of the private reshares - if (in_array($i['thr_parent'], $mids)) { + if (in_array($item['thr_parent'], $mids)) { continue; } - if ($observer['xchan_hash'] !== $i['owner_xchan']) { + if ($observer['xchan_hash'] !== $item['owner_xchan']) { if (empty($to)) { continue; } @@ -155,14 +155,14 @@ class Replies extends Controller } } } - $nitems[] = $i; + $nitems[] = $item; } if (!$nitems) { http_status_exit(404, 'Not found'); } - $chan = Channel::from_id($nitems[0]['uid']); + $chan = Channel::from_id($i[0]['uid']); if (!$chan) { http_status_exit(404, 'Not found'); @@ -172,16 +172,16 @@ class Replies extends Controller http_status_exit(403, 'Forbidden'); } - $i = ZlibActivity::encode_item_collection($nitems, 'conversation/' . $item_id, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); + $i = ZlibActivity::encode_item_collection($nitems, 'replies/' . $item_mid, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); if ($portable_id && (!intval($items[0]['item_private']))) { - ThreadListener::store(z_root() . '/activity/' . $item_id, $portable_id); + ThreadListener::store(z_root() . '/activity/' . $item_mid, $portable_id); } if (!$i) { http_status_exit(404, 'Not found'); } - $channel = Channel::from_id($items[0]['uid']); + $channel = Channel::from_id($i[0]['uid']); as_return_and_die($i, $channel); } From fd139224d02db1ff2b18b377e1f5cebf34aec4e3 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 13:41:27 +1000 Subject: [PATCH 10/22] wip: replies collection cont. --- src/Module/Replies.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/Module/Replies.php b/src/Module/Replies.php index eebec2d5e..4b2350c8b 100644 --- a/src/Module/Replies.php +++ b/src/Module/Replies.php @@ -52,7 +52,7 @@ class Replies extends Controller $portable_id = $sigdata['portable_id']; observer_auth($portable_id); - // first see if we have a copy of this item's parent owned by the current signer + // first see if we have a copy of this item owned by the current signer // include xchans for all zot-like networks - these will have the same guid and public key $x = q( @@ -76,15 +76,6 @@ class Replies extends Controller ); } } - $parsed = parse_url($sigdata['signer']); - unset($parsed['fragment']); - unset($parsed['query']); - - $idUrl = unparse_url($parsed); - $hublocs = q("select * from hubloc where hubloc_id_url = '%s'", - dbesc($idUrl) - ); - $zot6Hubloc = $hublocs && $hublocs[0]['hubloc_network'] === 'zot6'; } // if we don't have a parent id belonging to the signer see if we can obtain one as a visitor that we have permission to access @@ -105,7 +96,7 @@ class Replies extends Controller xchan_query($i); - $sql_noAdd = ($zot6Hubloc) ? " and verb not in ('Add', 'Remove') " : ''; + $sql_noAdd = " and verb not in ('Add', 'Remove') "; $items = q( "SELECT item.*, item.id AS item_id FROM item WHERE item.thr_parent = '%s' $item_normal $sql_noAdd and item_private = %d and item_deleted = 0 and uid = %d", @@ -172,17 +163,17 @@ class Replies extends Controller http_status_exit(403, 'Forbidden'); } - $i = ZlibActivity::encode_item_collection($nitems, 'replies/' . $item_mid, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); + $collection = ZlibActivity::encode_item_collection($nitems, 'replies/' . $item_mid, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); if ($portable_id && (!intval($items[0]['item_private']))) { ThreadListener::store(z_root() . '/activity/' . $item_mid, $portable_id); } - if (!$i) { + if (!$collection) { http_status_exit(404, 'Not found'); } $channel = Channel::from_id($i[0]['uid']); - as_return_and_die($i, $channel); + as_return_and_die($collection, $channel); } goaway(z_root() . '/item/' . argv(1)); From c7467c4ba6a7a5339b5859b756be736773dcd596 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 14:39:41 +1000 Subject: [PATCH 11/22] cleanup inspect - don't use jindent --- src/Lib/Activity.php | 1 + src/Module/Inspect.php | 4 ++-- src/Module/Replies.php | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Lib/Activity.php b/src/Lib/Activity.php index 9a7c582fe..be850a4ab 100644 --- a/src/Lib/Activity.php +++ b/src/Lib/Activity.php @@ -1192,6 +1192,7 @@ class Activity $activity['to'] = [ACTIVITY_PUBLIC_INBOX]; return $activity; } + $activity['replies'] = z_root() . '/replies/' . basename($item['mid']); if (isset($item['obj']) && $item['obj']) { if (is_string($item['obj'])) { diff --git a/src/Module/Inspect.php b/src/Module/Inspect.php index 91484147e..23d4b43cb 100644 --- a/src/Module/Inspect.php +++ b/src/Module/Inspect.php @@ -62,8 +62,8 @@ class Inspect extends Controller $output .= '(encode_activity)' . EOL . '
' . escape_tags(json_encode(Activity::encode_activity($item, true),
                         JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) . '
' . EOL . EOL; - - $output .= '(cached activity)' . EOL . '
' . jindent(escape_tags(ObjCache::Get($item['mid']) ?? '')) . '
' . EOL . EOL; + + $output .= '(cached activity)' . EOL . '
' . jindent(json_encode(json_decode(ObjCache::Get($item['mid']) ?? '', true),JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) . '
' . EOL . EOL; if (str_contains($item['tgt_type'], 'Collection') && !empty($item['target']['id'])) { $str = Activity::fetch($item['target']['id'], App::$channel); diff --git a/src/Module/Replies.php b/src/Module/Replies.php index 4b2350c8b..0e2c50ad5 100644 --- a/src/Module/Replies.php +++ b/src/Module/Replies.php @@ -99,7 +99,7 @@ class Replies extends Controller $sql_noAdd = " and verb not in ('Add', 'Remove') "; $items = q( - "SELECT item.*, item.id AS item_id FROM item WHERE item.thr_parent = '%s' $item_normal $sql_noAdd and item_private = %d and item_deleted = 0 and uid = %d", + "SELECT item.*, item.id AS item_id FROM item WHERE item.thr_parent = '%s' and item.mid != item.parent_mid $item_normal $sql_noAdd and item_private = %d and item_deleted = 0 and uid = %d", dbesc($i[0]['mid']), intval($i[0]['item_private']), intval($i[0]['uid']) From 4f9730fcd563e6e2102349b7df3f929989ee7870 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 14:43:54 +1000 Subject: [PATCH 12/22] rename function --- src/Module/Inspect.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Module/Inspect.php b/src/Module/Inspect.php index 23d4b43cb..503a65e58 100644 --- a/src/Module/Inspect.php +++ b/src/Module/Inspect.php @@ -62,8 +62,8 @@ class Inspect extends Controller $output .= '(encode_activity)' . EOL . '
' . escape_tags(json_encode(Activity::encode_activity($item, true),
                         JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) . '
' . EOL . EOL; - - $output .= '(cached activity)' . EOL . '
' . jindent(json_encode(json_decode(ObjCache::Get($item['mid']) ?? '', true),JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) . '
' . EOL . EOL; + + $output .= '(cached activity)' . EOL . '
' . escape_tags(json_encode(json_decode(ObjCache::Get($item['mid']) ?? '', true),JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)) . '
' . EOL . EOL; if (str_contains($item['tgt_type'], 'Collection') && !empty($item['target']['id'])) { $str = Activity::fetch($item['target']['id'], App::$channel); From 9f02f73e12cf87de8b7abc100f8f4ce77b7bfb9f Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sat, 22 Jun 2024 20:59:43 +1000 Subject: [PATCH 13/22] dirsearch cleanup --- src/Module/Dirsearch.php | 65 +--------------------------------------- 1 file changed, 1 insertion(+), 64 deletions(-) diff --git a/src/Module/Dirsearch.php b/src/Module/Dirsearch.php index 700e684cb..a8492a977 100644 --- a/src/Module/Dirsearch.php +++ b/src/Module/Dirsearch.php @@ -23,15 +23,6 @@ class Dirsearch extends Controller // logger('request: ' . print_r($_REQUEST,true)); - - if (argc() > 1 && argv(1) === 'sites') { - $ret = $this->list_public_sites(); - json_return_and_die($ret); - } - - $dirmode = intval(get_config('system', 'directory_mode')); - - $network = EMPTY_STR; $sql_extra = ''; @@ -89,20 +80,7 @@ class Dirsearch extends Controller if ($safe === false) { $safe = 1; } - - // Directory mirrors will request sync packets, which are lists - // of records that have changed since the sync datetime. - - if (array_key_exists('sync', $_REQUEST)) { - if ($_REQUEST['sync']) { - $sync = Time::convert('UTC', 'UTC', $_REQUEST['sync']); - } else { - $sync = Time::convert('UTC', 'UTC', '2010-01-01 01:01:00'); - } - } else { - $sync = false; - } - + if ($hub) { $hub_query = " and xchan_hash in (select hubloc_hash from hubloc where hubloc_deleted = 0 and hubloc_host = '" . protect_sprintf(dbesc($hub)) . "') "; } else { @@ -410,45 +388,4 @@ class Dirsearch extends Controller return $ret; } - - public function list_public_sites() - { - - $rand = db_getfunc('rand'); - - $r = q( - "select * from site where site_type = %d and site_dead = 0", - intval(SITE_TYPE_ZOT) - ); - - $ret = ['success' => false]; - - if ($r) { - $ret['success'] = true; - $ret['sites'] = []; - - foreach ($r as $rr) { - if ($rr['site_access'] == ACCESS_FREE) { - $access = 'free'; - } elseif ($rr['site_access'] == ACCESS_PAID) { - $access = 'paid'; - } elseif ($rr['site_access'] == ACCESS_TIERED) { - $access = 'tiered'; - } else { - $access = 'private'; - } - - if ($rr['site_register'] == REGISTER_OPEN) { - $register = 'open'; - } elseif ($rr['site_register'] == REGISTER_APPROVE) { - $register = 'approve'; - } else { - $register = 'closed'; - } - - $ret['sites'][] = ['url' => $rr['site_url'], 'access' => $access, 'register' => $register, 'sellpage' => $rr['site_sellpage'], 'location' => $rr['site_location'], 'project' => $rr['site_project'], 'version' => $rr['site_version']]; - } - } - return $ret; - } } From 77936dde9f987925c0ed074ab465a82ffd305de0 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sun, 23 Jun 2024 08:08:18 +1000 Subject: [PATCH 14/22] ensure the audience in the AS matches the target audience --- src/Daemon/Notifier.php | 18 +----------------- src/Lib/Activity.php | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/Daemon/Notifier.php b/src/Daemon/Notifier.php index 21bd5205a..b8299a657 100644 --- a/src/Daemon/Notifier.php +++ b/src/Daemon/Notifier.php @@ -429,7 +429,7 @@ class Notifier implements DaemonInterface self::$packet_type = 'response'; } - $audience = self::getAudienceFromItem($target_item); + $audience = Activity::getAudienceFromItem($target_item); $isContained = ($audience & AUDIENCE_CONVERSATION) || ($parent_item['item_restrict'] & 4) @@ -894,20 +894,4 @@ class Notifier implements DaemonInterface } return $xchans; } - - public static function getAudienceFromItem($item) - { - $audience = 0; - $postopts = explode(',', $item['postopts']); - if (in_array('sender', $postopts)) { - $audience += AUDIENCE_SENDER; - } - if (in_array('conversation', $postopts)) { - $audience += AUDIENCE_CONVERSATION; - } - if (in_array('followers', $postopts)) { - $audience += AUDIENCE_FOLLOWERS; - } - return $audience; - } } diff --git a/src/Lib/Activity.php b/src/Lib/Activity.php index 9a7c582fe..508cf1ae7 100644 --- a/src/Lib/Activity.php +++ b/src/Lib/Activity.php @@ -1089,6 +1089,8 @@ class Activity // addressing madness + $audience = self::getAudienceFromItem($item); + if ($activitypub) { $parent_i = []; $public = !$item['item_private']; @@ -1125,7 +1127,9 @@ class Activity if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); } - + if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { + $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; + } $d = q( "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", dbesc($item['parent_mid']), @@ -1456,6 +1460,7 @@ class Activity // addressing madness + $audience = self::getAudienceFromItem($item); if ($activitypub) { $parent_i = []; $activity['to'] = []; @@ -1509,7 +1514,9 @@ class Activity if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); } - + if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { + $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; + } $d = q( "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", dbesc($item['parent_mid']), @@ -5206,4 +5213,20 @@ class Activity } return $item; } + + public static function getAudienceFromItem($item) + { + $audience = 0; + $postopts = explode(',', $item['postopts']); + if (in_array('sender', $postopts)) { + $audience += AUDIENCE_SENDER; + } + if (in_array('conversation', $postopts)) { + $audience += AUDIENCE_CONVERSATION; + } + if (in_array('followers', $postopts)) { + $audience += AUDIENCE_FOLLOWERS; + } + return $audience; + } } From 806b7a65b080bdb81337529d20684a23049bf682 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Sun, 23 Jun 2024 17:06:09 +1000 Subject: [PATCH 15/22] reverse to and cc to match Mastodon followers-only when in AUDIENCE_FOLLOWERS over-ride. --- src/Lib/Activity.php | 82 +++++++++++++++++++++------------------- src/Module/Dirsearch.php | 2 +- 2 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/Lib/Activity.php b/src/Lib/Activity.php index 4f3c41ff4..27343a0cb 100644 --- a/src/Lib/Activity.php +++ b/src/Lib/Activity.php @@ -1090,6 +1090,7 @@ class Activity // addressing madness $audience = self::getAudienceFromItem($item); + $mentions = self::map_mentions($item); if ($activitypub) { $parent_i = []; @@ -1123,35 +1124,37 @@ class Activity $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); } } elseif ((int)$item['item_private'] === 1) { - $activity['cc'] = self::map_acl($item); - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { - $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; + $activity['to'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; } - $d = q( - "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - if ($d) { - if ($d[0]['hubloc_network'] === 'activitypub') { - $addr = $d[0]['hubloc_hash']; - } else { - $addr = $d[0]['hubloc_id_url']; + else { + $activity['cc'] = self::map_acl($item); + if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { + $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); + } + + $d = q( + "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", + dbesc($item['parent_mid']), + intval($item['uid']) + ); + if ($d) { + if ($d[0]['hubloc_network'] === 'activitypub') { + $addr = $d[0]['hubloc_hash']; + } else { + $addr = $d[0]['hubloc_id_url']; + } + $activity['cc'][] = $addr; } - $activity['cc'][] = $addr; } } } - $mentions = self::map_mentions($item); if (count($mentions) > 0) { if (!$activity['to']) { $activity['to'] = $mentions; } else { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $mentions))); + $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $mentions))); } } } @@ -1462,6 +1465,8 @@ class Activity // addressing madness $audience = self::getAudienceFromItem($item); + $mentions = self::map_mentions($item); + if ($activitypub) { $parent_i = []; $activity['to'] = []; @@ -1490,7 +1495,6 @@ class Activity } } - if ($public) { $activity['to'] = [ACTIVITY_PUBLIC_INBOX]; if (isset($parent_i['to']) && is_array($parent_i['to'])) { @@ -1511,36 +1515,38 @@ class Activity $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); } } elseif ((int)$item['item_private'] === 1) { - $activity['cc'] = self::map_acl($item); - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { - $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; + $activity['to'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; } - $d = q( - "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - - if ($d) { - if ($d[0]['hubloc_network'] === 'activitypub') { - $addr = $d[0]['hubloc_hash']; - } else { - $addr = $d[0]['hubloc_id_url']; + else { + $activity['cc'] = self::map_acl($item); + if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { + $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); + } + + $d = q( + "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", + dbesc($item['parent_mid']), + intval($item['uid']) + ); + + if ($d) { + if ($d[0]['hubloc_network'] === 'activitypub') { + $addr = $d[0]['hubloc_hash']; + } else { + $addr = $d[0]['hubloc_id_url']; + } + $activity['cc'][] = $addr; } - $activity['cc'][] = $addr; } } } - $mentions = self::map_mentions($item); if (count($mentions) > 0) { if (!$activity['to']) { $activity['to'] = $mentions; } else { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $mentions))); + $activity['cc'] = array_values(array_unique(array_merge($activity['to'], $mentions))); } } } diff --git a/src/Module/Dirsearch.php b/src/Module/Dirsearch.php index a8492a977..77511205e 100644 --- a/src/Module/Dirsearch.php +++ b/src/Module/Dirsearch.php @@ -80,7 +80,7 @@ class Dirsearch extends Controller if ($safe === false) { $safe = 1; } - + if ($hub) { $hub_query = " and xchan_hash in (select hubloc_hash from hubloc where hubloc_deleted = 0 and hubloc_host = '" . protect_sprintf(dbesc($hub)) . "') "; } else { From 1dc6c28a0e5358999e6af9762d90aad54602eb9f Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Mon, 24 Jun 2024 12:12:20 +1000 Subject: [PATCH 16/22] issue #175 email notifications of reactions to private messages --- src/Lib/Enotify.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Lib/Enotify.php b/src/Lib/Enotify.php index ef51e0847..0b3192673 100644 --- a/src/Lib/Enotify.php +++ b/src/Lib/Enotify.php @@ -153,7 +153,7 @@ class Enotify else { $action = t('replied to'); } - $preamble = sprintf(t('%1$s %2%s a private message at %3$s.'), $sender['xchan_name'], $action, $sitename); + $preamble = sprintf(t('%1$s %2$s a private message at %3$s.'), $sender['xchan_name'], $action, $sitename); $epreamble = sprintf(t('%1$s %2$s %3$s.', 'react_private_message'), '[zrl=' . $sender['xchan_url'] . ']' . html_entity_decode('​') . $sender['xchan_name'] . '[/zrl]', $action, '[zrl=$itemlink]' . t('a private message') . '[/zrl]'); } $sitelink = t('Please visit %s to view and/or reply to your private messages.'); From 4e003d2790a5f32ad825cbeca9deafef1eeea48e Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Mon, 24 Jun 2024 12:28:29 +1000 Subject: [PATCH 17/22] provide registration reason in register approve email --- src/Lib/Account.php | 1 + src/Module/Register.php | 1 + view/en/register_verify_eml.tpl | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/Lib/Account.php b/src/Lib/Account.php index 9da3c1b9c..99406d4ee 100644 --- a/src/Lib/Account.php +++ b/src/Lib/Account.php @@ -380,6 +380,7 @@ class Account { '$sitename' => get_config('system', 'sitename'), '$siteurl' => z_root(), '$email' => $arr['email'], + '$reason' => $arr['reason'], '$uid' => $arr['account']['account_id'], '$hash' => $hash, '$details' => $details diff --git a/src/Module/Register.php b/src/Module/Register.php index 4e241f303..41ae69097 100644 --- a/src/Module/Register.php +++ b/src/Module/Register.php @@ -181,6 +181,7 @@ class Register extends Controller } } } elseif ($policy == REGISTER_APPROVE) { + $result['reason'] = substr(trim(escape_tags($_REQUEST['reason'])),0, 500); $res = Account::send_reg_approval_email($result); if ($res) { info(t('Your registration is pending approval by the site owner.') . EOL); diff --git a/view/en/register_verify_eml.tpl b/view/en/register_verify_eml.tpl index 85d9a12d3..6f21b4c92 100644 --- a/view/en/register_verify_eml.tpl +++ b/view/en/register_verify_eml.tpl @@ -2,6 +2,8 @@ A new user registration request was received at {{$sitename}} which requires your approval. +Reason: +{{$reason}} The login details are as follows: From 485935ffe66407b19dc89c69fb2096d2fa412e02 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Mon, 24 Jun 2024 17:52:01 +1000 Subject: [PATCH 18/22] add template change to english translations --- view/en-au/register_verify_eml.tpl | 4 +++- view/en-gb/register_verify_eml.tpl | 4 ++++ view/en/register_verify_eml.tpl | 7 ++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/view/en-au/register_verify_eml.tpl b/view/en-au/register_verify_eml.tpl index 85d9a12d3..013c4459e 100644 --- a/view/en-au/register_verify_eml.tpl +++ b/view/en-au/register_verify_eml.tpl @@ -2,13 +2,15 @@ A new user registration request was received at {{$sitename}} which requires your approval. - The login details are as follows: Site Location: {{$siteurl}} Login Name: {{$email}} IP Address: {{$details}} +Reason: +{{$reason}} + To approve this request please visit the following link: diff --git a/view/en-gb/register_verify_eml.tpl b/view/en-gb/register_verify_eml.tpl index 85d9a12d3..ae5df7e29 100644 --- a/view/en-gb/register_verify_eml.tpl +++ b/view/en-gb/register_verify_eml.tpl @@ -9,6 +9,10 @@ Site Location: {{$siteurl}} Login Name: {{$email}} IP Address: {{$details}} +Reason: +{{$reason}} + + To approve this request please visit the following link: diff --git a/view/en/register_verify_eml.tpl b/view/en/register_verify_eml.tpl index 6f21b4c92..c986f9fbc 100644 --- a/view/en/register_verify_eml.tpl +++ b/view/en/register_verify_eml.tpl @@ -2,15 +2,16 @@ A new user registration request was received at {{$sitename}} which requires your approval. -Reason: -{{$reason}} - The login details are as follows: Site Location: {{$siteurl}} Login Name: {{$email}} IP Address: {{$details}} +Reason: +{{$reason}} + + To approve this request please visit the following link: From b73e9f7c35d78958dc01c4c41fd624252eeeab2f Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Mon, 24 Jun 2024 20:36:54 +1000 Subject: [PATCH 19/22] basic support for video alt-text --- include/bbcode.php | 23 ++++++++++++++++++++++- src/Lib/Activity.php | 8 +++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index 4484fa487..b67b506d7 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -168,7 +168,28 @@ function videowithopts($match) $poster = 'poster="' . (($zrl) ? zid($matches[1]) : $matches[1]) . '"'; } - return ''; + $x = preg_match("/title='(.*?)'/ism", $attributes, $matches); + if ($x) { + $title = $matches[1]; + } + + $x = preg_match("/title=\"\;(.*?)\"\;/ism", $attributes, $matches); + if ($x) { + $title = $matches[1]; + } + + // This regex permits backslash-quote escapes inside the alt text. + $x = preg_match('/title="([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"/ism', $attributes, $matches); + if ($x) { + $title = $matches[1]; + } + $title = (($title) + ? 'title="' . htmlspecialchars(str_replace('\\"', '"', $title), ENT_QUOTES, 'UTF-8', false) . '"' + : ''); + + + + return ''; } // [noparse][i]italic[/i][/noparse] turns into diff --git a/src/Lib/Activity.php b/src/Lib/Activity.php index 27343a0cb..8db2bc7ab 100644 --- a/src/Lib/Activity.php +++ b/src/Lib/Activity.php @@ -4730,7 +4730,13 @@ class Activity } if (array_key_exists('type', $a) && stripos($a['type'], 'video') !== false) { if (self::media_not_in_body($a['href'], $item['body'])) { - $item['body'] .= "\n\n" . '[video]' . $a['href'] . '[/video]'; + if (isset($a['name']) && $a['name']) { + $alt = htmlspecialchars($a['name'], ENT_QUOTES, 'UTF-8', false); + $alt = str_replace(['[', ']'], ['[', ']'], $alt); + $item['body'] .= "\n\n" . '[video title="' . $alt . '"]' . $a['href'] . '[/img]'; + } else { + $item['body'] .= "\n\n" . '[video]' . $a['href'] . '[/video]'; + } } } if (array_key_exists('type', $a) && stripos($a['type'], 'audio') !== false) { From 9067a319399abee5372ed684d1b30124e8d6a020 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 25 Jun 2024 06:37:06 +1000 Subject: [PATCH 20/22] addressing refactor --- include/connections.php | 2 +- include/constants.php | 4 + include/misc.php | 5 + src/Lib/Activity.php | 264 ++++++++++++++++------------------------ 4 files changed, 117 insertions(+), 158 deletions(-) diff --git a/include/connections.php b/include/connections.php index 84b033b5c..5c8bac743 100644 --- a/include/connections.php +++ b/include/connections.php @@ -447,7 +447,7 @@ function contact_remove($channel_id, $abook_id, $atoken_sync = false) Hook::call('connection_remove', $x); - $archive = get_pconfig($channel_id, 'system', 'archive_removed_contacts'); + $archive = get_pconfig($channel_id, 'system', 'archive_removed_contacts', true); if ($archive) { q( "update abook set abook_archived = 1 where abook_id = %d and abook_channel = %d", diff --git a/include/constants.php b/include/constants.php index a243cf23e..0ae6b264d 100644 --- a/include/constants.php +++ b/include/constants.php @@ -145,6 +145,10 @@ define ( 'CLIENT_MODE_UPDATE', 0x0002); define ('AUDIENCE_SENDER', 0x0001); define ('AUDIENCE_CONVERSATION', 0x0002); define ('AUDIENCE_FOLLOWERS', 0x0004); +define ('AUDIENCE_PUBLIC', 0x0008); +define ('AUDIENCE_UNLISTED', 0x0010); +define ('AUDIENCE_MENTIONS', 0x0020); +define ('AUDIENCE_SERVER', 0x0040); /** * diff --git a/include/misc.php b/include/misc.php index e62d8f418..e817979a0 100644 --- a/include/misc.php +++ b/include/misc.php @@ -2636,6 +2636,11 @@ function ids_to_querystr($arr, $idx = 'id', $quote = false) return(implode(',', $t)); } +function array_merge_clean($array1, $array2) +{ + return array_values(array_unique(array_merge($array1, $array2))); +} + /** * @brief array_elm_to_str($arr,$elm,$delim = ',') extract unique individual elements from an array of arrays and return them as a string separated by a delimiter * similar to ids_to_querystr, but allows a different delimiter instead of a db-quote option diff --git a/src/Lib/Activity.php b/src/Lib/Activity.php index 27343a0cb..f4b8504c2 100644 --- a/src/Lib/Activity.php +++ b/src/Lib/Activity.php @@ -951,12 +951,6 @@ class Activity $activity['inReplyTo'] = set_activity_mid($item['thr_parent']); } - // @FIXME FEP-5624 set for comment approvals but not event approvals - // For comment approvals and rejections - // if (in_array($activity['type'], ['Accept','Reject']) && is_string($item['obj']) && strlen($item['obj'])) { - // $activity['inReplyTo'] = $item['thr_parent']; - // } - $cnv = get_iconfig($item['parent'], 'activitypub', 'context'); if (!$cnv) { $cnv = $item['parent_mid']; @@ -1087,89 +1081,7 @@ class Activity } } - // addressing madness - - $audience = self::getAudienceFromItem($item); - $mentions = self::map_mentions($item); - - if ($activitypub) { - $parent_i = []; - $public = !$item['item_private']; - $top_level = ($item['mid'] === $item['parent_mid']); - $activity['to'] = []; - $activity['cc'] = []; - - $recips = get_iconfig($item['parent'], 'activitypub', 'recips'); - if ($recips) { - $parent_i['to'] = $recips['to']; - $parent_i['cc'] = $recips['cc']; - } - - if ($public) { - $activity['to'] = [ACTIVITY_PUBLIC_INBOX]; - if (isset($parent_i['to']) && is_array($parent_i['to'])) { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); - } - if ($item['item_origin']) { - $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; - } - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } - } else { - // private activity - if ($top_level) { - $activity['to'] = self::map_acl($item); - if (isset($parent_i['to']) && is_array($parent_i['to'])) { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); - } - } elseif ((int)$item['item_private'] === 1) { - if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { - $activity['to'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; - } - else { - $activity['cc'] = self::map_acl($item); - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } - - $d = q( - "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - if ($d) { - if ($d[0]['hubloc_network'] === 'activitypub') { - $addr = $d[0]['hubloc_hash']; - } else { - $addr = $d[0]['hubloc_id_url']; - } - $activity['cc'][] = $addr; - } - } - } - } - - if (count($mentions) > 0) { - if (!$activity['to']) { - $activity['to'] = $mentions; - } else { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $mentions))); - } - } - } - - $cc = []; - if ($activity['cc'] && is_array($activity['cc'])) { - foreach ($activity['cc'] as $e) { - if (!is_array($activity['to'])) { - $cc[] = $e; - } elseif (!in_array($e, $activity['to'])) { - $cc[] = $e; - } - } - } - $activity['cc'] = $cc; + $activity = self::encodeAddressing($activity, $item); return $activity; } @@ -1462,91 +1374,113 @@ class Activity } } - // addressing madness + $activity = self::encodeAddressing($activity, $item); + return $activity; + } + + public static function encodeAddressing($activity,$item) + { + /* + * addressing madness + * + * For what it's worth, Mastodon’s visibility scopes are a custom thing and this is generally how they map: + * public = to: [public], cc: [followers, mentions] + * unlisted = cc: [public, followers, mentions] + * followers-only = to: [followers], cc: [mentions] + * direct = to: [mentions] + * + * This software does not normally use the same mappings - and doesn't even require mappings; + * but the Mastodon mappings may need to be considered so that private audiences are not mis-identified + * when communicating with people using that software. + */ + + $channel = Channel::from_id($item['uid']); // needed in future for nomadic follower addressing $audience = self::getAudienceFromItem($item); $mentions = self::map_mentions($item); + $followers = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; - if ($activitypub) { - $parent_i = []; - $activity['to'] = []; - $activity['cc'] = []; + $parent_i = []; + $activity['to'] = []; + $activity['cc'] = []; - $public = !$item['item_private']; - $top_level = $item['mid'] === $item['parent_mid']; + $public = !$item['item_private']; + $top_level = $item['mid'] === $item['parent_mid']; - if (!$top_level) { - if (intval($item['parent'])) { - $recips = get_iconfig($item['parent'], 'activitypub', 'recips'); + if (!$top_level) { + if (intval($item['parent'])) { + $recips = get_iconfig($item['parent'], 'activitypub', 'recips'); + } else { + // if we are encoding this item prior to storage there won't be a parent. + $p = q( + "select parent from item where parent_mid = '%s' and uid = %d", + dbesc($item['parent_mid']), + intval($item['uid']) + ); + if ($p) { + $recips = get_iconfig($p[0]['parent'], 'activitypub', 'recips'); + } + } + if ($recips) { + $parent_i['to'] = $recips['to']; + $parent_i['cc'] = $recips['cc']; + } + } + + if ($public) { + $activity['to'] = [ACTIVITY_PUBLIC_INBOX]; + if (isset($parent_i['to']) && is_array($parent_i['to'])) { + $activity['to'] = array_merge_clean($activity['to'], $parent_i['to']); + } + if ($item['item_origin']) { + $activity['cc'] = $followers; + } + if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { + $activity['cc'] = array_merge_clean($activity['cc'], $parent_i['cc']); + } + } else { + // private activity + if ($top_level) { + $activity['to'] = self::map_acl($item); + if (isset($parent_i['to']) && is_array($parent_i['to'])) { + $activity['to'] = array_merge_clean($activity['to'], $parent_i['to']); + } + } elseif ((int)$item['item_private'] === 1) { + if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { + $activity['to'] = $followers; } else { - // if we are encoding this item prior to storage there won't be a parent. - $p = q( - "select parent from item where parent_mid = '%s' and uid = %d", + $activity['cc'] = self::map_acl($item); + if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { + $activity['cc'] = array_merge_clean($activity['cc'], $parent_i['cc']); + } + + $d = q( + "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", dbesc($item['parent_mid']), intval($item['uid']) ); - if ($p) { - $recips = get_iconfig($p[0]['parent'], 'activitypub', 'recips'); - } - } - if ($recips) { - $parent_i['to'] = $recips['to']; - $parent_i['cc'] = $recips['cc']; - } - } - if ($public) { - $activity['to'] = [ACTIVITY_PUBLIC_INBOX]; - if (isset($parent_i['to']) && is_array($parent_i['to'])) { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); - } - if ($item['item_origin']) { - $activity['cc'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; - } - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } - } else { - // private activity - - if ($top_level) { - $activity['to'] = self::map_acl($item); - if (isset($parent_i['to']) && is_array($parent_i['to'])) { - $activity['to'] = array_values(array_unique(array_merge($activity['to'], $parent_i['to']))); - } - } elseif ((int)$item['item_private'] === 1) { - if (($audience & AUDIENCE_FOLLOWERS) && $item['item_origin']) { - $activity['to'] = [z_root() . '/followers/' . substr($item['author']['xchan_addr'], 0, strpos($item['author']['xchan_addr'], '@'))]; - } - else { - $activity['cc'] = self::map_acl($item); - if (isset($parent_i['cc']) && is_array($parent_i['cc'])) { - $activity['cc'] = array_values(array_unique(array_merge($activity['cc'], $parent_i['cc']))); - } - - $d = q( - "select hubloc.* from hubloc left join item on hubloc_hash = owner_xchan where item.parent_mid = '%s' and item.uid = %d and hubloc_deleted = 0 order by hubloc_id desc limit 1", - dbesc($item['parent_mid']), - intval($item['uid']) - ); - - if ($d) { - if ($d[0]['hubloc_network'] === 'activitypub') { - $addr = $d[0]['hubloc_hash']; - } else { - $addr = $d[0]['hubloc_id_url']; - } - $activity['cc'][] = $addr; + if ($d) { + if (in_array($d[0]['hubloc_network'], ['activitypub', 'apnomadic'])) { + $addr = $d[0]['hubloc_hash']; + } else { + $addr = $d[0]['hubloc_id_url']; } + $activity['cc'][] = $addr; } } } + } - if (count($mentions) > 0) { + // Delivery is controlled by parent ACL when AUDIENCE_CONVERSATION is in effect - + // and mentions are ignored. + + if ((!$audience) || !($audience & AUDIENCE_CONVERSATION)) { + if (count($mentions)) { if (!$activity['to']) { $activity['to'] = $mentions; - } else { - $activity['cc'] = array_values(array_unique(array_merge($activity['to'], $mentions))); + } elseif ((int)$item['item_private'] !== 2) { + $activity['cc'] = array_merge_clean($activity['cc'], $mentions); } } } @@ -1570,6 +1504,8 @@ class Activity } + + // Returns an array of URLS for any mention tags found in the item array $i. public static function map_mentions($i) @@ -5221,10 +5157,15 @@ class Activity return $item; } + public static function getPostOpts($item) + { + return explode(',', $item['postopts']); + } + public static function getAudienceFromItem($item) { $audience = 0; - $postopts = explode(',', $item['postopts']); + $postopts = self::getPostOpts($item); if (in_array('sender', $postopts)) { $audience += AUDIENCE_SENDER; } @@ -5234,6 +5175,15 @@ class Activity if (in_array('followers', $postopts)) { $audience += AUDIENCE_FOLLOWERS; } + if (in_array('public', $postopts)) { + $audience += AUDIENCE_PUBLIC; + } + if (in_array('unlisted', $postopts)) { + $audience += AUDIENCE_UNLISTED; + } + if (in_array('mentions', $postopts)) { + $audience += AUDIENCE_MENTIONS; + } return $audience; } } From 89228151be939aefbd1218db8adbce45d21ce816 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 25 Jun 2024 07:02:31 +1000 Subject: [PATCH 21/22] summary continued --- include/bbcode.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index b67b506d7..75c936d57 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -847,14 +847,9 @@ function bb_spoilertag($match) function bb_summary($match) { - $rnd1 = mt_rand(); - $rnd2 = mt_rand(); - $rnd3 = mt_rand(); - $rnd4 = mt_rand(); + // return $match[1] . $match[2] . EOL . EOL . $match[3]; - return $match[1] . $match[2] . EOL . EOL . $match[3]; - -// return $match[1] . '
' . $match[2] . '
' . t('View article') . '
'; + return $match[1] . '
' .$match[2] . '' . EOL. EOL . $match[3] . '
'; } From 2bf913e57a78f41aedae6b9eafbe24f6706588a6 Mon Sep 17 00:00:00 2001 From: Mike Macgirvin Date: Tue, 25 Jun 2024 07:04:16 +1000 Subject: [PATCH 22/22] wrap main content in div --- include/bbcode.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/bbcode.php b/include/bbcode.php index 75c936d57..34fe85097 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -849,7 +849,7 @@ function bb_summary($match) { // return $match[1] . $match[2] . EOL . EOL . $match[3]; - return $match[1] . '
' .$match[2] . '' . EOL. EOL . $match[3] . '
'; + return $match[1] . '
' .$match[2] . '' . '
' . $match[3] . '
'; }