buddyboss.php
140 lines
| 1 | <?php |
| 2 | /** |
| 3 | * BuddyBoss integration class file |
| 4 | * |
| 5 | * @package SureTriggers |
| 6 | * @since 1.0.0 |
| 7 | */ |
| 8 | |
| 9 | namespace SureTriggers\Integrations\BuddyBoss; |
| 10 | |
| 11 | use SureTriggers\Controllers\IntegrationsController; |
| 12 | use SureTriggers\Integrations\Integrations; |
| 13 | use SureTriggers\Traits\SingletonLoader; |
| 14 | |
| 15 | /** |
| 16 | * Class BuddyBoss |
| 17 | * |
| 18 | * @package SureTriggers\Integrations\BuddyBoss |
| 19 | */ |
| 20 | class BuddyBoss extends Integrations { |
| 21 | |
| 22 | use SingletonLoader; |
| 23 | |
| 24 | /** |
| 25 | * ID of the integration |
| 26 | * |
| 27 | * @var string |
| 28 | */ |
| 29 | protected $id = 'BuddyBoss'; |
| 30 | |
| 31 | /** |
| 32 | * BuddyBoss constructor. |
| 33 | */ |
| 34 | public function __construct() { |
| 35 | $this->name = __( 'BuddyBoss', 'suretriggers' ); |
| 36 | parent::__construct(); |
| 37 | } |
| 38 | |
| 39 | /** |
| 40 | * Check if content has links. |
| 41 | * |
| 42 | * @param string $content content. |
| 43 | * @return array|string |
| 44 | */ |
| 45 | public static function st_content_has_links( $content ) { |
| 46 | // Define a regular expression pattern to match URLs. |
| 47 | $pattern = '/<a\b[^>]*href=["\']([^"\'#]+)/i'; |
| 48 | |
| 49 | // Use preg_match_all to find all links in the content. |
| 50 | preg_match_all( $pattern, $content, $matches ); |
| 51 | |
| 52 | // Return the array of matched links. |
| 53 | return $matches[1]; |
| 54 | } |
| 55 | |
| 56 | /** |
| 57 | * Attach an uploaded photo or video directly to a BuddyBoss activity via the |
| 58 | * native Media/Video components, so it renders on the feed the same way |
| 59 | * BuddyBoss's own activity composer does - independent of the content field. |
| 60 | * |
| 61 | * @param int $activity_id Activity ID the media should be linked to. |
| 62 | * @param string $media_url Publicly reachable URL of the image or video file. |
| 63 | * @param int $user_id User the media should be attributed to. |
| 64 | * @param int $group_id Optional. Group ID when posting to a group's stream. |
| 65 | * @return void |
| 66 | */ |
| 67 | public static function st_attach_media_to_activity( $activity_id, $media_url, $user_id, $group_id = 0 ) { |
| 68 | if ( empty( $activity_id ) || empty( $media_url ) ) { |
| 69 | return; |
| 70 | } |
| 71 | |
| 72 | if ( ! function_exists( 'bb_media_sideload_attachment' ) || ! function_exists( 'bp_activity_update_meta' ) ) { |
| 73 | return; |
| 74 | } |
| 75 | |
| 76 | $attachment_id = bb_media_sideload_attachment( $media_url ); |
| 77 | |
| 78 | if ( empty( $attachment_id ) ) { |
| 79 | return; |
| 80 | } |
| 81 | |
| 82 | $privacy = $group_id ? 'grouponly' : 'public'; |
| 83 | $is_video = (bool) preg_match( '/\.mp4([?#].*)?$/i', $media_url ); |
| 84 | |
| 85 | if ( $is_video ) { |
| 86 | if ( ! function_exists( 'bp_is_active' ) || ! bp_is_active( 'video' ) || ! function_exists( 'bp_video_add' ) ) { |
| 87 | return; |
| 88 | } |
| 89 | |
| 90 | $video_id = bp_video_add( |
| 91 | [ |
| 92 | 'attachment_id' => $attachment_id, |
| 93 | 'activity_id' => $activity_id, |
| 94 | 'user_id' => $user_id, |
| 95 | 'group_id' => $group_id, |
| 96 | 'privacy' => $privacy, |
| 97 | ] |
| 98 | ); |
| 99 | |
| 100 | if ( $video_id ) { |
| 101 | bp_activity_update_meta( $activity_id, 'bp_video_ids', (string) $video_id ); |
| 102 | } |
| 103 | return; |
| 104 | } |
| 105 | |
| 106 | if ( ! function_exists( 'bp_is_active' ) || ! bp_is_active( 'media' ) || ! function_exists( 'bp_media_add' ) ) { |
| 107 | return; |
| 108 | } |
| 109 | |
| 110 | $media_id = bp_media_add( |
| 111 | [ |
| 112 | 'attachment_id' => $attachment_id, |
| 113 | 'activity_id' => $activity_id, |
| 114 | 'user_id' => $user_id, |
| 115 | 'group_id' => $group_id, |
| 116 | 'privacy' => $privacy, |
| 117 | ] |
| 118 | ); |
| 119 | |
| 120 | if ( $media_id ) { |
| 121 | bp_activity_update_meta( $activity_id, 'bp_media_ids', (string) $media_id ); |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | /** |
| 126 | * Check plugin is installed. |
| 127 | * |
| 128 | * @return bool |
| 129 | */ |
| 130 | public function is_plugin_installed() { |
| 131 | if ( function_exists( 'buddypress' ) && isset( buddypress()->buddyboss ) && buddypress()->buddyboss ) { |
| 132 | return true; |
| 133 | } else { |
| 134 | return false; |
| 135 | } |
| 136 | } |
| 137 | } |
| 138 | |
| 139 | IntegrationsController::register( BuddyBoss::class ); |
| 140 |