BuddyPress - Version 2.1.2

Version Description

See: http://codex.buddypress.org/releases/version-2-1-2/

Download this release

Release Info

Developer boonebgorges
Plugin Icon 128x128 BuddyPress
Version 2.1.2
Comparing to
See all releases

Code changes from version 2.0.4 to 2.1.2

Files changed (333) hide show
  1. .travis.yml +0 -48
  2. bp-activity/admin/css/admin-rtl.css +80 -0
  3. bp-activity/admin/css/admin-rtl.min.css +1 -0
  4. bp-activity/admin/css/admin.css +1 -1
  5. bp-activity/admin/css/admin.min.css +1 -1
  6. bp-activity/admin/js/admin.js +9 -8
  7. bp-activity/admin/js/admin.min.js +2 -1
  8. bp-activity/bp-activity-actions.php +27 -2
  9. bp-activity/bp-activity-admin.php +45 -19
  10. bp-activity/bp-activity-classes.php +99 -20
  11. bp-activity/bp-activity-cssjs.php +48 -0
  12. bp-activity/bp-activity-filters.php +9 -2
  13. bp-activity/bp-activity-functions.php +382 -279
  14. bp-activity/bp-activity-loader.php +16 -15
  15. bp-activity/bp-activity-screens.php +2 -2
  16. bp-activity/bp-activity-template.php +504 -147
  17. bp-activity/css/mentions-rtl.css +80 -0
  18. bp-activity/css/mentions-rtl.min.css +1 -0
  19. bp-activity/css/mentions.css +80 -0
  20. bp-activity/css/mentions.min.css +1 -0
  21. bp-activity/js/mentions.js +204 -0
  22. bp-activity/js/mentions.min.js +2 -0
  23. bp-blogs/bp-blogs-activity.php +114 -40
  24. bp-blogs/bp-blogs-buddybar.php +0 -78
  25. bp-blogs/bp-blogs-classes.php +13 -9
  26. bp-blogs/bp-blogs-filters.php +16 -0
  27. bp-blogs/bp-blogs-functions.php +233 -54
  28. bp-blogs/bp-blogs-loader.php +18 -13
  29. bp-blogs/bp-blogs-screens.php +2 -2
  30. bp-blogs/bp-blogs-template.php +151 -117
  31. bp-core/admin/bp-core-functions.php +42 -26
  32. bp-core/admin/bp-core-schema.php +211 -122
  33. bp-core/admin/bp-core-settings.php +0 -29
  34. bp-core/admin/bp-core-tools.php +42 -1
  35. bp-core/admin/css/common-rtl.css +432 -0
  36. bp-core/admin/css/common-rtl.min.css +1 -0
  37. bp-core/admin/css/common.css +33 -34
  38. bp-core/admin/css/common.min.css +1 -1
  39. bp-core/admin/images/icons32.png +0 -0
  40. bp-core/admin/images/icons64.png +0 -0
  41. bp-core/admin/images/mentions.gif +0 -0
  42. bp-core/admin/images/menu-2x.png +0 -0
  43. bp-core/admin/images/menu-wp.png +0 -0
  44. bp-core/admin/images/menu.png +0 -0
  45. bp-core/bp-core-actions.php +1 -0
  46. bp-core/bp-core-admin.php +221 -147
  47. bp-core/bp-core-adminbar.php +32 -13
  48. bp-core/bp-core-avatars.php +16 -3
  49. bp-core/bp-core-buddybar.php +88 -221
  50. bp-core/bp-core-caps.php +27 -0
  51. bp-core/bp-core-catchuri.php +38 -19
  52. bp-core/bp-core-classes.php +335 -49
  53. bp-core/bp-core-component.php +38 -27
  54. bp-core/bp-core-cssjs.php +126 -17
  55. bp-core/bp-core-dependency.php +7 -0
  56. bp-core/bp-core-filters.php +58 -7
  57. bp-core/bp-core-functions.php +213 -65
  58. bp-core/bp-core-loader.php +3 -3
  59. bp-core/bp-core-options.php +23 -14
  60. bp-core/bp-core-template-loader.php +8 -8
  61. bp-core/bp-core-template.php +522 -478
  62. bp-core/bp-core-theme-compatibility.php +3 -0
  63. bp-core/bp-core-update.php +5 -9
  64. bp-core/bp-core-widgets.php +4 -5
  65. bp-core/css/admin-bar-rtl.css +49 -18
  66. bp-core/css/admin-bar-rtl.min.css +1 -1
  67. bp-core/css/admin-bar.css +1 -1
  68. bp-core/css/admin-bar.min.css +1 -1
  69. bp-core/css/buddybar-rtl.css +141 -15
  70. bp-core/css/buddybar-rtl.min.css +1 -1
  71. bp-core/css/buddybar.css +4 -4
  72. bp-core/css/buddybar.min.css +1 -1
  73. bp-members/bp-members-notifications.php → bp-core/deprecated/1.9.php +40 -43
  74. bp-core/deprecated/2.1.php +636 -0
  75. bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.css +80 -0
  76. bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.min.css +1 -0
  77. {bp-messages → bp-core/deprecated}/css/autocomplete/jquery.autocompletefb.css +0 -5
  78. bp-core/deprecated/css/autocomplete/jquery.autocompletefb.min.css +1 -0
  79. {bp-messages → bp-core/deprecated}/js/autocomplete/jquery.autocomplete.js +0 -0
  80. bp-core/deprecated/js/autocomplete/jquery.autocomplete.min.js +2 -0
  81. {bp-messages → bp-core/deprecated}/js/autocomplete/jquery.autocompletefb.js +0 -0
  82. bp-core/deprecated/js/autocomplete/jquery.autocompletefb.min.js +2 -0
  83. {bp-messages → bp-core/deprecated}/js/autocomplete/jquery.bgiframe.js +0 -0
  84. bp-core/deprecated/js/autocomplete/jquery.bgiframe.min.js +2 -0
  85. {bp-messages → bp-core/deprecated}/js/autocomplete/jquery.dimensions.js +0 -0
  86. bp-core/deprecated/js/autocomplete/jquery.dimensions.min.js +2 -0
  87. {bp-messages → bp-core/deprecated}/js/autocomplete/license.bgiframe.txt +0 -0
  88. bp-core/deprecated/js/jquery-scroll-to.js +208 -0
  89. bp-core/deprecated/js/jquery-scroll-to.min.js +2 -0
  90. bp-core/images/60pc_black.png +0 -0
  91. bp-core/images/Jcrop.gif +0 -0
  92. bp-core/images/admin-menu-arrow.gif +0 -0
  93. bp-core/images/bp20/admin-xprofile.jpg +0 -0
  94. bp-core/images/bp20/load-newest.jpg +0 -0
  95. bp-core/images/bp20/performance.png +0 -0
  96. bp-core/images/bp20/tools-buddypress.jpg +0 -0
  97. bp-core/images/bp20/user-mark-spam.jpg +0 -0
  98. bp-core/images/bp20/users-pending.jpg +0 -0
  99. bp-core/images/mystery-man-50.jpg +0 -0
  100. bp-core/images/mystery-man.jpg +0 -0
  101. bp-core/js/confirm.js +8 -3
  102. bp-core/js/confirm.min.js +2 -1
  103. bp-core/js/jquery-cookie.js +120 -0
  104. bp-core/js/jquery-cookie.min.js +2 -0
  105. bp-core/js/jquery-query.js +6 -0
  106. bp-core/js/jquery-query.min.js +2 -0
  107. bp-core/js/jquery.atwho.js +824 -0
  108. bp-core/js/jquery.atwho.min.js +2 -0
  109. bp-core/js/jquery.atwho.txt +22 -0
  110. bp-core/js/jquery.caret.js +366 -0
  111. bp-core/js/jquery.caret.min.js +2 -0
  112. bp-core/js/jquery.caret.txt +22 -0
  113. bp-core/js/widget-members.js +11 -11
  114. bp-core/js/widget-members.min.js +2 -1
  115. bp-forums/bp-forums-screens.php +1 -1
  116. bp-forums/bp-forums-template.php +2 -2
  117. bp-friends/bp-friends-activity.php +6 -2
  118. bp-friends/bp-friends-classes.php +17 -11
  119. bp-friends/bp-friends-filters.php +8 -1
  120. bp-friends/bp-friends-functions.php +54 -1
  121. bp-friends/bp-friends-loader.php +9 -9
  122. bp-friends/bp-friends-screens.php +3 -3
  123. bp-friends/bp-friends-template.php +4 -9
  124. bp-friends/bp-friends-widgets.php +7 -0
  125. bp-friends/js/widget-friends.js +12 -12
  126. bp-friends/js/widget-friends.min.js +2 -1
  127. bp-groups/admin/css/admin-rtl.css +86 -0
  128. bp-groups/admin/css/admin-rtl.min.css +1 -0
  129. bp-groups/admin/css/admin.css +33 -3
  130. bp-groups/admin/css/admin.min.css +1 -1
  131. bp-groups/admin/js/admin.js +24 -12
  132. bp-groups/admin/js/admin.min.js +2 -1
  133. bp-groups/bp-groups-actions.php +86 -2
  134. bp-groups/bp-groups-activity.php +40 -11
  135. bp-groups/bp-groups-admin.php +116 -107
  136. bp-groups/bp-groups-adminbar.php +5 -2
  137. bp-groups/bp-groups-buddybar.php +0 -67
  138. bp-groups/bp-groups-cache.php +29 -0
  139. bp-groups/bp-groups-classes.php +572 -68
  140. bp-groups/bp-groups-filters.php +81 -27
  141. bp-groups/bp-groups-forums.php +228 -207
  142. bp-groups/bp-groups-functions.php +360 -57
  143. bp-groups/bp-groups-loader.php +129 -122
  144. bp-groups/bp-groups-notifications.php +153 -82
  145. bp-groups/bp-groups-screens.php +103 -64
  146. bp-groups/bp-groups-template.php +926 -229
  147. bp-groups/bp-groups-widgets.php +11 -2
  148. bp-groups/js/widget-groups.js +11 -11
  149. bp-groups/js/widget-groups.min.js +2 -1
  150. bp-languages/buddypress.pot +0 -7212
  151. bp-loader.php +33 -34
  152. bp-members/admin/bp-members-classes.php +78 -56
  153. bp-members/admin/css/admin-rtl.css +160 -0
  154. bp-members/admin/css/admin-rtl.min.css +1 -0
  155. bp-members/admin/css/admin.css +21 -40
  156. bp-members/admin/css/admin.min.css +1 -1
  157. bp-members/admin/js/admin.js +3 -1
  158. bp-members/admin/js/admin.min.js +2 -1
  159. bp-members/bp-members-actions.php +9 -8
  160. bp-members/bp-members-admin.php +628 -255
  161. bp-members/bp-members-adminbar.php +11 -12
  162. bp-members/bp-members-buddybar.php +0 -116
  163. bp-members/bp-members-classes.php +9 -10
  164. bp-members/bp-members-filters.php +50 -12
  165. bp-members/bp-members-functions.php +380 -211
  166. bp-members/bp-members-loader.php +111 -75
  167. bp-members/bp-members-screens.php +48 -52
  168. bp-members/bp-members-template.php +755 -181
  169. bp-messages/bp-messages-actions.php +36 -10
  170. bp-messages/bp-messages-cache.php +5 -6
  171. bp-messages/bp-messages-classes.php +110 -10
  172. bp-messages/bp-messages-cssjs.php +19 -13
  173. bp-messages/bp-messages-filters.php +0 -1
  174. bp-messages/bp-messages-functions.php +172 -51
  175. bp-messages/bp-messages-loader.php +28 -8
  176. bp-messages/bp-messages-notifications.php +43 -25
  177. bp-messages/bp-messages-screens.php +42 -12
  178. bp-messages/bp-messages-template.php +914 -179
  179. bp-messages/bp-messages-widgets.php +1 -1
  180. bp-messages/css/autocomplete/jquery.autocompletefb.min.css +0 -1
  181. bp-messages/js/autocomplete/jquery.autocomplete.min.js +0 -13
  182. bp-messages/js/autocomplete/jquery.autocompletefb.min.js +0 -16
  183. bp-messages/js/autocomplete/jquery.bgiframe.min.js +0 -6
  184. bp-messages/js/autocomplete/jquery.dimensions.min.js +0 -13
  185. bp-notifications/bp-notifications-actions.php +3 -3
  186. bp-notifications/bp-notifications-buddybar.php +0 -57
  187. bp-notifications/bp-notifications-classes.php +22 -4
  188. bp-notifications/bp-notifications-functions.php +46 -39
  189. bp-notifications/bp-notifications-loader.php +10 -14
  190. bp-notifications/bp-notifications-template.php +185 -87
  191. bp-settings/bp-settings-actions.php +115 -5
  192. bp-settings/bp-settings-functions.php +3 -3
  193. bp-settings/bp-settings-loader.php +1 -1
  194. bp-settings/bp-settings-template.php +26 -0
  195. bp-templates/bp-legacy/buddypress-functions.php +60 -77
  196. bp-templates/bp-legacy/buddypress/activity/activity-loop.php +1 -9
  197. bp-templates/bp-legacy/buddypress/activity/entry.php +3 -3
  198. bp-templates/bp-legacy/buddypress/activity/index.php +2 -30
  199. bp-templates/bp-legacy/buddypress/activity/post-form.php +4 -4
  200. bp-templates/bp-legacy/buddypress/groups/create.php +28 -25
  201. bp-templates/bp-legacy/buddypress/groups/single/activity.php +3 -9
  202. bp-templates/bp-legacy/buddypress/groups/single/admin.php +6 -6
  203. bp-templates/bp-legacy/buddypress/groups/single/home.php +23 -32
  204. bp-templates/bp-legacy/buddypress/members/register.php +7 -6
  205. bp-templates/bp-legacy/buddypress/members/single/activity.php +3 -34
  206. bp-templates/bp-legacy/buddypress/members/single/groups/invites.php +1 -1
  207. bp-templates/bp-legacy/buddypress/members/single/messages/single.php +1 -1
  208. bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php +8 -8
  209. bp-templates/bp-legacy/buddypress/members/single/profile/edit.php +6 -4
  210. bp-templates/bp-legacy/buddypress/members/single/settings/general.php +3 -2
  211. bp-templates/bp-legacy/buddypress/members/single/settings/profile.php +1 -1
  212. bp-templates/bp-legacy/css/buddypress-rtl.css +141 -29
  213. bp-templates/bp-legacy/css/buddypress-rtl.min.css +1 -0
  214. bp-templates/bp-legacy/css/buddypress.css +36 -4
  215. bp-templates/bp-legacy/css/buddypress.min.css +1 -0
  216. bp-templates/bp-legacy/js/buddypress.js +507 -417
  217. bp-templates/bp-legacy/js/buddypress.min.js +2 -0
  218. bp-templates/bp-legacy/js/password-verify.js +43 -0
  219. bp-templates/bp-legacy/js/password-verify.min.js +2 -0
  220. bp-themes/bp-default/.jshintrc +25 -0
  221. bp-themes/bp-default/_inc/ajax.php +1 -1
  222. bp-themes/bp-default/_inc/global.js +45 -51
  223. bp-themes/bp-default/_inc/images/45pc_black.png +0 -0
  224. bp-themes/bp-default/_inc/images/60pc_black.png +0 -0
  225. bp-themes/bp-default/_inc/images/activity_arrow.gif +0 -0
  226. bp-themes/bp-default/_inc/images/admin-menu-arrow.gif +0 -0
  227. bp-themes/bp-default/_inc/images/ajax-loader.gif +0 -0
  228. bp-themes/bp-default/_inc/images/background.gif +0 -0
  229. bp-themes/bp-default/_inc/images/closed.png +0 -0
  230. bp-themes/bp-default/_inc/images/default_header.jpg +0 -0
  231. bp-themes/bp-default/_inc/images/item_back.gif +0 -0
  232. bp-themes/bp-default/_inc/images/replyto_arrow.gif +0 -0
  233. bp-themes/bp-default/_inc/images/rss.png +0 -0
  234. bp-themes/bp-default/_inc/images/sidebar_back.gif +0 -0
  235. bp-themes/bp-default/_inc/images/white-grad.png +0 -0
  236. bp-themes/bp-default/activity/entry.php +1 -1
  237. bp-themes/bp-default/activity/index.php +1 -1
  238. bp-themes/bp-default/activity/post-form.php +1 -1
  239. bp-themes/bp-default/functions.php +35 -1
  240. bp-themes/bp-default/groups/single/activity.php +1 -1
  241. bp-themes/bp-default/groups/single/admin.php +1 -1
  242. bp-themes/bp-default/groups/single/forum/topic.php +1 -1
  243. bp-themes/bp-default/members/single/activity.php +1 -1
  244. bp-themes/bp-default/members/single/profile/edit.php +7 -0
  245. bp-themes/bp-default/registration/register.php +7 -0
  246. bp-themes/bp-default/rtl.css +1 -1
  247. bp-themes/bp-default/screenshot.png +0 -0
  248. bp-themes/bp-default/style.css +1 -1
  249. bp-themes/index.php +0 -5
  250. bp-xprofile/admin/css/admin-rtl.css +251 -0
  251. bp-xprofile/admin/css/admin-rtl.min.css +1 -0
  252. bp-xprofile/admin/css/admin.css +72 -69
  253. bp-xprofile/admin/css/admin.min.css +1 -1
  254. bp-xprofile/admin/js/admin.js +85 -77
  255. bp-xprofile/admin/js/admin.min.js +2 -1
  256. bp-xprofile/bp-xprofile-actions.php +14 -3
  257. bp-xprofile/bp-xprofile-activity.php +91 -79
  258. bp-xprofile/bp-xprofile-admin.php +183 -136
  259. bp-xprofile/bp-xprofile-buddybar.php +0 -4
  260. bp-xprofile/bp-xprofile-classes.php +610 -248
  261. bp-xprofile/bp-xprofile-cssjs.php +23 -0
  262. bp-xprofile/bp-xprofile-filters.php +102 -41
  263. bp-xprofile/bp-xprofile-functions.php +305 -114
  264. bp-xprofile/bp-xprofile-loader.php +60 -34
  265. bp-xprofile/bp-xprofile-screens.php +12 -9
  266. bp-xprofile/bp-xprofile-template.php +86 -18
  267. buddypress.pot +3091 -2918
  268. readme.txt +26 -17
  269. tests/assets/group-extensions.php +0 -148
  270. tests/bootstrap.php +0 -19
  271. tests/includes/define-constants.php +0 -43
  272. tests/includes/factory.php +0 -181
  273. tests/includes/install.php +0 -47
  274. tests/includes/loader.php +0 -9
  275. tests/includes/testcase.php +0 -441
  276. tests/multisite.xml +0 -17
  277. tests/phpunit.xml.dist +0 -14
  278. tests/testcases/activity/cache.php +0 -56
  279. tests/testcases/activity/class.BP_Activity_Activity.php +0 -633
  280. tests/testcases/activity/filters.php +0 -60
  281. tests/testcases/activity/functions.php +0 -745
  282. tests/testcases/activity/notifications.php +0 -252
  283. tests/testcases/activity/template.php +0 -310
  284. tests/testcases/admin/functions.php +0 -123
  285. tests/testcases/blogs/activity.php +0 -293
  286. tests/testcases/blogs/cache.php +0 -234
  287. tests/testcases/blogs/class-bp-blogs-blog.php +0 -67
  288. tests/testcases/blogs/functions.php +0 -407
  289. tests/testcases/core/avatars.php +0 -82
  290. tests/testcases/core/cache.php +0 -30
  291. tests/testcases/core/class-bp-core-user.php +0 -216
  292. tests/testcases/core/class-bp-user-query.php +0 -319
  293. tests/testcases/core/functions.php +0 -333
  294. tests/testcases/friends/activity.php +0 -52
  295. tests/testcases/friends/class-bp-friends-friendship.php +0 -118
  296. tests/testcases/friends/functions.php +0 -138
  297. tests/testcases/groups/activity.php +0 -51
  298. tests/testcases/groups/avatars.php +0 -33
  299. tests/testcases/groups/cache.php +0 -157
  300. tests/testcases/groups/class-bp-group-extension.php +0 -225
  301. tests/testcases/groups/class-bp-group-member-query.php +0 -609
  302. tests/testcases/groups/class-bp-groups-group.php +0 -903
  303. tests/testcases/groups/class-bp-groups-member.php +0 -131
  304. tests/testcases/groups/functions.php +0 -631
  305. tests/testcases/groups/notifications.php +0 -64
  306. tests/testcases/groups/template.php +0 -692
  307. tests/testcases/members/class-bp-signup.php +0 -213
  308. tests/testcases/members/functions.php +0 -356
  309. tests/testcases/members/template.php +0 -144
  310. tests/testcases/messages/class.bp-messages-notice.php +0 -53
  311. tests/testcases/messages/functions.php +0 -44
  312. tests/testcases/messages/notifications.php +0 -45
  313. tests/testcases/notifications/class-bp-notifications-notification.php +0 -249
  314. tests/testcases/notifications/functions.php +0 -123
  315. tests/testcases/routing/activity.php +0 -68
  316. tests/testcases/routing/anonymous.php +0 -29
  317. tests/testcases/routing/core.php +0 -31
  318. tests/testcases/routing/friends.php +0 -30
  319. tests/testcases/routing/groups.php +0 -30
  320. tests/testcases/routing/members.php +0 -30
  321. tests/testcases/routing/messages.php +0 -40
  322. tests/testcases/routing/root-profiles.php +0 -55
  323. tests/testcases/routing/settings.php +0 -40
  324. tests/testcases/routing/xprofile.php +0 -35
  325. tests/testcases/url/url.php +0 -64
  326. tests/testcases/xprofile/activity.php +0 -372
  327. tests/testcases/xprofile/cache.php +0 -150
  328. tests/testcases/xprofile/class-bp-xprofile-field-type.php +0 -172
  329. tests/testcases/xprofile/class-bp-xprofile-field.php +0 -29
  330. tests/testcases/xprofile/class-bp-xprofile-group.php +0 -70
  331. tests/testcases/xprofile/class-bp-xprofile-profiledata.php +0 -435
  332. tests/testcases/xprofile/filters.php +0 -57
  333. tests/testcases/xprofile/functions.php +0 -571
.travis.yml DELETED
@@ -1,48 +0,0 @@
1
- language: php
2
-
3
- php:
4
- - 5.2
5
- - 5.3
6
- - 5.4
7
- - 5.5
8
-
9
- env:
10
- - WP_VERSION=trunk WP_MULTISITE=0
11
- - WP_VERSION=tags/3.8.1 WP_MULTISITE=0
12
- - WP_VERSION=tags/3.7.1 WP_MULTISITE=0
13
- - WP_VERSION=trunk WP_MULTISITE=1
14
- - WP_VERSION=tags/3.8.1 WP_MULTISITE=1
15
- - WP_VERSION=tags/3.7.1 WP_MULTISITE=1
16
-
17
- before_script:
18
- # set up WP install
19
- - WP_CORE_DIR=/tmp/wordpress/
20
- - mkdir -p $WP_CORE_DIR
21
- - svn co --ignore-externals https://develop.svn.wordpress.org/$WP_VERSION $WP_CORE_DIR
22
- - plugin_slug=$(basename $(pwd))
23
- - plugin_dir=$WP_CORE_DIR/src/wp-content/plugins/$plugin_slug
24
- - cd ..
25
- - mv $plugin_slug $plugin_dir
26
- # set up tests config
27
- - cd $WP_CORE_DIR
28
- - cp wp-tests-config-sample.php wp-tests-config.php
29
- - sed -i "s/youremptytestdbnamehere/wordpress_test/" wp-tests-config.php
30
- - sed -i "s/yourusernamehere/root/" wp-tests-config.php
31
- - sed -i "s/yourpasswordhere//" wp-tests-config.php
32
- # disable WP_DEBUG for PHP 5.5 due to ext/mysqli E_DEPRECATED errors
33
- - if [[ "$TRAVIS_PHP_VERSION" == 5.5* ]] ; then sed -i "s:define( 'WP_DEBUG://define( 'WP_DEBUG:" wp-tests-config.php; fi;
34
- # set up database
35
- - mysql -e 'CREATE DATABASE wordpress_test;' -uroot
36
- # prepare for running the tests
37
- - cd $plugin_dir/tests
38
-
39
- script: phpunit
40
-
41
- notifications:
42
- email: false
43
-
44
- irc:
45
- channels:
46
- - "irc.freenode.net#buddypress-dev"
47
- template:
48
- - "Build %{build_number} (%{branch} - %{commit}): %{message} %{build_url}"
bp-activity/admin/css/admin-rtl.css ADDED
@@ -0,0 +1,80 @@
1
+ .akismet-status {
2
+ float: left;
3
+ }
4
+ .akismet-status a {
5
+ color: #AAA;
6
+ font-style: italic;
7
+ }
8
+ .akismet-history {
9
+ margin: 13px;
10
+ }
11
+ .akismet-history div {
12
+ margin-bottom: 13px;
13
+ }
14
+ .akismet-history span {
15
+ color: #999;
16
+ }
17
+
18
+ #wp-bp-activities-wrap {
19
+ padding: 5px 0;
20
+ }
21
+ #bp-activities {
22
+ height: 120px;
23
+ }
24
+ #bp-replyhead {
25
+ font-size: 1em;
26
+ line-height: 1.4em;
27
+ margin: 0;
28
+ }
29
+ #bp-replysubmit {
30
+ margin: 0;
31
+ padding: 0 0 3px;
32
+ text-align: center;
33
+ }
34
+ #bp-replysubmit .error {
35
+ color: red;
36
+ line-height: 21px;
37
+ text-align: center;
38
+ vertical-align: center;
39
+ }
40
+ #bp-replysubmit img.waiting {
41
+ float: left;
42
+ padding: 4px 10px 0;
43
+ vertical-align: top;
44
+ }
45
+ #bp-activities-form .column-response img {
46
+ float: right;
47
+ margin-left: 10px;
48
+ margin-top: 1px;
49
+ }
50
+ .activity-errors {
51
+ list-style-type: disc;
52
+ margin-right: 2em;
53
+ }
54
+
55
+ #bp_activity_action div.inside,
56
+ #bp_activity_content div.inside {
57
+ line-height: 0;
58
+ }
59
+ #bp_activity_action h3,
60
+ #bp_activity_content h3 {
61
+ cursor: auto;
62
+ }
63
+ #bp_activity_action td.mceIframeContainer,
64
+ #bp_activity_content td.mceIframeContainer {
65
+ background-color: white;
66
+ }
67
+ #post-body #bp-activities-action_resize,
68
+ #post-body #bp-activities-content_resize {
69
+ position: inherit;
70
+ margin-top: -2px;
71
+ }
72
+ #bp_activity_link input {
73
+ width: 99%;
74
+ }
75
+ #bp-activities-primaryid {
76
+ margin-bottom: 1em;
77
+ }
78
+ .column-action {
79
+ width: 12%;
80
+ }
bp-activity/admin/css/admin-rtl.min.css ADDED
@@ -0,0 +1 @@
1
+ .akismet-status{float:left}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:left;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:right;margin-left:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-right:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:#fff}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
bp-activity/admin/css/admin.css CHANGED
@@ -77,4 +77,4 @@
77
}
78
.column-action {
79
width: 12%;
80
- }
77
}
78
.column-action {
79
width: 12%;
80
+ }
bp-activity/admin/css/admin.min.css CHANGED
@@ -1 +1 @@
1
- .akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:right;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:left;margin-right:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-left:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:white}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
1
+ .akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:right;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:left;margin-right:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-left:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:#fff}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
bp-activity/admin/js/admin.js CHANGED
@@ -1,3 +1,4 @@
1
(function( $ ) {
2
3
/**
@@ -19,7 +20,7 @@ var activityReply = {
19
20
// Close textarea on escape
21
$(document).on( 'keyup', '#bp-activities:visible', function( e ) {
22
- if ( 27 == e.which ) {
23
activityReply.close();
24
}
25
});
@@ -30,7 +31,7 @@ var activityReply = {
30
*
31
* @since BuddyPress (1.6)
32
*/
33
- open : function( e ) {
34
// Hide the container row, and move it to the new location
35
var box = $( '#bp-activities-container' ).hide();
36
$( this ).parents( 'tr' ).after( box );
@@ -47,9 +48,9 @@ var activityReply = {
47
*
48
* @since BuddyPress (1.6)
49
*/
50
- close : function( e ) {
51
// Hide the container row
52
- $('#bp-activities-container').fadeOut( '200', function () {
53
54
// Empty and unfocus the text area
55
$( '#bp-activities' ).val( '' ).blur();
@@ -67,7 +68,7 @@ var activityReply = {
67
*
68
* @since BuddyPress (1.6)
69
*/
70
- send : function( e ) {
71
// Hide any existing error message, and show the loading spinner
72
$( '#bp-replysubmit .error' ).hide();
73
$( '#bp-replysubmit .waiting' ).show();
@@ -123,7 +124,7 @@ var activityReply = {
123
var bg, id, response;
124
125
// Handle any errors in the response
126
- if ( typeof( xml ) == 'string' ) {
127
activityReply.error( { 'responseText': xml } );
128
return false;
129
}
@@ -136,7 +137,7 @@ var activityReply = {
136
response = response.responses[0];
137
138
// Close and reset the reply row, and add the new Activity item into the list.
139
- $('#bp-activities-container').fadeOut( '200', function () {
140
141
// Empty and unfocus the text area
142
$( '#bp-activities' ).val( '' ).blur();
@@ -169,4 +170,4 @@ $(document).ready( function () {
169
postboxes.add_postbox_toggles( bp_activity_admin_vars.page );
170
});
171
172
- })(jQuery);
1
+ /* global bp_activity_admin_vars, postboxes, wpAjax */
2
(function( $ ) {
3
4
/**
20
21
// Close textarea on escape
22
$(document).on( 'keyup', '#bp-activities:visible', function( e ) {
23
+ if ( 27 === e.which ) {
24
activityReply.close();
25
}
26
});
31
*
32
* @since BuddyPress (1.6)
33
*/
34
+ open : function() {
35
// Hide the container row, and move it to the new location
36
var box = $( '#bp-activities-container' ).hide();
37
$( this ).parents( 'tr' ).after( box );
48
*
49
* @since BuddyPress (1.6)
50
*/
51
+ close : function() {
52
// Hide the container row
53
+ $('#bp-activities-container').fadeOut( '200', function () {
54
55
// Empty and unfocus the text area
56
$( '#bp-activities' ).val( '' ).blur();
68
*
69
* @since BuddyPress (1.6)
70
*/
71
+ send : function() {
72
// Hide any existing error message, and show the loading spinner
73
$( '#bp-replysubmit .error' ).hide();
74
$( '#bp-replysubmit .waiting' ).show();
124
var bg, id, response;
125
126
// Handle any errors in the response
127
+ if ( typeof( xml ) === 'string' ) {
128
activityReply.error( { 'responseText': xml } );
129
return false;
130
}
137
response = response.responses[0];
138
139
// Close and reset the reply row, and add the new Activity item into the list.
140
+ $('#bp-activities-container').fadeOut( '200', function () {
141
142
// Empty and unfocus the text area
143
$( '#bp-activities' ).val( '' ).blur();
170
postboxes.add_postbox_toggles( bp_activity_admin_vars.page );
171
});
172
173
+ })(jQuery);
bp-activity/admin/js/admin.min.js CHANGED
@@ -1 +1,2 @@
1
- (function(b){var a={init:function(){b(document).on("click",".row-actions a.reply",a.open);b(document).on("click","#bp-activities-container a.cancel",a.close);b(document).on("click","#bp-activities-container a.save",a.send);b(document).on("keyup","#bp-activities:visible",function(c){if(27==c.which){a.close()}})},open:function(d){var c=b("#bp-activities-container").hide();b(this).parents("tr").after(c);c.fadeIn("300");b("#bp-activities").focus();return false},close:function(c){b("#bp-activities-container").fadeOut("200",function(){b("#bp-activities").val("").blur();b("#bp-replysubmit .error").html("").hide();b("#bp-replysubmit .waiting").hide()});return false},send:function(d){b("#bp-replysubmit .error").hide();b("#bp-replysubmit .waiting").show();var c={};c["_ajax_nonce-bp-activity-admin-reply"]=b('#bp-activities-container input[name="_ajax_nonce-bp-activity-admin-reply"]').val();c.action="bp-activity-admin-reply";c.content=b("#bp-activities").val();c.parent_id=b("#bp-activities-container").prev().data("parent_id");c.root_id=b("#bp-activities-container").prev().data("root_id");b.ajax({data:c,type:"POST",url:ajaxurl,error:function(e){a.error(e)},success:function(e){a.show(e)}});return false},error:function(c){var d=c.statusText;b("#bp-replysubmit .waiting").hide();if(c.responseText){d=c.responseText.replace(/<.[^<>]*?>/g,"")}if(d){b("#bp-replysubmit .error").html(d).show()}},show:function(d){var e,f,c;if(typeof(d)=="string"){a.error({responseText:d});return false}c=wpAjax.parseAjaxResponse(d);if(c.errors){a.error({responseText:wpAjax.broken});return false}c=c.responses[0];b("#bp-activities-container").fadeOut("200",function(){b("#bp-activities").val("").blur();b("#bp-replysubmit .error").html("").hide();b("#bp-replysubmit .waiting").hide();b("#bp-activities-container").before(c.data);f=b("#activity-"+c.id);e=f.closest(".widefat").css("backgroundColor");f.animate({backgroundColor:"#CEB"},300).animate({backgroundColor:e},300)})}};b(document).ready(function(){a.init();b("#bp_activity_action h3, #bp_activity_content h3").unbind("click");postboxes.add_postbox_toggles(bp_activity_admin_vars.page)})})(jQuery);
1
+ /*! buddypress - v2.1.2 - 2015-11-11 4:43:05 AM UTC - https://wordpress.org/plugins/buddypress/ */
2
+ !function(a){var b={init:function(){a(document).on("click",".row-actions a.reply",b.open),a(document).on("click","#bp-activities-container a.cancel",b.close),a(document).on("click","#bp-activities-container a.save",b.send),a(document).on("keyup","#bp-activities:visible",function(a){27===a.which&&b.close()})},open:function(){var b=a("#bp-activities-container").hide();return a(this).parents("tr").after(b),b.fadeIn("300"),a("#bp-activities").focus(),!1},close:function(){return a("#bp-activities-container").fadeOut("200",function(){a("#bp-activities").val("").blur(),a("#bp-replysubmit .error").html("").hide(),a("#bp-replysubmit .waiting").hide()}),!1},send:function(){a("#bp-replysubmit .error").hide(),a("#bp-replysubmit .waiting").show();var c={};return c["_ajax_nonce-bp-activity-admin-reply"]=a('#bp-activities-container input[name="_ajax_nonce-bp-activity-admin-reply"]').val(),c.action="bp-activity-admin-reply",c.content=a("#bp-activities").val(),c.parent_id=a("#bp-activities-container").prev().data("parent_id"),c.root_id=a("#bp-activities-container").prev().data("root_id"),a.ajax({data:c,type:"POST",url:ajaxurl,error:function(a){b.error(a)},success:function(a){b.show(a)}}),!1},error:function(b){var c=b.statusText;a("#bp-replysubmit .waiting").hide(),b.responseText&&(c=b.responseText.replace(/<.[^<>]*?>/g,"")),c&&a("#bp-replysubmit .error").html(c).show()},show:function(c){var d,e,f;return"string"==typeof c?(b.error({responseText:c}),!1):(f=wpAjax.parseAjaxResponse(c),f.errors?(b.error({responseText:wpAjax.broken}),!1):(f=f.responses[0],void a("#bp-activities-container").fadeOut("200",function(){a("#bp-activities").val("").blur(),a("#bp-replysubmit .error").html("").hide(),a("#bp-replysubmit .waiting").hide(),a("#bp-activities-container").before(f.data),e=a("#activity-"+f.id),d=e.closest(".widefat").css("backgroundColor"),e.animate({backgroundColor:"#CEB"},300).animate({backgroundColor:d},300)})))}};a(document).ready(function(){b.init(),a("#bp_activity_action h3, #bp_activity_content h3").unbind("click"),postboxes.add_postbox_toggles(bp_activity_admin_vars.page)})}(jQuery);
bp-activity/bp-activity-actions.php CHANGED
@@ -437,7 +437,7 @@ function bp_activity_action_sitewide_feed() {
437
'id' => 'sitewide',
438
439
/* translators: Sitewide activity RSS title - "[Site Name] | Site Wide Activity" */
440
- 'title' => sprintf( __( '%s | Site Wide Activity', 'buddypress' ), bp_get_site_name() ),
441
442
'link' => bp_get_activity_directory_permalink(),
443
'description' => __( 'Activity feed for the entire site.', 'buddypress' ),
@@ -540,7 +540,7 @@ function bp_activity_action_my_groups_feed() {
540
'title' => sprintf( __( '%1$s | %2$s | Group Activity', 'buddypress' ), bp_get_site_name(), bp_get_displayed_user_fullname() ),
541
542
'link' => trailingslashit( bp_displayed_user_domain() . bp_get_activity_slug() . '/' . bp_get_groups_slug() ),
543
- 'description' => sprintf( __( "Public group activity feed of which %s is a member of.", 'buddypress' ), bp_get_displayed_user_fullname() ),
544
'activity_args' => array(
545
'object' => buddypress()->groups->id,
546
'primary_id' => $group_ids,
@@ -647,3 +647,28 @@ function bp_activity_setup_akismet() {
647
// Instantiate Akismet for BuddyPress
648
$bp->activity->akismet = new BP_Akismet();
649
}
437
'id' => 'sitewide',
438
439
/* translators: Sitewide activity RSS title - "[Site Name] | Site Wide Activity" */
440
+ 'title' => sprintf( __( '%s | Site-Wide Activity', 'buddypress' ), bp_get_site_name() ),
441
442
'link' => bp_get_activity_directory_permalink(),
443
'description' => __( 'Activity feed for the entire site.', 'buddypress' ),
540
'title' => sprintf( __( '%1$s | %2$s | Group Activity', 'buddypress' ), bp_get_site_name(), bp_get_displayed_user_fullname() ),
541
542
'link' => trailingslashit( bp_displayed_user_domain() . bp_get_activity_slug() . '/' . bp_get_groups_slug() ),
543
+ 'description' => sprintf( __( "Public group activity feed of which %s is a member.", 'buddypress' ), bp_get_displayed_user_fullname() ),
544
'activity_args' => array(
545
'object' => buddypress()->groups->id,
546
'primary_id' => $group_ids,
647
// Instantiate Akismet for BuddyPress
648
$bp->activity->akismet = new BP_Akismet();
649
}
650
+
651
+ /**
652
+ * AJAX endpoint for Suggestions API lookups.
653
+ *
654
+ * @since BuddyPress (2.1.0)
655
+ */
656
+ function bp_ajax_get_suggestions() {
657
+ if ( ! bp_is_user_active() || empty( $_GET['term'] ) || empty( $_GET['type'] ) ) {
658
+ wp_send_json_error( 'missing_parameter' );
659
+ exit;
660
+ }
661
+
662
+ $results = bp_core_get_suggestions( array(
663
+ 'term' => sanitize_text_field( $_GET['term'] ),
664
+ 'type' => sanitize_text_field( $_GET['type'] ),
665
+ ) );
666
+
667
+ if ( is_wp_error( $results ) ) {
668
+ wp_send_json_error( $results->get_error_message() );
669
+ exit;
670
+ }
671
+
672
+ wp_send_json_success( $results );
673
+ }
674
+ add_action( 'wp_ajax_bp_get_suggestions', 'bp_ajax_get_suggestions' );
bp-activity/bp-activity-admin.php CHANGED
@@ -29,8 +29,8 @@ function bp_activity_add_admin_menu() {
29
30
// Add our screen
31
$hook = add_menu_page(
32
- __( 'Activity', 'buddypress' ),
33
- __( 'Activity', 'buddypress' ),
34
'bp_moderate',
35
'bp-activity',
36
'bp_activity_admin',
@@ -220,7 +220,7 @@ function bp_activity_admin_load() {
220
'title' => __( 'Item, Link, Type', 'buddypress' ),
221
'content' =>
222
'<p>' . __( '<strong>Primary Item/Secondary Item</strong> - These identify the object that created the activity. For example, the fields could reference a comment left on a specific site. Some types of activity may only use one, or none, of these fields.', 'buddypress' ) . '</p>' .
223
- '<p>' . __( '<strong>Link</strong> - Activity generated by posts and comments, forum topics and replies, and some plugins, uses the link field for a permalink back to the content item. Some types of activity may not use this field, even if it has been set.', 'buddypress' ) . '</p>' .
224
'<p>' . __( '<strong>Type</strong> - Each distinct kind of activity has its own type. For example, <code>created_group</code> is used when a group is created and <code>joined_group</code> is used when a user joins a group.', 'buddypress' ) . '</p>' .
225
'<p>' . __( 'For information about when and how BuddyPress uses all of these settings, see the Managing Activity link in the panel to the side.', 'buddypress' ) . '</p>'
226
) );
@@ -284,6 +284,12 @@ function bp_activity_admin_load() {
284
) );
285
wp_enqueue_style( 'bp_activity_admin_css', $bp->plugin_url . "bp-activity/admin/css/admin.{$min}css", array(), bp_get_version() );
286
287
// Handle spam/un-spam/delete of activities
288
if ( !empty( $doaction ) && ! in_array( $doaction, array( '-1', 'edit', 'save', ) ) ) {
289
@@ -903,7 +909,7 @@ function bp_activity_admin_index() {
903
<?php if ( !empty( $_REQUEST['aid'] ) ) : ?>
904
<?php printf( __( 'Activity related to ID #%s', 'buddypress' ), number_format_i18n( (int) $_REQUEST['aid'] ) ); ?>
905
<?php else : ?>
906
- <?php _e( 'Activity', 'buddypress' ); ?>
907
<?php endif; ?>
908
909
<?php if ( !empty( $_REQUEST['s'] ) ) : ?>
@@ -1057,6 +1063,7 @@ class BP_Activity_List_Table extends WP_List_Table {
1057
'display_comments' => 'stream',
1058
'show_hidden' => true,
1059
'spam' => 'spam_only',
1060
) );
1061
$this->spam_count = $spams['total'];
1062
unset( $spams );
@@ -1072,6 +1079,7 @@ class BP_Activity_List_Table extends WP_List_Table {
1072
'show_hidden' => true,
1073
//'sort' => $sort,
1074
'spam' => $spam,
1075
) );
1076
1077
// If we're viewing a specific activity, flatten all activites into a single array.
@@ -1138,8 +1146,6 @@ class BP_Activity_List_Table extends WP_List_Table {
1138
* @since BuddyPress (1.6.0)
1139
*/
1140
function display() {
1141
- extract( $this->_args );
1142
-
1143
$this->display_tablenav( 'top' ); ?>
1144
1145
<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
@@ -1238,10 +1244,10 @@ class BP_Activity_List_Table extends WP_List_Table {
1238
function get_columns() {
1239
return array(
1240
'cb' => '<input name type="checkbox" />',
1241
- 'author' => __( 'Author', 'buddypress' ),
1242
- 'comment' => __( 'Activity', 'buddypress' ),
1243
- 'action' => __( 'Action', 'buddypress' ),
1244
- 'response' => __( 'In Response To', 'buddypress' ),
1245
);
1246
}
1247
@@ -1272,23 +1278,43 @@ class BP_Activity_List_Table extends WP_List_Table {
1272
* @param string $which 'top' or 'bottom'.
1273
*/
1274
function extra_tablenav( $which ) {
1275
- if ( 'bottom' == $which )
1276
return;
1277
1278
- $selected = !empty( $_REQUEST['activity_type'] ) ? $_REQUEST['activity_type'] : '';
1279
1280
- // Get all types of activities, and sort alphabetically.
1281
- $actions = bp_activity_get_types();
1282
- natsort( $actions );
1283
- ?>
1284
1285
<div class="alignleft actions">
1286
<select name="activity_type">
1287
- <option value="" <?php selected( !$selected ); ?>><?php _e( 'Show all activity types', 'buddypress' ); ?></option>
1288
1289
- <?php foreach ( $actions as $k => $v ) : ?>
1290
- <option value="<?php echo esc_attr( $k ); ?>" <?php selected( $k, $selected ); ?>><?php echo esc_html( $v ); ?></option>
1291
<?php endforeach; ?>
1292
</select>
1293
1294
<?php submit_button( __( 'Filter', 'buddypress' ), 'secondary', false, false, array( 'id' => 'post-query-submit' ) ); ?>
29
30
// Add our screen
31
$hook = add_menu_page(
32
+ _x( 'Activity', 'Admin Dashbord SWA page title', 'buddypress' ),
33
+ _x( 'Activity', 'Admin Dashbord SWA menu', 'buddypress' ),
34
'bp_moderate',
35
'bp-activity',
36
'bp_activity_admin',
220
'title' => __( 'Item, Link, Type', 'buddypress' ),
221
'content' =>
222
'<p>' . __( '<strong>Primary Item/Secondary Item</strong> - These identify the object that created the activity. For example, the fields could reference a comment left on a specific site. Some types of activity may only use one, or none, of these fields.', 'buddypress' ) . '</p>' .
223
+ '<p>' . __( '<strong>Link</strong> - Used by some types of activity (e.g blog posts and comments, and forum topics and replies) to store a link back to the original content.', 'buddypress' ) . '</p>' .
224
'<p>' . __( '<strong>Type</strong> - Each distinct kind of activity has its own type. For example, <code>created_group</code> is used when a group is created and <code>joined_group</code> is used when a user joins a group.', 'buddypress' ) . '</p>' .
225
'<p>' . __( 'For information about when and how BuddyPress uses all of these settings, see the Managing Activity link in the panel to the side.', 'buddypress' ) . '</p>'
226
) );
284
) );
285
wp_enqueue_style( 'bp_activity_admin_css', $bp->plugin_url . "bp-activity/admin/css/admin.{$min}css", array(), bp_get_version() );
286
287
+ wp_style_add_data( 'bp_activity_admin_css', 'rtl', true );
288
+ if ( $min ) {
289
+ wp_style_add_data( 'bp_activity_admin_css', 'suffix', $min );
290
+ }
291
+
292
+
293
// Handle spam/un-spam/delete of activities
294
if ( !empty( $doaction ) && ! in_array( $doaction, array( '-1', 'edit', 'save', ) ) ) {
295
909
<?php if ( !empty( $_REQUEST['aid'] ) ) : ?>
910
<?php printf( __( 'Activity related to ID #%s', 'buddypress' ), number_format_i18n( (int) $_REQUEST['aid'] ) ); ?>
911
<?php else : ?>
912
+ <?php _ex( 'Activity', 'Admin SWA page', 'buddypress' ); ?>
913
<?php endif; ?>
914
915
<?php if ( !empty( $_REQUEST['s'] ) ) : ?>
1063
'display_comments' => 'stream',
1064
'show_hidden' => true,
1065
'spam' => 'spam_only',
1066
+ 'count_total' => 'count_query',
1067
) );
1068
$this->spam_count = $spams['total'];
1069
unset( $spams );
1079
'show_hidden' => true,
1080
//'sort' => $sort,
1081
'spam' => $spam,
1082
+ 'count_total' => 'count_query',
1083
) );
1084
1085
// If we're viewing a specific activity, flatten all activites into a single array.
1146
* @since BuddyPress (1.6.0)
1147
*/
1148
function display() {
1149
$this->display_tablenav( 'top' ); ?>
1150
1151
<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
1244
function get_columns() {
1245
return array(
1246
'cb' => '<input name type="checkbox" />',
1247
+ 'author' => _x('Author', 'Admin SWA column header', 'buddypress' ),
1248
+ 'comment' => _x( 'Activity', 'Admin SWA column header', 'buddypress' ),
1249
+ 'action' => _x( 'Action', 'Admin SWA column header', 'buddypress' ),
1250
+ 'response' => _x( 'In Response To', 'Admin SWA column header', 'buddypress' ),
1251
);
1252
}
1253
1278
* @param string $which 'top' or 'bottom'.
1279
*/
1280
function extra_tablenav( $which ) {
1281
+
1282
+ // Bail on bottom table nav
1283
+ if ( 'bottom' === $which ) {
1284
return;
1285
+ }
1286
1287
+ // Is any filter currently selected?
1288
+ $selected = ( ! empty( $_REQUEST['activity_type'] ) ) ? $_REQUEST['activity_type'] : '';
1289
1290
+ // Get the actions
1291
+ $activity_actions = buddypress()->activity->actions; ?>
1292
1293
<div class="alignleft actions">
1294
<select name="activity_type">
1295
+ <option value="" <?php selected( ! $selected ); ?>><?php _e( 'View all actions', 'buddypress' ); ?></option>
1296
+
1297
+ <?php foreach ( $activity_actions as $component => $actions ) : ?>
1298
+
1299
+ <optgroup label="<?php echo ucfirst( $component ); ?>">
1300
+
1301
+ <?php foreach ( $actions as $action_key => $action_values ) : ?>
1302
+
1303
+ <?php
1304
+
1305
+ // Skip the incorrectly named pre-1.6 action
1306
+ if ( 'friends_register_activity_action' !== $action_key ) : ?>
1307
+
1308
+ <option value="<?php echo esc_attr( $action_key ); ?>" <?php selected( $action_key, $selected ); ?>><?php echo esc_html( $action_values[ 'value' ] ); ?></option>
1309
+
1310
+ <?php endif; ?>
1311
+
1312
+ <?php endforeach; ?>
1313
+
1314
+ </optgroup>
1315
1316
<?php endforeach; ?>
1317
+
1318
</select>
1319
1320
<?php submit_button( __( 'Filter', 'buddypress' ), 'secondary', false, false, array( 'id' => 'post-query-submit' ) ); ?>
bp-activity/bp-activity-classes.php CHANGED
@@ -146,10 +146,10 @@ class BP_Activity_Activity {
146
}
147
148
if ( ! empty( $row ) ) {
149
- $this->id = $row->id;
150
- $this->item_id = $row->item_id;
151
- $this->secondary_item_id = $row->secondary_item_id;
152
- $this->user_id = $row->user_id;
153
$this->primary_link = $row->primary_link;
154
$this->component = $row->component;
155
$this->type = $row->type;
@@ -157,8 +157,8 @@ class BP_Activity_Activity {
157
$this->content = $row->content;
158
$this->date_recorded = $row->date_recorded;
159
$this->hide_sitewide = $row->hide_sitewide;
160
- $this->mptt_left = $row->mptt_left;
161
- $this->mptt_right = $row->mptt_right;
162
$this->is_spam = $row->is_spam;
163
}
164
@@ -257,6 +257,9 @@ class BP_Activity_Activity {
257
* Default: false.
258
* @type array $meta_query An array of meta_query conditions.
259
* See WP_Meta_Query::queries for description.
260
* @type array $filter See BP_Activity_Activity::get_filter_sql().
261
* @type string $search_terms Limit results by a search term.
262
* Default: false.
@@ -267,6 +270,9 @@ class BP_Activity_Activity {
267
* @type string $spam Spam status. Default: 'ham_only'.
268
* @type bool $update_meta_cache Whether to pre-fetch metadata for
269
* queried activity items. Default: true.
270
* }
271
* @return array The array returned has two keys:
272
* - 'total' is the count of located activities
@@ -305,12 +311,14 @@ class BP_Activity_Activity {
305
'exclude' => false, // Array of ids to exclude
306
'in' => false, // Array of ids to limit query by (IN)
307
'meta_query' => false, // Filter by activitymeta
308
'filter' => false, // See self::get_filter_sql()
309
'search_terms' => false, // Terms to search by
310
'display_comments' => false, // Whether to include activity comments
311
'show_hidden' => false, // Show items marked hide_sitewide
312
'spam' => 'ham_only', // Spam status
313
'update_meta_cache' => true,
314
);
315
$r = wp_parse_args( $args, $defaults );
316
extract( $r );
@@ -325,6 +333,9 @@ class BP_Activity_Activity {
325
// Where conditions
326
$where_conditions = array();
327
328
// Spam
329
if ( 'ham_only' == $spam )
330
$where_conditions['spam_sql'] = 'a.is_spam = 0';
@@ -333,8 +344,8 @@ class BP_Activity_Activity {
333
334
// Searching
335
if ( $search_terms ) {
336
- $search_terms = esc_sql( $search_terms );
337
- $where_conditions['search_sql'] = "a.content LIKE '%%" . esc_sql( like_escape( $search_terms ) ) . "%%'";
338
}
339
340
// Filtering
@@ -372,17 +383,35 @@ class BP_Activity_Activity {
372
$where_conditions[] = $meta_query_sql['where'];
373
}
374
375
// Alter the query based on whether we want to show activity item
376
// comments in the stream like normal comments or threaded below
377
// the activity.
378
if ( false === $display_comments || 'threaded' === $display_comments ) {
379
- $where_conditions[] = "a.type != 'activity_comment'";
380
}
381
382
// Exclude 'last_activity' items unless the 'action' filter has
383
// been explicitly set
384
if ( empty( $filter['object'] ) ) {
385
- $where_conditions[] = "a.type != 'last_activity'";
386
}
387
388
// Filter the where conditions
@@ -411,6 +440,12 @@ class BP_Activity_Activity {
411
$page = absint( $page );
412
$per_page = absint( $per_page );
413
414
// Filter and return true to use the legacy query structure (not recommended)
415
if ( apply_filters( 'bp_use_legacy_activity_query', false, __METHOD__, $r ) ) {
416
@@ -431,17 +466,25 @@ class BP_Activity_Activity {
431
$activity_ids_sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}";
432
433
if ( ! empty( $per_page ) && ! empty( $page ) ) {
434
- $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page );
435
}
436
437
$activity_ids_sql = apply_filters( 'bp_activity_paged_activities_sql', $activity_ids_sql, $r );
438
439
$activity_ids = $wpdb->get_col( $activity_ids_sql );
440
- $activities = self::get_activity_data( $activity_ids );
441
- }
442
443
- $total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
444
- $total_activities = $wpdb->get_var( $total_activities_sql );
445
446
// Get the fullnames of users so we don't have to query in the loop
447
$activities = self::append_user_fullnames( $activities );
@@ -465,13 +508,23 @@ class BP_Activity_Activity {
465
// Generate action strings
466
$activities = BP_Activity_Activity::generate_action_strings( $activities );
467
468
// If $max is set, only return up to the max results
469
- if ( !empty( $max ) ) {
470
- if ( (int) $total_activities > (int) $max )
471
- $total_activities = $max;
472
}
473
474
- return array( 'activities' => $activities, 'total' => (int) $total_activities );
475
}
476
477
/**
@@ -547,7 +600,6 @@ class BP_Activity_Activity {
547
* @return array
548
*/
549
protected static function append_user_fullnames( $activities ) {
550
- global $wpdb;
551
552
if ( bp_is_active( 'xprofile' ) && ! empty( $activities ) ) {
553
$activity_user_ids = wp_list_pluck( $activities, 'user_id' );
@@ -656,6 +708,33 @@ class BP_Activity_Activity {
656
return $sql_array;
657
}
658
659
/**
660
* In BuddyPress 1.2.x, this was used to retrieve specific activity stream items (for example, on an activity's permalink page).
661
*
146
}
147
148
if ( ! empty( $row ) ) {
149
+ $this->id = (int) $row->id;
150
+ $this->item_id = (int) $row->item_id;
151
+ $this->secondary_item_id = (int) $row->secondary_item_id;
152
+ $this->user_id = (int) $row->user_id;
153
$this->primary_link = $row->primary_link;
154
$this->component = $row->component;
155
$this->type = $row->type;
157
$this->content = $row->content;
158
$this->date_recorded = $row->date_recorded;
159
$this->hide_sitewide = $row->hide_sitewide;
160
+ $this->mptt_left = (int) $row->mptt_left;
161
+ $this->mptt_right = (int) $row->mptt_right;
162
$this->is_spam = $row->is_spam;
163
}
164
257
* Default: false.
258
* @type array $meta_query An array of meta_query conditions.
259
* See WP_Meta_Query::queries for description.
260
+ * @type array $date_query An array of date_query conditions.
261
+ * See first parameter of WP_Date_Query::__construct()
262
+ * for description.
263
* @type array $filter See BP_Activity_Activity::get_filter_sql().
264
* @type string $search_terms Limit results by a search term.
265
* Default: false.
270
* @type string $spam Spam status. Default: 'ham_only'.
271
* @type bool $update_meta_cache Whether to pre-fetch metadata for
272
* queried activity items. Default: true.
273
+ * @type string|bool $count_total If true, an additional DB query
274
+ * is run to count the total activity items for the query.
275
+ * Default: false.
276
* }
277
* @return array The array returned has two keys:
278
* - 'total' is the count of located activities
311
'exclude' => false, // Array of ids to exclude
312
'in' => false, // Array of ids to limit query by (IN)
313
'meta_query' => false, // Filter by activitymeta
314
+ 'date_query' => false, // Filter by date
315
'filter' => false, // See self::get_filter_sql()
316
'search_terms' => false, // Terms to search by
317
'display_comments' => false, // Whether to include activity comments
318
'show_hidden' => false, // Show items marked hide_sitewide
319
'spam' => 'ham_only', // Spam status
320
'update_meta_cache' => true,
321
+ 'count_total' => false,
322
);
323
$r = wp_parse_args( $args, $defaults );
324
extract( $r );
333
// Where conditions
334
$where_conditions = array();
335
336
+ // Excluded types
337
+ $excluded_types = array();
338
+
339
// Spam
340
if ( 'ham_only' == $spam )
341
$where_conditions['spam_sql'] = 'a.is_spam = 0';
344
345
// Searching
346
if ( $search_terms ) {
347
+ $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
348
+ $where_conditions['search_sql'] = $wpdb->prepare( 'a.content LIKE %s', $search_terms_like );
349
}
350
351
// Filtering
383
$where_conditions[] = $meta_query_sql['where'];
384
}
385
386
+ // Process date_query into SQL
387
+ $date_query_sql = self::get_date_query_sql( $date_query );
388
+
389
+ if ( ! empty( $date_query_sql ) ) {
390
+ $where_conditions['date'] = $date_query_sql;
391
+ }
392
+
393
// Alter the query based on whether we want to show activity item
394
// comments in the stream like normal comments or threaded below
395
// the activity.
396
if ( false === $display_comments || 'threaded' === $display_comments ) {
397
+ $excluded_types[] = 'activity_comment';
398
}
399
400
// Exclude 'last_activity' items unless the 'action' filter has
401
// been explicitly set
402
if ( empty( $filter['object'] ) ) {
403
+ $excluded_types[] = 'last_activity';
404
+ }
405
+
406
+ // Exclude 'new_member' items if xprofile component is not active
407
+ if ( ! bp_is_active( 'xprofile' ) ) {
408
+ $excluded_types[] = 'new_member';
409
+ }
410
+
411
+ // Build the excluded type sql part
412
+ if ( ! empty( $excluded_types ) ) {
413
+ $not_in = "'" . implode( "', '", esc_sql( $excluded_types ) ) . "'";
414
+ $where_conditions['excluded_types'] = "a.type NOT IN ({$not_in})";
415
}
416
417
// Filter the where conditions
440
$page = absint( $page );
441
$per_page = absint( $per_page );
442
443
+ $retval = array(
444
+ 'activities' => null,
445
+ 'total' => null,
446
+ 'has_more_items' => null,
447
+ );
448
+
449
// Filter and return true to use the legacy query structure (not recommended)
450
if ( apply_filters( 'bp_use_legacy_activity_query', false, __METHOD__, $r ) ) {
451
466
$activity_ids_sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}";
467
468
if ( ! empty( $per_page ) && ! empty( $page ) ) {
469
+ // We query for $per_page + 1 items in order to
470
+ // populate the has_more_items flag
471
+ $activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page + 1 );
472
}
473
474
$activity_ids_sql = apply_filters( 'bp_activity_paged_activities_sql', $activity_ids_sql, $r );
475
476
$activity_ids = $wpdb->get_col( $activity_ids_sql );
477
478
+ $retval['has_more_items'] = ! empty( $per_page ) && count( $activity_ids ) > $per_page;
479
+
480
+ // If we've fetched more than the $per_page value, we
481
+ // can discard the extra now
482
+ if ( ! empty( $per_page ) && count( $activity_ids ) === $per_page + 1 ) {
483
+ array_pop( $activity_ids );
484
+ }
485
+
486
+ $activities = self::get_activity_data( $activity_ids );
487
+ }
488
489
// Get the fullnames of users so we don't have to query in the loop
490
$activities = self::append_user_fullnames( $activities );
508
// Generate action strings
509
$activities = BP_Activity_Activity::generate_action_strings( $activities );
510
511
+ $retval['activities'] = $activities;
512
+
513
// If $max is set, only return up to the max results
514
+ if ( ! empty( $r['count_total'] ) ) {
515
+
516
+ $total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
517
+ $total_activities = $wpdb->get_var( $total_activities_sql );
518
+
519
+ if ( !empty( $max ) ) {
520
+ if ( (int) $total_activities > (int) $max )
521
+ $total_activities = $max;
522
+ }
523
+
524
+ $retval['total'] = $total_activities;
525
}
526
527
+ return $retval;
528
}
529
530
/**
600
* @return array
601
*/
602
protected static function append_user_fullnames( $activities ) {
603
604
if ( bp_is_active( 'xprofile' ) && ! empty( $activities ) ) {
605
$activity_user_ids = wp_list_pluck( $activities, 'user_id' );
708
return $sql_array;
709
}
710
711
+ /**
712
+ * Get the SQL for the 'date_query' param in BP_Activity_Activity::get().
713
+ *
714
+ * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
715
+ * of parsing the date_query array and creating the necessary SQL clauses.
716
+ * However, since BP_Activity_Activity::get() builds its SQL differently than
717
+ * WP_Query, we have to alter the return value (stripping the leading AND
718
+ * keyword from the query).
719
+ *
720
+ * @since BuddyPress (2.1.0)
721
+ *
722
+ * @param array $date_query An array of date_query parameters. See the
723
+ * documentation for the first parameter of WP_Date_Query.
724
+ * @return string
725
+ */
726
+ public static function get_date_query_sql( $date_query = array() ) {
727
+ $sql = '';
728
+
729
+ // Date query
730
+ if ( ! empty( $date_query ) && is_array( $date_query ) && class_exists( 'BP_Date_Query' ) ) {
731
+ $date_query = new BP_Date_Query( $date_query, 'date_recorded' );
732
+ $sql = preg_replace( '/^\sAND/', '', $date_query->get_sql() );
733
+ }
734
+
735
+ return $sql;
736
+ }
737
+
738
/**
739
* In BuddyPress 1.2.x, this was used to retrieve specific activity stream items (for example, on an activity's permalink page).
740
*
bp-activity/bp-activity-cssjs.php ADDED
@@ -0,0 +1,48 @@
1
+ <?php
2
+
3
+ /**
4
+ * Activity component CSS/JS
5
+ *
6
+ * @package BuddyPress
7
+ * @subpackage ActivityScripts
8
+ */
9
+
10
+ // Exit if accessed directly
11
+ if ( ! defined( 'ABSPATH' ) ) exit;
12
+
13
+ /**
14
+ * Enqueue @mentions JS.
15
+ *
16
+ * @since BuddyPress (2.1)
17
+ */
18
+ function bp_activity_mentions_script() {
19
+ if ( ! bp_activity_maybe_load_mentions_scripts() ) {
20
+ return;
21
+ }
22
+
23
+ // Special handling for New/Edit screens in wp-admin
24
+ if ( is_admin() ) {
25
+ if (
26
+ ! get_current_screen() ||
27
+ ! in_array( get_current_screen()->base, array( 'page', 'post' ) ) ||
28
+ ! post_type_supports( get_current_screen()->post_type, 'editor' ) ) {
29
+ return;
30
+ }
31
+ }
32
+
33
+
34
+ $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
35
+
36
+ wp_enqueue_script( 'bp-mentions', buddypress()->plugin_url . "bp-activity/js/mentions{$min}.js", array( 'jquery', 'jquery-atwho' ), bp_get_version(), true );
37
+ wp_enqueue_style( 'bp-mentions-css', buddypress()->plugin_url . "bp-activity/css/mentions{$min}.css", array(), bp_get_version() );
38
+
39
+ wp_style_add_data( 'bp-mentions-css', 'rtl', true );
40
+ if ( $min ) {
41
+ wp_style_add_data( 'bp-mentions-css', 'suffix', $min );
42
+ }
43
+
44
+ // Print a list of the current user's friends to the page for quicker @mentions lookups.
45
+ do_action( 'bp_activity_mentions_prime_results' );
46
+ }
47
+ add_action( 'bp_enqueue_scripts', 'bp_activity_mentions_script' );
48
+ add_action( 'bp_admin_enqueue_scripts', 'bp_activity_mentions_script' );
bp-activity/bp-activity-filters.php CHANGED
@@ -22,7 +22,7 @@ add_filter( 'bp_get_activity_latest_update_excerpt', 'bp_activity_filter_kses',
22
add_filter( 'bp_get_activity_feed_item_description', 'bp_activity_filter_kses', 1 );
23
add_filter( 'bp_activity_content_before_save', 'bp_activity_filter_kses', 1 );
24
add_filter( 'bp_activity_action_before_save', 'bp_activity_filter_kses', 1 );
25
- add_filter( 'bp_activity_latest_update_content', 'wp_filter_kses', 1 );
26
27
add_filter( 'bp_get_activity_action', 'force_balance_tags' );
28
add_filter( 'bp_get_activity_content_body', 'force_balance_tags' );
@@ -96,6 +96,9 @@ add_filter( 'bp_get_activity_parent_content', 'bp_create_excerpt' );
96
add_filter( 'bp_get_activity_content_body', 'bp_activity_truncate_entry', 5 );
97
add_filter( 'bp_get_activity_content', 'bp_activity_truncate_entry', 5 );
98
99
/** Actions *******************************************************************/
100
101
// At-name filter
@@ -456,7 +459,7 @@ function bp_activity_timestamp_class( $classes = '' ) {
456
if ( empty( $activity_date ) ) {
457
return $classes;
458
}
459
-
460
$classes .= ' date-recorded-' . strtotime( $activity_date );
461
462
return $classes;
@@ -489,6 +492,10 @@ function bp_activity_heartbeat_last_recorded( $response = array(), $data = array
489
'activity_latest_args'
490
);
491
492
$newest_activities = array();
493
$last_activity_recorded = 0;
494
22
add_filter( 'bp_get_activity_feed_item_description', 'bp_activity_filter_kses', 1 );
23
add_filter( 'bp_activity_content_before_save', 'bp_activity_filter_kses', 1 );
24
add_filter( 'bp_activity_action_before_save', 'bp_activity_filter_kses', 1 );
25
+ add_filter( 'bp_activity_latest_update_content', 'bp_activity_filter_kses', 1 );
26
27
add_filter( 'bp_get_activity_action', 'force_balance_tags' );
28
add_filter( 'bp_get_activity_content_body', 'force_balance_tags' );
96
add_filter( 'bp_get_activity_content_body', 'bp_activity_truncate_entry', 5 );
97
add_filter( 'bp_get_activity_content', 'bp_activity_truncate_entry', 5 );
98
99
+ add_filter( 'bp_get_total_favorite_count_for_user', 'bp_core_number_format' );
100
+ add_filter( 'bp_get_total_mention_count_for_user', 'bp_core_number_format' );
101
+
102
/** Actions *******************************************************************/
103
104
// At-name filter
459
if ( empty( $activity_date ) ) {
460
return $classes;
461
}
462
+
463
$classes .= ' date-recorded-' . strtotime( $activity_date );
464
465
return $classes;
492
'activity_latest_args'
493
);
494
495
+ if ( ! empty( $data['bp_activity_last_recorded_search_terms'] ) && empty( $activity_latest_args['search_terms'] ) ) {
496
+ $activity_latest_args['search_terms'] = addslashes( $data['bp_activity_last_recorded_search_terms'] );
497
+ }
498
+
499
$newest_activities = array();
500
$last_activity_recorded = 0;
501
bp-activity/bp-activity-functions.php CHANGED
@@ -15,16 +15,12 @@ if ( !defined( 'ABSPATH' ) ) exit;
15
/**
16
* Check whether the $bp global lists an activity directory page.
17
*
18
- * @since BuddyPress (1.5)
19
- *
20
- * @global object $bp BuddyPress global settings
21
*
22
* @return bool True if activity directory page is found, otherwise false.
23
*/
24
function bp_activity_has_directory() {
25
- global $bp;
26
-
27
- return (bool) !empty( $bp->pages->activity->id );
28
}
29
30
/**
@@ -42,7 +38,7 @@ function bp_activity_has_directory() {
42
*
43
* add_filter( 'bp_activity_do_mentions', '__return_false' );
44
*
45
- * @since BuddyPress (1.8)
46
*
47
* @uses apply_filters() To call 'bp_activity_do_mentions' hook.
48
*
@@ -52,36 +48,60 @@ function bp_activity_do_mentions() {
52
return (bool) apply_filters( 'bp_activity_do_mentions', true );
53
}
54
55
/**
56
* Locate usernames in an activity content string, as designated by an @ sign.
57
*
58
- * @since BuddyPress (1.5)
59
*
60
- * @param string $content The content of the activity, usually found in $activity->content.
61
- * @return array|bool Associative array with user ID as key and username as value. Boolean false if no mentions found.
62
*/
63
function bp_activity_find_mentions( $content ) {
64
$pattern = '/[@]+([A-Za-z0-9-_\.@]+)\b/';
65
preg_match_all( $pattern, $content, $usernames );
66
67
// Make sure there's only one instance of each username
68
- if ( !$usernames = array_unique( $usernames[1] ) )
69
return false;
70
71
$mentioned_users = array();
72
73
// We've found some mentions! Check to see if users exist
74
- foreach( (array) $usernames as $key => $username ) {
75
$user_id = bp_activity_get_userid_from_mentionname( $username );
76
77
// user ID exists, so let's add it to our array
78
if ( ! empty( $user_id ) ) {
79
- $mentioned_users[$user_id] = $username;
80
}
81
}
82
83
- if ( empty( $mentioned_users ) )
84
return false;
85
86
return $mentioned_users;
87
}
@@ -89,7 +109,7 @@ function bp_activity_find_mentions( $content ) {
89
/**
90
* Reset a user's unread mentions list and count.
91
*
92
- * @since BuddyPress (1.5)
93
*
94
* @uses bp_delete_user_meta()
95
*
@@ -97,7 +117,7 @@ function bp_activity_find_mentions( $content ) {
97
*/
98
function bp_activity_clear_new_mentions( $user_id ) {
99
bp_delete_user_meta( $user_id, 'bp_new_mention_count' );
100
- bp_delete_user_meta( $user_id, 'bp_new_mentions' );
101
}
102
103
/**
@@ -108,7 +128,7 @@ function bp_activity_clear_new_mentions( $user_id ) {
108
*
109
* Currently, only used in {@link bp_activity_delete()}.
110
*
111
- * @since BuddyPress (1.5)
112
*
113
* @uses bp_activity_find_mentions()
114
* @uses bp_activity_update_mention_count_for_user()
@@ -117,21 +137,25 @@ function bp_activity_clear_new_mentions( $user_id ) {
117
* @param string $action Can be 'delete' or 'add'. Defaults to 'add'.
118
*/
119
function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
120
- if ( empty( $activity_id ) )
121
return false;
122
123
// Get activity object
124
- $activity = new BP_Activity_Activity( (int) $activity_id );
125
126
// Try to find mentions
127
$usernames = bp_activity_find_mentions( strip_tags( $activity->content ) );
128
129
// Still empty? Stop now
130
- if ( empty( $usernames ) )
131
return false;
132
133
// Increment mention count foreach mentioned user
134
- foreach( (array) $usernames as $user_id => $username ) {
135
bp_activity_update_mention_count_for_user( $user_id, $activity_id, $action );
136
}
137
}
@@ -142,7 +166,7 @@ function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
142
* This function should be used when you've already parsed your activity item
143
* for @mentions.
144
*
145
- * @since BuddyPress (1.7)
146
*
147
* @uses bp_get_user_meta()
148
* @uses bp_update_user_meta()
@@ -153,13 +177,19 @@ function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
153
* @return bool
154
*/
155
function bp_activity_update_mention_count_for_user( $user_id, $activity_id, $action = 'add' ) {
156
- if ( empty( $user_id ) || empty( $activity_id ) )
157
return false;
158
159
// Adjust the mention list and count for the member
160
$new_mention_count = (int) bp_get_user_meta( $user_id, 'bp_new_mention_count', true );
161
- if ( !$new_mentions = bp_get_user_meta( $user_id, 'bp_new_mentions', true ) )
162
$new_mentions = array();
163
164
switch ( $action ) {
165
case 'delete' :
@@ -275,9 +305,13 @@ function bp_activity_get_userid_from_mentionname( $mentionname ) {
275
* @param string $type The action type.
276
* @param string $description The action description.
277
* @param callable $format_callback Callback for formatting the action string.
278
* @return bool False if any param is empty, otherwise true.
279
*/
280
- function bp_activity_set_action( $component_id, $type, $description, $format_callback = false ) {
281
$bp = buddypress();
282
283
// Return false if any of the above values are not set
@@ -303,7 +337,9 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
303
'key' => $type,
304
'value' => $description,
305
'format_callback' => $format_callback,
306
- ), $component_id, $type, $description, $format_callback );
307
308
return true;
309
}
@@ -311,9 +347,8 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
311
/**
312
* Retreive the current action from a component and key.
313
*
314
- * @since BuddyPress (1.1)
315
*
316
- * @global object $bp BuddyPress global settings.
317
* @uses apply_filters() To call the 'bp_activity_get_action' hook.
318
*
319
* @param string $component_id The unique string ID of the component.
@@ -321,19 +356,24 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
321
* @return string|bool Action value if found, otherwise false.
322
*/
323
function bp_activity_get_action( $component_id, $key ) {
324
- global $bp;
325
326
// Return false if any of the above values are not set
327
- if ( empty( $component_id ) || empty( $key ) )
328
return false;
329
330
- return apply_filters( 'bp_activity_get_action', $bp->activity->actions->{$component_id}->{$key}, $component_id, $key );
331
}
332
333
/**
334
* Fetch details of all registered activity types.
335
*
336
- * @since BuddyPress (1.7)
337
*
338
* @return array array( type => description ), ...
339
*/
@@ -344,8 +384,9 @@ function bp_activity_get_types() {
344
foreach ( buddypress()->activity->actions as $action ) {
345
$action = array_values( (array) $action );
346
347
- for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ )
348
$actions[ $action[$i]['key'] ] = $action[$i]['value'];
349
}
350
351
// This was a mis-named activity type from before BP 1.6
@@ -359,7 +400,7 @@ function bp_activity_get_types() {
359
/**
360
* Get a users favorite activity stream items.
361
*
362
- * @since BuddyPress (1.2)
363
*
364
* @uses bp_get_user_meta()
365
* @uses apply_filters() To call the 'bp_activity_get_user_favorites' hook.
@@ -370,8 +411,9 @@ function bp_activity_get_types() {
370
function bp_activity_get_user_favorites( $user_id = 0 ) {
371
372
// Fallback to logged in user if no user_id is passed
373
- if ( empty( $user_id ) )
374
$user_id = bp_displayed_user_id();
375
376
// Get favorites for user
377
$favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
@@ -382,7 +424,7 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
382
/**
383
* Add an activity stream item as a favorite for a user.
384
*
385
- * @since BuddyPress (1.2)
386
*
387
* @uses is_user_logged_in()
388
* @uses bp_get_user_meta()
@@ -399,12 +441,14 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
399
function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
400
401
// Favorite activity stream items are for logged in users only
402
- if ( !is_user_logged_in() )
403
return false;
404
405
// Fallback to logged in user if no user_id is passed
406
- if ( empty( $user_id ) )
407
$user_id = bp_loggedin_user_id();
408
409
$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
410
if ( empty( $my_favs ) || ! is_array( $my_favs ) ) {
@@ -447,7 +491,7 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
447
/**
448
* Remove an activity stream item as a favorite for a user.
449
*
450
- * @since BuddyPress (1.2)
451
*
452
* @uses is_user_logged_in()
453
* @uses bp_get_user_meta()
@@ -463,12 +507,14 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
463
function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
464
465
// Favorite activity stream items are for logged in users only
466
- if ( !is_user_logged_in() )
467
return false;
468
469
// Fallback to logged in user if no user_id is passed
470
- if ( empty( $user_id ) )
471
$user_id = bp_loggedin_user_id();
472
473
$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
474
$my_favs = array_flip( (array) $my_favs );
@@ -483,7 +529,8 @@ function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
483
$my_favs = array_unique( array_flip( $my_favs ) );
484
485
// Update the total number of users who have favorited this activity
486
- if ( $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' ) ) {
487
488
// Deduct from total favorites
489
if ( bp_activity_update_meta( $activity_id, 'favorite_count', (int) $fav_count - 1 ) ) {
@@ -516,7 +563,7 @@ function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
516
/**
517
* Check whether an activity item exists with a given content string.
518
*
519
- * @since BuddyPress (1.1)
520
*
521
* @uses BP_Activity_Activity::check_exists_by_content() {@link BP_Activity_Activity}
522
* @uses apply_filters() To call the 'bp_activity_check_exists_by_content' hook.
@@ -531,7 +578,7 @@ function bp_activity_check_exists_by_content( $content ) {
531
/**
532
* Retrieve the last time activity was updated.
533
*
534
- * @since BuddyPress (1.0)
535
*
536
* @uses BP_Activity_Activity::get_last_updated() {@link BP_Activity_Activity}
537
* @uses apply_filters() To call the 'bp_activity_get_last_updated' hook.
@@ -545,7 +592,7 @@ function bp_activity_get_last_updated() {
545
/**
546
* Retrieve the number of favorite activity stream items a user has.
547
*
548
- * @since BuddyPress (1.2)
549
*
550
* @uses BP_Activity_Activity::total_favorite_count() {@link BP_Activity_Activity}
551
*
@@ -555,8 +602,9 @@ function bp_activity_get_last_updated() {
555
function bp_activity_total_favorites_for_user( $user_id = 0 ) {
556
557
// Fallback on displayed user, and then logged in user
558
- if ( empty( $user_id ) )
559
$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
560
561
return BP_Activity_Activity::total_favorite_count( $user_id );
562
}
@@ -584,7 +632,6 @@ function bp_activity_total_favorites_for_user( $user_id = 0 ) {
584
* @return bool True on success, false on failure.
585
*/
586
function bp_activity_delete_meta( $activity_id, $meta_key = '', $meta_value = '', $delete_all = false ) {
587
- global $wpdb, $bp;
588
589
// Legacy - if no meta_key is passed, delete all for the item
590
if ( empty( $meta_key ) ) {
@@ -611,7 +658,7 @@ function bp_activity_delete_meta( $activity_id, $meta_key = '', $meta_value = ''
611
/**
612
* Get metadata for a given activity item.
613
*
614
- * @since BuddyPress (1.2)
615
*
616
* @uses apply_filters() To call the 'bp_activity_get_meta' hook.
617
*
@@ -636,7 +683,7 @@ function bp_activity_get_meta( $activity_id = 0, $meta_key = '', $single = true
636
/**
637
* Update a piece of activity meta.
638
*
639
- * @since BuddyPress (1.2)
640
*
641
* @param int $activity_id ID of the activity item whose metadata is being
642
* updated.
@@ -665,7 +712,7 @@ function bp_activity_update_meta( $activity_id, $meta_key, $meta_value, $prev_va
665
* @param int $activity_id ID of the activity item.
666
* @param string $meta_key Metadata key.
667
* @param mixed $meta_value Metadata value.
668
- * @param bool $unique. Optional. Whether to enforce a single metadata value
669
* for the given key. If true, and the object already has a value for
670
* the key, no change will be made. Default: false.
671
* @return int|bool The meta ID on successful update, false on failure.
@@ -683,7 +730,7 @@ function bp_activity_add_meta( $activity_id, $meta_key, $meta_value, $unique = f
683
/**
684
* Completely remove a user's activity data.
685
*
686
- * @since BuddyPress (1.5)
687
*
688
* @uses is_user_logged_in()
689
* @uses bp_activity_delete()
@@ -696,14 +743,15 @@ function bp_activity_add_meta( $activity_id, $meta_key, $meta_value, $unique = f
696
function bp_activity_remove_all_user_data( $user_id = 0 ) {
697
698
// Do not delete user data unless a logged in user says so
699
- if ( empty( $user_id ) || !is_user_logged_in() )
700
return false;
701
702
// Clear the user's activity from the sitewide stream and clear their activity tables
703
bp_activity_delete( array( 'user_id' => $user_id ) );
704
705
// Remove any usermeta
706
- bp_delete_user_meta( $user_id, 'bp_latest_update' );
707
bp_delete_user_meta( $user_id, 'bp_favorite_activities' );
708
709
// Execute additional code
@@ -718,7 +766,7 @@ add_action( 'delete_user', 'bp_activity_remove_all_user_data' );
718
/**
719
* Mark all of the user's activity as spam.
720
*
721
- * @since BuddyPress (1.6)
722
*
723
* @global object $wpdb WordPress database access object.
724
* @global object $bp BuddyPress global settings.
@@ -726,22 +774,30 @@ add_action( 'delete_user', 'bp_activity_remove_all_user_data' );
726
* @param int $user_id ID of the user whose activity is being spammed.
727
*/
728
function bp_activity_spam_all_user_data( $user_id = 0 ) {
729
- global $bp, $wpdb;
730
731
// Do not delete user data unless a logged in user says so
732
- if ( empty( $user_id ) || ! is_user_logged_in() )
733
return false;
734
735
// Get all the user's activities.
736
- $activities = bp_activity_get( array( 'display_comments' => 'stream', 'filter' => array( 'user_id' => $user_id ), 'show_hidden' => true, ) );
737
738
// Mark each as spam
739
foreach ( (array) $activities['activities'] as $activity ) {
740
741
// Create an activity object
742
$activity_obj = new BP_Activity_Activity;
743
- foreach ( $activity as $k => $v )
744
$activity_obj->$k = $v;
745
746
// Mark as spam
747
bp_activity_mark_as_spam( $activity_obj );
@@ -753,8 +809,9 @@ function bp_activity_spam_all_user_data( $user_id = 0 ) {
753
* as we're going to be updating all the activity statuses directly, for efficency,
754
* we need to update manually.
755
*/
756
- if ( ! empty( $bp->activity->akismet ) )
757
$bp->activity->akismet->update_activity_spam_meta( $activity_obj );
758
759
// Tidy up
760
unset( $activity_obj );
@@ -771,7 +828,7 @@ add_action( 'bp_make_spam_user', 'bp_activity_spam_all_user_data' );
771
/**
772
* Mark all of the user's activity as ham (not spam).
773
*
774
- * @since BuddyPress (1.6)
775
*
776
* @global object $wpdb WordPress database access object.
777
* @global object $bp BuddyPress global settings.
@@ -779,22 +836,31 @@ add_action( 'bp_make_spam_user', 'bp_activity_spam_all_user_data' );
779
* @param int $user_id ID of the user whose activity is being hammed.
780
*/
781
function bp_activity_ham_all_user_data( $user_id = 0 ) {
782
- global $bp, $wpdb;
783
784
// Do not delete user data unless a logged in user says so
785
- if ( empty( $user_id ) || ! is_user_logged_in() )
786
return false;
787
788
// Get all the user's activities.
789
- $activities = bp_activity_get( array( 'display_comments' => 'stream', 'filter' => array( 'user_id' => $user_id ), 'show_hidden' => true, 'spam' => 'all', ) );
790
791
// Mark each as not spam
792
foreach ( (array) $activities['activities'] as $activity ) {
793
794
// Create an activity object
795
$activity_obj = new BP_Activity_Activity;
796
- foreach ( $activity as $k => $v )
797
$activity_obj->$k = $v;
798
799
// Mark as not spam
800
bp_activity_mark_as_ham( $activity_obj );
@@ -806,8 +872,9 @@ function bp_activity_ham_all_user_data( $user_id = 0 ) {
806
* as we're going to be updating all the activity statuses directly, for efficency,
807
* we need to update manually.
808
*/
809
- if ( ! empty( $bp->activity->akismet ) )
810
$bp->activity->akismet->update_activity_ham_meta( $activity_obj );
811
812
// Tidy up
813
unset( $activity_obj );
@@ -824,25 +891,26 @@ add_action( 'bp_make_ham_user', 'bp_activity_ham_all_user_data' );
824
/**
825
* Register the activity stream actions for updates
826
*
827
- * @since BuddyPress (1.6)
828
- *
829
- * @global object $bp BuddyPress global settings.
830
*/
831
function bp_activity_register_activity_actions() {
832
- global $bp;
833
834
bp_activity_set_action(
835
$bp->activity->id,
836
'activity_update',
837
__( 'Posted a status update', 'buddypress' ),
838
- 'bp_activity_format_activity_action_activity_update'
839
);
840
841
bp_activity_set_action(
842
$bp->activity->id,
843
'activity_comment',
844
__( 'Replied to a status update', 'buddypress' ),
845
- 'bp_activity_format_activity_action_activity_comment'
846
);
847
848
do_action( 'bp_activity_register_activity_actions' );
@@ -860,6 +928,7 @@ add_action( 'bp_register_activity_actions', 'bp_activity_register_activity_actio
860
* the formatted action string.
861
*/
862
function bp_activity_generate_action_string( $activity ) {
863
// Check for valid input
864
if ( empty( $activity->component ) || empty( $activity->type ) ) {
865
return false;
@@ -926,7 +995,7 @@ function bp_activity_format_activity_action_activity_comment( $action, $activity
926
* the default for the bp_activity_get()).
927
* - 'per_page' (false)
928
*
929
- * @since BuddyPress (1.2)
930
*
931
* @see BP_Activity_Activity::get() For more information on accepted arguments
932
* and the format of the returned value.
@@ -940,7 +1009,8 @@ function bp_activity_format_activity_action_activity_comment( $action, $activity
940
* @return array $activity See BP_Activity_Activity::get() for description.
941
*/
942
function bp_activity_get( $args = '' ) {
943
- $defaults = array(
944
'max' => false, // Maximum number of results to return
945
'page' => 1, // page 1 without a per_page will result in no pagination.
946
'per_page' => false, // results per page
@@ -949,11 +1019,13 @@ function bp_activity_get( $args = '' ) {
949
950
'search_terms' => false, // Pass search terms as a string
951
'meta_query' => false, // Filter by activity meta. See WP_Meta_Query for format
952
'show_hidden' => false, // Show activity items that are hidden site-wide?
953
'exclude' => false, // Comma-separated list of activity IDs to exclude
954
'in' => false, // Comma-separated list or array of activity IDs to which you want to limit the query
955
'spam' => 'ham_only', // 'ham_only' (default), 'spam_only' or 'all'.
956
'update_meta_cache' => true,
957
958
/**
959
* Pass filters as an array -- all filter items can be multiple values comma separated:
@@ -966,46 +1038,50 @@ function bp_activity_get( $args = '' ) {
966
* );
967
*/
968
'filter' => array()
969
- );
970
- $r = wp_parse_args( $args, $defaults );
971
- extract( $r, EXTR_SKIP );
972
973
// Attempt to return a cached copy of the first page of sitewide activity.
974
- if ( 1 == (int) $page && empty( $max ) && empty( $search_terms ) && empty( $meta_query ) && empty( $filter ) && empty( $exclude ) && empty( $in ) && 'DESC' == $sort && empty( $exclude ) && 'ham_only' == $spam ) {
975
- if ( !$activity = wp_cache_get( 'bp_activity_sitewide_front', 'bp' ) ) {
976
- $args = array(
977
- 'page' => $page,
978
- 'per_page' => $per_page,
979
- 'max' => $max,
980
- 'sort' => $sort,
981
- 'search_terms' => $search_terms,
982
- 'meta_query' => $meta_query,
983
- 'filter' => $filter,
984
- 'display_comments' => $display_comments,
985
- 'show_hidden' => $show_hidden,
986
- 'spam' => $spam,
987
- 'update_meta_cache' => $update_meta_cache,
988
- );
989
- $activity = BP_Activity_Activity::get( $args );
990
wp_cache_set( 'bp_activity_sitewide_front', $activity, 'bp' );
991
}
992
993
} else {
994
- $args = array(
995
- 'page' => $page,
996
- 'per_page' => $per_page,
997
- 'max' => $max,
998
- 'sort' => $sort,
999
- 'search_terms' => $search_terms,
1000
- 'meta_query' => $meta_query,
1001
- 'filter' => $filter,
1002
- 'display_comments' => $display_comments,
1003
- 'show_hidden' => $show_hidden,
1004
- 'exclude' => $exclude,
1005
- 'in' => $in,
1006
- 'spam' => $spam
1007
- );
1008
- $activity = BP_Activity_Activity::get( $args );
1009
}
1010
1011
return apply_filters_ref_array( 'bp_activity_get', array( &$activity, &$r ) );
@@ -1014,7 +1090,7 @@ function bp_activity_get( $args = '' ) {
1014
/**
1015
* Fetch specific activity items.
1016
*
1017
- * @since BuddyPress (1.2)
1018
*
1019
* @see BP_Activity_Activity::get() For more information on accepted arguments
1020
* @uses wp_parse_args()
@@ -1030,38 +1106,38 @@ function bp_activity_get( $args = '' ) {
1030
* @return array $activity See BP_Activity_Activity::get() for description.
1031
*/
1032
function bp_activity_get_specific( $args = '' ) {
1033
- $defaults = array(
1034
- 'activity_ids' => false, // A single activity_id or array of IDs.
1035
- 'display_comments' => false, // true or false to display threaded comments for these specific activity items
1036
- 'max' => false, // Maximum number of results to return
1037
- 'page' => 1, // page 1 without a per_page will result in no pagination.
1038
- 'per_page' => false, // results per page
1039
- 'show_hidden' => true, // When fetching specific items, show all
1040
- 'sort' => 'DESC', // sort ASC or DESC
1041
- 'spam' => 'ham_only', // Retrieve items marked as spam
1042
'update_meta_cache' => true,
1043
- );
1044
- $r = wp_parse_args( $args, $defaults );
1045
- extract( $r, EXTR_SKIP );
1046
1047
$get_args = array(
1048
- 'page' => $page,
1049
- 'per_page' => $per_page,
1050
- 'max' => $max,
1051
- 'sort' => $sort,
1052
- 'display_comments' => $display_comments,
1053
- 'show_hidden' => $show_hidden,
1054
- 'in' => $activity_ids,
1055
- 'spam' => $spam,
1056
- 'update_meta_cache' => $update_meta_cache,
1057
);
1058
return apply_filters( 'bp_activity_get_specific', BP_Activity_Activity::get( $get_args ), $args, $get_args );
1059
}
1060
1061
/**
1062
* Add an activity item.
1063
*
1064
- * @since BuddyPress (1.1)
1065
*
1066
* @uses wp_parse_args()
1067
* @uses BP_Activity_Activity::save() {@link BP_Activity_Activity}
@@ -1104,56 +1180,60 @@ function bp_activity_get_specific( $args = '' ) {
1104
*/
1105
function bp_activity_add( $args = '' ) {
1106
1107
- $defaults = array(
1108
- 'id' => false, // Pass an existing activity ID to update an existing entry.
1109
-
1110
- 'action' => '', // The activity action - e.g. "Jon Doe posted an update"
1111
- 'content' => '', // Optional: The content of the activity item e.g. "BuddyPress is awesome guys!"
1112
-
1113
- 'component' => false, // The name/ID of the component e.g. groups, profile, mycomponent
1114
- 'type' => false, // The activity type e.g. activity_update, profile_updated
1115
- 'primary_link' => '', // Optional: The primary URL for this item in RSS feeds (defaults to activity permalink)
1116
-
1117
- 'user_id' => bp_loggedin_user_id(), // Optional: The user to record the activity for, can be false if this activity is not for a user.
1118
- 'item_id' => false, // Optional: The ID of the specific item being recorded, e.g. a blog_id
1119
- 'secondary_item_id' => false, // Optional: A second ID used to further filter e.g. a comment_id
1120
'recorded_time' => bp_core_current_time(), // The GMT time that this activity was recorded
1121
- 'hide_sitewide' => false, // Should this be hidden on the sitewide activity stream?
1122
- 'is_spam' => false, // Is this activity item to be marked as spam?
1123
- );
1124
- $params = wp_parse_args( $args, $defaults );
1125
- extract( $params, EXTR_SKIP );
1126
1127
// Make sure we are backwards compatible
1128
- if ( empty( $component ) && !empty( $component_name ) )
1129
- $component = $component_name;
1130
1131
- if ( empty( $type ) && !empty( $component_action ) )
1132
- $type = $component_action;
1133
1134
// Setup activity to be added
1135
- $activity = new BP_Activity_Activity( $id );
1136
- $activity->user_id = $user_id;
1137
- $activity->component = $component;
1138
- $activity->type = $type;
1139
- $activity->content = $content;
1140
- $activity->primary_link = $primary_link;
1141
- $activity->item_id = $item_id;
1142
- $activity->secondary_item_id = $secondary_item_id;
1143
- $activity->date_recorded = $recorded_time;
1144
- $activity->hide_sitewide = $hide_sitewide;
1145
- $activity->is_spam = $is_spam;
1146
- $activity->action = ! empty( $action ) ? $action : bp_activity_generate_action_string( $activity );
1147
-
1148
- if ( !$activity->save() )
1149
return false;
1150
1151
// If this is an activity comment, rebuild the tree
1152
- if ( 'activity_comment' == $activity->type )
1153
BP_Activity_Activity::rebuild_activity_comment_tree( $activity->item_id );
1154
1155
wp_cache_delete( 'bp_activity_sitewide_front', 'bp' );
1156
- do_action( 'bp_activity_add', $params );
1157
1158
return $activity->id;
1159
}
@@ -1161,9 +1241,8 @@ function bp_activity_add( $args = '' ) {
1161
/**
1162
* Post an activity update.
1163
*
1164
- * @since BuddyPress (1.2)
1165
*
1166
- * @global object $bp BuddyPress global settings.
1167
* @uses wp_parse_args()
1168
* @uses bp_is_user_inactive()
1169
* @uses bp_core_get_userlink()
@@ -1182,41 +1261,42 @@ function bp_activity_add( $args = '' ) {
1182
* @return int $activity_id The activity id
1183
*/
1184
function bp_activity_post_update( $args = '' ) {
1185
- global $bp;
1186
1187
- $defaults = array(
1188
'content' => false,
1189
'user_id' => bp_loggedin_user_id()
1190
- );
1191
- $r = wp_parse_args( $args, $defaults );
1192
- extract( $r, EXTR_SKIP );
1193
1194
- if ( empty( $content ) || !strlen( trim( $content ) ) )
1195
return false;
1196
1197
- if ( bp_is_user_inactive( $user_id ) )
1198
return false;
1199
1200
// Record this on the user's profile
1201
- $from_user_link = bp_core_get_userlink( $user_id );
1202
- $activity_content = $content;
1203
- $primary_link = bp_core_get_userlink( $user_id, false, true );
1204
1205
// Now write the values
1206
$activity_id = bp_activity_add( array(
1207
- 'user_id' => $user_id,
1208
'content' => apply_filters( 'bp_activity_new_update_content', $activity_content ),
1209
'primary_link' => apply_filters( 'bp_activity_new_update_primary_link', $primary_link ),
1210
- 'component' => $bp->activity->id,
1211
'type' => 'activity_update',
1212
) );
1213
1214
- $activity_content = apply_filters( 'bp_activity_latest_update_content', $content, $activity_content );
1215
1216
// Add this update to the "latest update" usermeta so it can be fetched anywhere.
1217
- bp_update_user_meta( bp_loggedin_user_id(), 'bp_latest_update', array( 'id' => $activity_id, 'content' => $activity_content ) );
1218
1219
- do_action( 'bp_activity_posted_update', $content, $user_id, $activity_id );
1220
1221
return $activity_id;
1222
}
@@ -1224,7 +1304,7 @@ function bp_activity_post_update( $args = '' ) {
1224
/**
1225
* Add an activity comment.
1226
*
1227
- * @since BuddyPress (1.2)
1228
*
1229
* @global object $bp BuddyPress global settings.
1230
* @uses wp_parse_args()
@@ -1239,18 +1319,18 @@ function bp_activity_post_update( $args = '' ) {
1239
* @type int $id Optional. Pass an ID to update an existing comment.
1240
* @type string $content The content of the comment.
1241
* @type int $user_id Optional. The ID of the user making the comment.
1242
- * Defaults to the ID of the logged-in user.
1243
* @type int $activity_id The ID of the "root" activity item, ie the oldest
1244
- * ancestor of the comment.
1245
* @type int $parent_id Optional. The ID of the parent activity item, ie the
1246
- * item to which the comment is an immediate reply. If
1247
- * not provided, this value defaults to the $activity_id.
1248
* }
1249
* @return int|bool The ID of the comment on success, otherwise false.
1250
*/
1251
function bp_activity_new_comment( $args = '' ) {
1252
1253
- $params = wp_parse_args( $args, array(
1254
'id' => false,
1255
'content' => false,
1256
'user_id' => bp_loggedin_user_id(),
@@ -1258,31 +1338,31 @@ function bp_activity_new_comment( $args = '' ) {
1258
'parent_id' => false // ID of a parent comment (optional)
1259
) );
1260
1261
- extract( $params, EXTR_SKIP );
1262
-
1263
// Bail if missing necessary data
1264
- if ( empty( $content ) || empty( $user_id ) || empty( $activity_id ) ) {
1265
return false;
1266
}
1267
1268
// Maybe set current activity ID as the parent
1269
- if ( empty( $parent_id ) ) {
1270
- $parent_id = $activity_id;
1271
}
1272
1273
// Check to see if the parent activity is hidden, and if so, hide this comment publically.
1274
$activity = new BP_Activity_Activity( $activity_id );
1275
$is_hidden = ( (int) $activity->hide_sitewide ) ? 1 : 0;
1276
1277
// Insert the activity comment
1278
$comment_id = bp_activity_add( array(
1279
- 'id' => $id,
1280
- 'content' => apply_filters( 'bp_activity_comment_content', $content ),
1281
'component' => buddypress()->activity->id,
1282
'type' => 'activity_comment',
1283
- 'user_id' => $user_id,
1284
'item_id' => $activity_id,
1285
- 'secondary_item_id' => $parent_id,
1286
'hide_sitewide' => $is_hidden
1287
) );
1288
@@ -1290,7 +1370,7 @@ function bp_activity_new_comment( $args = '' ) {
1290
wp_cache_delete( $activity_id, 'bp_activity_comments' );
1291
1292
// Walk the tree to clear caches for all parent items
1293
- $clear_id = $parent_id;
1294
while ( $clear_id != $activity_id ) {
1295
$clear_object = new BP_Activity_Activity( $clear_id );
1296
wp_cache_delete( $clear_id, 'bp_activity' );
@@ -1298,7 +1378,7 @@ function bp_activity_new_comment( $args = '' ) {
1298
}
1299
wp_cache_delete( $activity_id, 'bp_activity' );
1300
1301
- do_action( 'bp_activity_comment_posted', $comment_id, $params, $activity );
1302
1303
return $comment_id;
1304
}
@@ -1306,7 +1386,7 @@ function bp_activity_new_comment( $args = '' ) {
1306
/**
1307
* Fetch the activity_id for an existing activity entry in the DB.
1308
*
1309
- * @since BuddyPress (1.2)
1310
*
1311
* @see BP_Activity_Activity::get() For more information on accepted arguments.
1312
* @uses wp_parse_args()
@@ -1317,7 +1397,8 @@ function bp_activity_new_comment( $args = '' ) {
1317
* @return int $activity_id The ID of the activity item found.
1318
*/
1319
function bp_activity_get_activity_id( $args = '' ) {
1320
- $defaults = array(
1321
'user_id' => false,
1322
'component' => false,
1323
'type' => false,
@@ -1326,12 +1407,18 @@ function bp_activity_get_activity_id( $args = '' ) {
1326
'action' => false,
1327
'content' => false,
1328
'date_recorded' => false,
1329
- );
1330
-
1331
- $r = wp_parse_args( $args, $defaults );
1332
- extract( $r, EXTR_SKIP );
1333
1334
- return apply_filters( 'bp_activity_get_activity_id', BP_Activity_Activity::get_id( $user_id, $component, $type, $item_id, $secondary_item_id, $action, $content, $date_recorded ) );
1335
}
1336
1337
/**
@@ -1347,7 +1434,7 @@ function bp_activity_get_activity_id( $args = '' ) {
1347
*
1348
* If you are deleting an activity comment please use bp_activity_delete_comment();
1349
*
1350
- * @since BuddyPress (1.0)
1351
*
1352
* @see BP_Activity_Activity::get() For more information on accepted arguments.
1353
* @uses wp_parse_args()
@@ -1369,7 +1456,7 @@ function bp_activity_get_activity_id( $args = '' ) {
1369
function bp_activity_delete( $args = '' ) {
1370
1371
// Pass one or more the of following variables to delete by those variables
1372
- $defaults = array(
1373
'id' => false,
1374
'action' => false,
1375
'content' => false,
@@ -1381,23 +1468,22 @@ function bp_activity_delete( $args = '' ) {
1381
'secondary_item_id' => false,
1382
'date_recorded' => false,
1383
'hide_sitewide' => false
1384
- );
1385
-
1386
- $args = wp_parse_args( $args, $defaults );
1387
1388
do_action( 'bp_before_activity_delete', $args );
1389
1390
// Adjust the new mention count of any mentioned member
1391
bp_activity_adjust_mention_count( $args['id'], 'delete' );
1392
1393
- if ( !$activity_ids_deleted = BP_Activity_Activity::delete( $args ) )
1394
return false;
1395
1396
// Check if the user's latest update has been deleted
1397
- if ( empty( $args['user_id'] ) )
1398
- $user_id = bp_loggedin_user_id();
1399
- else
1400
- $user_id = $args['user_id'];
1401
1402
$latest_update = bp_get_user_meta( $user_id, 'bp_latest_update', true );
1403
if ( !empty( $latest_update ) ) {
@@ -1419,7 +1505,7 @@ function bp_activity_delete( $args = '' ) {
1419
*
1420
* You should use bp_activity_delete() instead.
1421
*
1422
- * @since BuddyPress (1.1)
1423
* @deprecated BuddyPress (1.2)
1424
*
1425
* @uses wp_parse_args()
@@ -1432,23 +1518,21 @@ function bp_activity_delete( $args = '' ) {
1432
*/
1433
function bp_activity_delete_by_item_id( $args = '' ) {
1434
1435
- $defaults = array(
1436
'item_id' => false,
1437
'component' => false,
1438
'type' => false,
1439
'user_id' => false,
1440
'secondary_item_id' => false
1441
- );
1442
- $r = wp_parse_args( $args, $defaults );
1443
- extract( $r, EXTR_SKIP );
1444
1445
- return bp_activity_delete( array( 'item_id' => $item_id, 'component' => $component, 'type' => $type, 'user_id' => $user_id, 'secondary_item_id' => $secondary_item_id ) );
1446
}
1447
1448
/**
1449
* Delete an activity item by activity id.
1450
*
1451
- * @since BuddyPress (1.1)
1452
*
1453
* @uses bp_activity_delete()
1454
*
@@ -1464,7 +1548,7 @@ function bp_activity_delete( $args = '' ) {
1464
*
1465
* You should use bp_activity_delete() instead.
1466
*
1467
- * @since BuddyPress (1.1)
1468
* @deprecated BuddyPress (1.2)
1469
*
1470
* @uses bp_activity_delete()
@@ -1476,7 +1560,12 @@ function bp_activity_delete( $args = '' ) {
1476
* @return bool True on success, false on failure.
1477
*/
1478
function bp_activity_delete_by_content( $user_id, $content, $component, $type ) {
1479
- return bp_activity_delete( array( 'user_id' => $user_id, 'content' => $content, 'component' => $component, 'type' => $type ) );
1480
}
1481
1482
/**
@@ -1484,7 +1573,7 @@ function bp_activity_delete( $args = '' ) {
1484
*
1485
* You should use bp_activity_delete() instead.
1486
*
1487
- * @since BuddyPress (1.1)
1488
* @deprecated BuddyPress (1.2)
1489
*
1490
* @uses bp_activity_delete()
@@ -1494,13 +1583,16 @@ function bp_activity_delete( $args = '' ) {
1494
* @return bool True on success, false on failure.
1495
*/
1496
function bp_activity_delete_for_user_by_component( $user_id, $component ) {
1497
- return bp_activity_delete( array( 'user_id' => $user_id, 'component' => $component ) );
1498
}
1499
1500
/**
1501
* Delete an activity comment.
1502
*
1503
- * @since BuddyPress (1.2)
1504
*
1505
* @uses apply_filters() To call the 'bp_activity_delete_comment_pre' hook.
1506
* @uses bp_activity_delete_children()
@@ -1522,15 +1614,20 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
1522
* You may want to hook into this filter if you want to override this function and
1523
* handle the deletion of child comments differently. Make sure you return false.
1524
*/
1525
- if ( !apply_filters( 'bp_activity_delete_comment_pre', true, $activity_id, $comment_id ) )
1526
return false;
1527
1528
// Delete any children of this comment.
1529
bp_activity_delete_children( $activity_id, $comment_id );
1530
1531
// Delete the actual comment
1532
- if ( !bp_activity_delete( array( 'id' => $comment_id, 'type' => 'activity_comment' ) ) )
1533
return false;
1534
1535
// Recalculate the comment tree
1536
BP_Activity_Activity::rebuild_activity_comment_tree( $activity_id );
@@ -1543,24 +1640,34 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
1543
/**
1544
* Delete an activity comment's children.
1545
*
1546
- * @since BuddyPress (1.2)
1547
*
1548
* @uses BP_Activity_Activity::get_child_comments() {@link BP_Activity_Activity}
1549
* @uses bp_activity_delete_children()
1550
* @uses bp_activity_delete()
1551
*
1552
* @param int $activity_id The ID of the "root" activity, ie the
1553
- * comment's oldest ancestor.
1554
* @param int $comment_id The ID of the comment to be deleted.
1555
*/
1556
- function bp_activity_delete_children( $activity_id, $comment_id) {
1557
// Recursively delete all children of this comment.
1558
- if ( $children = BP_Activity_Activity::get_child_comments( $comment_id ) ) {
1559
foreach( (array) $children as $child ) {
1560
bp_activity_delete_children( $activity_id, $child->id );
1561
}
1562
}
1563
- bp_activity_delete( array( 'secondary_item_id' => $comment_id, 'type' => 'activity_comment', 'item_id' => $activity_id ) );
1564
}
1565
1566
/**
@@ -1571,7 +1678,7 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
1571
* be sure to pass the full $activity_obj parameter as well, if you already
1572
* have it available.
1573
*
1574
- * @since BuddyPress (1.2)
1575
*
1576
* @uses bp_get_root_domain()
1577
* @uses bp_get_activity_root_slug()
@@ -1583,8 +1690,9 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
1583
*/
1584
function bp_activity_get_permalink( $activity_id, $activity_obj = false ) {
1585
1586
- if ( empty( $activity_obj ) )
1587
$activity_obj = new BP_Activity_Activity( $activity_id );
1588
1589
if ( isset( $activity_obj->current_comment ) ) {
1590
$activity_obj = $activity_obj->current_comment;
@@ -1606,7 +1714,7 @@ function bp_activity_get_permalink( $activity_id, $activity_obj = false ) {
1606
/**
1607
* Hide a user's activity.
1608
*
1609
- * @since BuddyPress (1.2)
1610
*
1611
* @uses BP_Activity_Activity::hide_all_for_user() {@link BP_Activity_Activity}
1612
*
@@ -1627,18 +1735,18 @@ function bp_activity_hide_user_activity( $user_id ) {
1627
* through the content, grabs the first image and converts it to a thumbnail,
1628
* and removes the rest of the images from the string.
1629
*
1630
- * @since BuddyPress (1.2)
1631
*
1632
* @uses esc_attr()
1633
* @uses apply_filters() To call the 'bp_activity_thumbnail_content_images' hook
1634
*
1635
* @param string $content The content of the activity item.
1636
* @param string $link Optional. The unescaped URL that the image should link
1637
- * to. If absent, the image will not be a link.
1638
- * @param array $activity_args Optional. The args passed to the activity
1639
- * creation function (eg bp_blogs_record_activity()).
1640
* @return string $content The content with images stripped and replaced with a
1641
- * single thumb.
1642
*/
1643
function bp_activity_thumbnail_content_images( $content, $link = false, $args = false ) {
1644
@@ -1648,17 +1756,18 @@ function bp_activity_thumbnail_content_images( $content, $link = false, $args =
1648
$content = preg_replace('|(\[caption(.*?)\])?<img[^>]*>([^\[\[]*\[\/caption\])?|', '', $content );
1649
1650
if ( !empty( $matches ) && !empty( $matches[0] ) ) {
1651
// Get the SRC value
1652
- preg_match( '/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $matches[0][0], $src );
1653
1654
// Get the width and height
1655
preg_match( '/<img.*?(height\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $matches[0][0], $height );
1656
preg_match( '/<img.*?(width\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $matches[0][0], $width );
1657
1658
if ( !empty( $src ) ) {
1659
- $src = substr( substr( str_replace( 'src=', '', $src[1] ), 0, -1 ), 1 );
1660
$height = substr( substr( str_replace( 'height=', '', $height[1] ), 0, -1 ), 1 );
1661
- $width = substr( substr( str_replace( 'width=', '', $width[1] ), 0, -1 ), 1 );
1662
1663
if ( empty( $width ) || empty( $height ) ) {
1664
$width = 100;
@@ -1684,7 +1793,7 @@ function bp_activity_thumbnail_content_images( $content, $link = false, $args =
1684
/**
1685
* Fetch whether the current user is allowed to mark items as spam.
1686
*
1687
- * @since BuddyPress (1.6)
1688
*
1689
* @return bool True if user is allowed to mark activity items as spam.
1690
*/
@@ -1695,17 +1804,15 @@ function bp_activity_user_can_mark_spam() {
1695
/**
1696
* Mark an activity item as spam.
1697
*
1698
- * @since BuddyPress (1.6)
1699
- *
1700
- * @global object $bp BuddyPress global settings.
1701
*
1702
* @param BP_Activity_Activity $activity The activity item to be spammed.
1703
* @param string $source Optional. Default is "by_a_person" (ie, a person has
1704
- * manually marked the activity as spam). BP core also
1705
- * accepts 'by_akismet'.
1706
*/
1707
function bp_activity_mark_as_spam( &$activity, $source = 'by_a_person' ) {
1708
- global $bp;
1709
1710
$activity->is_spam = 1;
1711
@@ -1735,17 +1842,15 @@ function bp_activity_mark_as_spam( &$activity, $source = 'by_a_person' ) {
1735
/**
1736
* Mark an activity item as ham.
1737
*
1738
- * @since BuddyPress (1.6)
1739
- *
1740
- * @global object $bp BuddyPress global settings.
1741
*
1742
* @param BP_Activity_Activity $activity The activity item to be hammed.
1743
* @param string $source Optional. Default is "by_a_person" (ie, a person has
1744
- * manually marked the activity as spam). BP core also
1745
- * accepts 'by_akismet'.
1746
*/
1747
function bp_activity_mark_as_ham( &$activity, $source = 'by_a_person' ) {
1748
- global $bp;
1749
1750
$activity->is_spam = 0;
1751
@@ -1785,7 +1890,7 @@ function bp_activity_mark_as_ham( &$activity, $source = 'by_a_person' ) {
1785
* This does not cover recursive activity comments, as they do not use a real loop.
1786
* For that, see {@link bp_activity_comment_embed()}.
1787
*
1788
- * @since BuddyPress (1.5)
1789
*
1790
* @see BP_Embed
1791
* @see bp_embed_activity_cache()
@@ -1809,7 +1914,7 @@ add_action( 'activity_loop_start', 'bp_activity_embed' );
1809
* necessary to grab each comment's embeds from the cache, or put them in
1810
* the cache if they are not there yet.
1811
*
1812
- * @since BuddyPress (1.5)
1813
*
1814
* @see BP_Embed
1815
* @see bp_embed_activity_cache()
@@ -1828,10 +1933,9 @@ add_action( 'bp_before_activity_comment', 'bp_activity_comment_embed' );
1828
/**
1829
* When a user clicks on a "Read More" item, make sure embeds are correctly parsed and shown for the expanded content.
1830
*
1831
- * @since BuddyPress (1.5)
1832
*
1833
* @see BP_Embed
1834
- * @global object $bp BuddyPress global settings
1835
* @uses add_filter() To attach create_function() to 'embed_post_id'.
1836
* @uses add_filter() To attach 'bp_embed_activity_cache' to 'bp_embed_get_cache'.
1837
* @uses add_action() To attach 'bp_embed_activity_save_cache' to 'bp_embed_update_cache'.
@@ -1839,15 +1943,14 @@ add_action( 'bp_before_activity_comment', 'bp_activity_comment_embed' );
1839
* @param object $activity The activity that is being expanded.
1840
*/
1841
function bp_dtheme_embed_read_more( $activity ) {
1842
- global $bp;
1843
1844
- $bp->activity->read_more_id = $activity->id;
1845
-
1846
- add_filter( 'embed_post_id', create_function( '', 'global $bp; return $bp->activity->read_more_id;' ) );
1847
- add_filter( 'bp_embed_get_cache', 'bp_embed_activity_cache', 10, 3 );
1848
- add_action( 'bp_embed_update_cache', 'bp_embed_activity_save_cache', 10, 3 );
1849
}
1850
- add_action( 'bp_dtheme_get_single_activity_content', 'bp_dtheme_embed_read_more' );
1851
1852
/**
1853
* Clean up 'embed_post_id' filter after comment recursion.
@@ -1855,7 +1958,7 @@ add_action( 'bp_dtheme_get_single_activity_content', 'bp_dtheme_embed_read_more'
1855
* This filter must be removed so that the non-comment filters take over again
1856
* once the comments are done being processed.
1857
*
1858
- * @since BuddyPress (1.5)
1859
*
1860
* @see bp_activity_comment_embed()
1861
* @uses remove_filter() To remove 'bp_get_activity_comment_id' from 'embed_post_id'.
@@ -1870,13 +1973,13 @@ add_action( 'bp_after_activity_comment', 'bp_activity_comment_embed_after_recurs
1870
*
1871
* Used during {@link BP_Embed::parse_oembed()} via {@link bp_activity_embed()}.
1872
*
1873
- * @since BuddyPress (1.5)
1874
*
1875
* @see BP_Embed::parse_oembed()
1876
* @uses bp_activity_get_meta()
1877
*
1878
* @param string $cache An empty string passed by BP_Embed::parse_oembed() for
1879
- * functions like this one to filter.
1880
* @param int $id The ID of the activity item.
1881
* @param string $cachekey The cache key generated in BP_Embed::parse_oembed().
1882
* @return mixed The cached embeds for this activity item.
@@ -1890,15 +1993,15 @@ function bp_embed_activity_cache( $cache, $id, $cachekey ) {
1890
*
1891
* Used during {@link BP_Embed::parse_oembed()} via {@link bp_activity_embed()}.