more work on z6 commenting
This commit is contained in:
		| @@ -1233,19 +1233,20 @@ class Activity { | ||||
|  | ||||
| 	static function decode_note($act) { | ||||
|  | ||||
| 		$response_activity = false; | ||||
|  | ||||
| 		$s = []; | ||||
|  | ||||
|  | ||||
|  | ||||
| 		$content = self::get_content($act->obj); | ||||
|  | ||||
| 		if(is_array($act->obj)) { | ||||
| 			$content = self::get_content($act->obj); | ||||
| 		} | ||||
| 			 | ||||
| 		$s['owner_xchan']  = $act->actor['id']; | ||||
| 		$s['author_xchan'] = $act->actor['id']; | ||||
|  | ||||
| 		$s['mid']        = $act->id; | ||||
| 		$s['mid']        = $act->obj['id']; | ||||
| 		$s['parent_mid'] = $act->parent_id; | ||||
|  | ||||
|  | ||||
| 		if($act->data['published']) { | ||||
| 			$s['created'] = datetime_convert('UTC','UTC',$act->data['published']); | ||||
| 		} | ||||
| @@ -1259,42 +1260,59 @@ class Activity { | ||||
| 			$s['edited'] = datetime_convert('UTC','UTC',$act->obj['updated']); | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		if(in_array($act->type, [ 'Like', 'Dislike', 'Flag', 'Block', 'Announce', 'Accept', 'Reject', 'TentativeAccept' ])) { | ||||
|  | ||||
| 			$response_activity = true; | ||||
|  | ||||
| 			$s['mid'] = $act->id; | ||||
| 			$s['parent_mid'] = $act->obj['id']; | ||||
|  | ||||
| 			// over-ride the object timestamp with the activity | ||||
|  | ||||
| 			if($act->data['published']) { | ||||
| 				$s['created'] = datetime_convert('UTC','UTC',$act->data['published']); | ||||
| 			} | ||||
|  | ||||
| 			if($act->data['updated']) { | ||||
| 				$s['edited'] = datetime_convert('UTC','UTC',$act->data['updated']); | ||||
| 			} | ||||
|  | ||||
| 			$obj_actor = ((isset($act->obj['actor'])) ? $act->obj['actor'] : $act->get_actor('attributedTo', $act->obj)); | ||||
| 			// ensure we store the original actor | ||||
| 			self::actor_store($obj_actor['id'],$obj_actor); | ||||
|  | ||||
| 			$mention = self::get_actor_bbmention($obj_actor['id']); | ||||
|  | ||||
| 			if($act->type === 'Like') { | ||||
| 				$content['content'] = sprintf( t('Likes %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; | ||||
| 			} | ||||
| 			if($act->type === 'Dislike') { | ||||
| 				$content['content'] = sprintf( t('Doesn\'t like %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; | ||||
| 			} | ||||
| 			if($act->type === 'Accept' && $act->obj['type'] === 'Event' ) { | ||||
| 				$content['content'] = sprintf( t('Will attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; | ||||
| 			} | ||||
| 			if($act->type === 'Reject' && $act->obj['type'] === 'Event' ) { | ||||
| 				$content['content'] = sprintf( t('Will not attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; | ||||
| 			} | ||||
| 			if($act->type === 'TentativeAccept' && $act->obj['type'] === 'Event' ) { | ||||
| 				$content['content'] = sprintf( t('May attend %1$s\'s %2$s'),$mention,$act->obj['type']) . "\n\n" . $content['content']; | ||||
| 			} | ||||
| 			if($act->type === 'Announce') { | ||||
| 				$content['content'] = sprintf( t('🔁 Repeated %1$s\'s %2$s'), $mention, $act->obj['type']); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if(! $s['created']) | ||||
| 			$s['created'] = datetime_convert(); | ||||
|  | ||||
| 		if(! $s['edited']) | ||||
| 			$s['edited'] = $s['created']; | ||||
|  | ||||
| 		if(in_array($act->type,['Announce'])) { | ||||
| 			$root_content = self::get_content($act->raw); | ||||
|  | ||||
| 			$s['title']    = self::bb_content($root_content,'name'); | ||||
| 			$s['summary']  = self::bb_content($root_content,'summary'); | ||||
| 			$s['body']     = (self::bb_content($root_content,'bbcode') ? : self::bb_content($root_content,'content')); | ||||
|  | ||||
| 			if(strpos($s['body'],'[share') === false) { | ||||
|  | ||||
| 				// @fixme - error check and set defaults | ||||
|  | ||||
| 				$name = urlencode($act->obj['actor']['name']); | ||||
| 				$profile = $act->obj['actor']['id']; | ||||
| 				$photo = $act->obj['icon']['url']; | ||||
|  | ||||
| 				$s['body'] .= "\r\n[share author='" . $name . | ||||
| 					"' profile='" . $profile . | ||||
| 					"' avatar='" . $photo .  | ||||
| 					"' link='" . $act->obj['id'] . | ||||
| 					"' auth='" . ((is_matrix_url($act->obj['id'])) ? 'true' : 'false' ) .  | ||||
| 					"' posted='" . $act->obj['published'] .  | ||||
| 					"' message_id='" . $act->obj['id'] .  | ||||
| 				"']"; | ||||
| 			} | ||||
| 		} | ||||
| 		else { | ||||
| 			$s['title']    = self::bb_content($content,'name'); | ||||
| 			$s['summary']  = self::bb_content($content,'summary'); | ||||
| 			$s['body']     = (self::bb_content($content,'bbcode') ? : self::bb_content($content,'content')); | ||||
| 		} | ||||
| 		$s['title']    = self::bb_content($content,'name'); | ||||
| 		$s['summary']  = self::bb_content($content,'summary'); | ||||
| 		$s['body']     = ((self::bb_content($content,'bbcode') && (! $response_activity)) ? self::bb_content($content,'bbcode') : self::bb_content($content,'content')); | ||||
|  | ||||
| 		$s['verb']     = self::activity_mapper($act->type); | ||||
|  | ||||
| @@ -1306,56 +1324,227 @@ class Activity { | ||||
| 		$s['obj']      = $act->obj; | ||||
|  | ||||
| 		$instrument = $act->get_property_obj('instrument'); | ||||
| 		if(! $instrument) | ||||
| 		if((! $instrument) && (! $response_activity)) { | ||||
| 			$instrument = $act->get_property_obj('instrument',$act->obj); | ||||
| 		} | ||||
|  | ||||
| 		if($instrument && array_key_exists('type',$instrument)  | ||||
| 			&& $instrument['type'] === 'Service' && array_key_exists('name',$instrument)) { | ||||
| 			$s['app'] = escape_tags($instrument['name']); | ||||
| 		} | ||||
|  | ||||
| 		$a = self::decode_taxonomy($act->obj); | ||||
| 		if($a) { | ||||
| 			$s['term'] = $a; | ||||
|  | ||||
| 		if(! $response_activity) { | ||||
| 			$a = self::decode_taxonomy($act->obj); | ||||
| 			if($a) { | ||||
| 				$s['term'] = $a; | ||||
| 				foreach($a as $b) { | ||||
| 					if($b['ttype'] === TERM_EMOJI) { | ||||
| 						$s['title'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['title']); | ||||
| 						$s['summary'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['summary']); | ||||
| 						$s['body'] = str_replace($b['term'],'[img=16x16]' . $b['url'] . '[/img]',$s['body']); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			$a = self::decode_attachment($act->obj); | ||||
| 			if($a) { | ||||
| 				$s['attach'] = $a; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		$a = self::decode_attachment($act->obj); | ||||
| 		if($a) { | ||||
| 			$s['attach'] = $a; | ||||
| 		if($act->obj['type'] === 'Note' && $s['attach']) { | ||||
| 			$s['body'] .= self::bb_attach($s['attach'],$s['body']); | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		// we will need a hook here to extract magnet links e.g. peertube | ||||
| 		// right now just link to the largest mp4 we find that will fit in our | ||||
| 		// standard content region | ||||
|  | ||||
| 		if($act->obj['type'] === 'Video') { | ||||
| 		if(! $response_activity) { | ||||
| 			if($act->obj['type'] === 'Video') { | ||||
|  | ||||
| 			$vtypes = [ | ||||
| 				'video/mp4', | ||||
| 				'video/ogg', | ||||
| 				'video/webm' | ||||
| 			]; | ||||
| 				$vtypes = [ | ||||
| 					'video/mp4', | ||||
| 					'video/ogg', | ||||
| 					'video/webm' | ||||
| 				]; | ||||
|  | ||||
| 			$mps = []; | ||||
| 			if(array_key_exists('url',$act->obj) && is_array($act->obj['url'])) { | ||||
| 				foreach($act->obj['url'] as $vurl) { | ||||
| 					if(in_array($vurl['mimeType'], $vtypes)) { | ||||
| 						if(! array_key_exists('width',$vurl)) { | ||||
| 							$vurl['width'] = 0; | ||||
| 				$mps = []; | ||||
| 				$ptr = null; | ||||
|  | ||||
| 				if(array_key_exists('url',$act->obj)) { | ||||
| 					if(is_array($act->obj['url'])) { | ||||
| 						if(array_key_exists(0,$act->obj['url'])) {				 | ||||
| 							$ptr = $act->obj['url']; | ||||
| 						} | ||||
| 						$mps[] = $vurl; | ||||
| 						else { | ||||
| 							$ptr = [ $act->obj['url'] ]; | ||||
| 						} | ||||
| 						foreach($ptr as $vurl) { | ||||
| 							// peertube uses the non-standard element name 'mimeType' here | ||||
| 							if(array_key_exists('mimeType',$vurl)) { | ||||
| 								if(in_array($vurl['mimeType'], $vtypes)) { | ||||
| 									if(! array_key_exists('width',$vurl)) { | ||||
| 										$vurl['width'] = 0; | ||||
| 									} | ||||
| 									$mps[] = $vurl; | ||||
| 								} | ||||
| 							} | ||||
| 							elseif(array_key_exists('mediaType',$vurl)) { | ||||
| 								if(in_array($vurl['mediaType'], $vtypes)) { | ||||
| 									if(! array_key_exists('width',$vurl)) { | ||||
| 										$vurl['width'] = 0; | ||||
| 									} | ||||
| 									$mps[] = $vurl; | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					if($mps) { | ||||
| 						usort($mps,[ __CLASS__, 'vid_sort' ]); | ||||
| 						foreach($mps as $m) { | ||||
| 							if(intval($m['width']) < 500 && self::media_not_in_body($m['href'],$s['body'])) { | ||||
| 								$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]'; | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) { | ||||
| 						$s['body'] .= "\n\n" . '[video]' . $act->obj['url'] . '[/video]'; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			if($mps) { | ||||
| 				usort($mps,'as_vid_sort'); | ||||
| 				foreach($mps as $m) { | ||||
| 					if(intval($m['width']) < 500) { | ||||
| 						$s['body'] .= "\n\n" . '[video]' . $m['href'] . '[/video]'; | ||||
| 						break; | ||||
|  | ||||
| 			if($act->obj['type'] === 'Audio') { | ||||
|  | ||||
| 				$atypes = [ | ||||
| 					'audio/mpeg', | ||||
| 					'audio/ogg', | ||||
| 					'audio/wav' | ||||
| 				]; | ||||
|  | ||||
| 				$ptr = null; | ||||
|  | ||||
| 				if(array_key_exists('url',$act->obj)) { | ||||
| 					if(is_array($act->obj['url'])) { | ||||
| 						if(array_key_exists(0,$act->obj['url'])) {				 | ||||
| 							$ptr = $act->obj['url']; | ||||
| 						} | ||||
| 						else { | ||||
| 							$ptr = [ $act->obj['url'] ]; | ||||
| 						} | ||||
| 						foreach($ptr as $vurl) { | ||||
| 							if(in_array($vurl['mediaType'], $atypes) && self::media_not_in_body($vurl['href'],$s['body'])) { | ||||
| 								$s['body'] .= "\n\n" . '[audio]' . $vurl['href'] . '[/audio]'; | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					elseif(is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) { | ||||
| 						$s['body'] .= "\n\n" . '[audio]' . $act->obj['url'] . '[/audio]'; | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 			} | ||||
|  | ||||
| 			if($act->obj['type'] === 'Image') { | ||||
|  | ||||
| 				$ptr = null; | ||||
|  | ||||
| 				if(array_key_exists('url',$act->obj)) { | ||||
| 					if(is_array($act->obj['url'])) { | ||||
| 						if(array_key_exists(0,$act->obj['url'])) {				 | ||||
| 							$ptr = $act->obj['url']; | ||||
| 						} | ||||
| 						else { | ||||
| 							$ptr = [ $act->obj['url'] ]; | ||||
| 						} | ||||
| 						foreach($ptr as $vurl) { | ||||
| 							if(strpos($s['body'],$vurl['href']) === false) { | ||||
| 								$s['body'] .= "\n\n" . '[zmg]' . $vurl['href'] . '[/zmg]'; | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					elseif(is_string($act->obj['url'])) { | ||||
| 						if(strpos($s['body'],$act->obj['url']) === false) { | ||||
| 							$s['body'] .= "\n\n" . '[zmg]' . $act->obj['url'] . '[/zmg]'; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
|  | ||||
| 			if($act->obj['type'] === 'Page' && ! $s['body'])  { | ||||
|  | ||||
| 				$ptr  = null; | ||||
| 				$purl = EMPTY_STR; | ||||
|  | ||||
| 				if(array_key_exists('url',$act->obj)) { | ||||
| 					if(is_array($act->obj['url'])) { | ||||
| 						if(array_key_exists(0,$act->obj['url'])) {				 | ||||
| 							$ptr = $act->obj['url']; | ||||
| 						} | ||||
| 						else { | ||||
| 							$ptr = [ $act->obj['url'] ]; | ||||
| 						} | ||||
| 						foreach($ptr as $vurl) { | ||||
| 							if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') { | ||||
| 								$purl = $vurl['href']; | ||||
| 								break; | ||||
| 							} | ||||
| 							elseif(array_key_exists('mimeType',$vurl) && $vurl['mimeType'] === 'text/html') { | ||||
| 								$purl = $vurl['href']; | ||||
| 								break; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 					elseif(is_string($act->obj['url'])) { | ||||
| 						$purl = $act->obj['url']; | ||||
| 					} | ||||
| 					if($purl) { | ||||
| 						$li = z_fetch_url(z_root() . '/linkinfo?binurl=' . bin2hex($purl)); | ||||
| 						if($li['success'] && $li['body']) { | ||||
| 							$s['body'] .= "\n" . $li['body']; | ||||
| 						} | ||||
| 						else { | ||||
| 							$s['body'] .= "\n\n" . $purl; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|  | ||||
|  | ||||
| 		if(in_array($act->obj['type'],[ 'Note','Article','Page' ])) { | ||||
| 			$ptr = null; | ||||
|  | ||||
| 			if(array_key_exists('url',$act->obj)) { | ||||
| 				if(is_array($act->obj['url'])) { | ||||
| 					if(array_key_exists(0,$act->obj['url'])) {				 | ||||
| 						$ptr = $act->obj['url']; | ||||
| 					} | ||||
| 					else { | ||||
| 						$ptr = [ $act->obj['url'] ]; | ||||
| 					} | ||||
| 					foreach($ptr as $vurl) { | ||||
| 						if(array_key_exists('mediaType',$vurl) && $vurl['mediaType'] === 'text/html') { | ||||
| 							$s['plink'] = $vurl['href']; | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				elseif(is_string($act->obj['url'])) { | ||||
| 					$s['plink'] = $act->obj['url']; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if(! $s['plink']) { | ||||
| 			$s['plink'] = $s['mid']; | ||||
| 		} | ||||
|  | ||||
| 		if($act->recips && (! in_array(ACTIVITY_PUBLIC_INBOX,$act->recips))) | ||||
| @@ -1371,8 +1560,6 @@ class Activity { | ||||
|  | ||||
| 	} | ||||
|  | ||||
|  | ||||
|  | ||||
| 	static function announce_note($channel,$observer_hash,$act) { | ||||
|  | ||||
| 		$s = []; | ||||
|   | ||||
| @@ -1418,7 +1418,7 @@ logger('4'); | ||||
|  | ||||
| 			$DR = new DReport(z_root(),$sender,$d,$arr['mid']); | ||||
|  | ||||
| 			$channel = channelx_by_hash($d); | ||||
| 			$channel = channelx_by_portid($d); | ||||
|  | ||||
| 			if (! $channel) { | ||||
| 				$DR->update('recipient not found'); | ||||
| @@ -1505,8 +1505,10 @@ logger('4'); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if($arr['mid'] != $arr['parent_mid']) { | ||||
| logger('item: ' . print_r($arr,true), LOGGER_DATA); | ||||
|  | ||||
| 			if($arr['mid'] !== $arr['parent_mid']) { | ||||
| logger('checking source: "' . $arr['mid'] . '" != "' . $arr['parent_mid'] . '"'); | ||||
| 				// check source route. | ||||
| 				// We are only going to accept comments from this sender if the comment has the same route as the top-level-post, | ||||
| 				// this is so that permissions mismatches between senders apply to the entire conversation | ||||
| @@ -1591,7 +1593,7 @@ logger('4'); | ||||
| 					$arr['route'] = $last_prior_route; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| logger('hey'); | ||||
| 			$ab = q("select * from abook where abook_channel = %d and abook_xchan = '%s'", | ||||
| 				intval($channel['channel_id']), | ||||
| 				dbesc($arr['owner_xchan']) | ||||
|   | ||||
| @@ -2333,6 +2333,21 @@ function channelx_by_hash($hash) { | ||||
| 	return(($r) ? $r[0] : false); | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * @brief Get a channel array by a channel_hash. | ||||
|  * | ||||
|  * @param string $hash | ||||
|  * @return array|boolean false if channel ID not found, otherwise the channel array | ||||
|  */ | ||||
| function channelx_by_portid($hash) { | ||||
| 	$r = q("SELECT * FROM channel left join xchan on channel_portable_id = xchan_hash WHERE channel_portable_id = '%s' and channel_removed = 0 LIMIT 1", | ||||
| 		dbesc($hash) | ||||
| 	); | ||||
|  | ||||
| 	return(($r) ? $r[0] : false); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief Get a channel array by a channel ID. | ||||
|  * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user