| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2020-02-09 14:45:36 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @copyright Copyright (C) 2020, Friendica | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @license GNU AGPL version 3 or any later version | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as | 
					
						
							|  |  |  |  * published by the Free Software Foundation, either version 3 of the | 
					
						
							|  |  |  |  * License, or (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Friendica\Module\Item; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Friendica\BaseModule; | 
					
						
							|  |  |  | use Friendica\Core\Session; | 
					
						
							| 
									
										
										
										
											2019-10-23 14:24:19 +00:00
										 |  |  | use Friendica\Core\System; | 
					
						
							| 
									
										
										
										
											2019-12-15 21:34:11 +00:00
										 |  |  | use Friendica\DI; | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | use Friendica\Model\Item; | 
					
						
							|  |  |  | use Friendica\Network\HTTPException; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Module for ignoring threads or user items | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-10-24 07:09:47 +00:00
										 |  |  | class Ignore extends BaseModule | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2019-11-05 21:48:54 +00:00
										 |  |  | 	public static function rawContent(array $parameters = []) | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2019-12-15 22:28:01 +00:00
										 |  |  | 		$l10n = DI::l10n(); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (!Session::isAuthenticated()) { | 
					
						
							|  |  |  | 			throw new HttpException\ForbiddenException($l10n->t('Access denied.')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-15 22:28:01 +00:00
										 |  |  | 		$args = DI::args(); | 
					
						
							|  |  |  | 		$dba = DI::dba(); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-24 15:18:29 +00:00
										 |  |  | 		$message_id = intval($args->get(2)); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if (empty($message_id) || !is_int($message_id)) { | 
					
						
							|  |  |  | 			throw new HTTPException\BadRequestException(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$thread = Item::selectFirstThreadForUser(local_user(), ['uid', 'ignored'], ['iid' => $message_id]); | 
					
						
							|  |  |  | 		if (!$dba->isResult($thread)) { | 
					
						
							|  |  |  | 			throw new HTTPException\BadRequestException(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Numeric values are needed for the json output further below
 | 
					
						
							|  |  |  | 		$ignored = !empty($thread['ignored']) ? 0 : 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-23 14:24:19 +00:00
										 |  |  | 		switch ($thread['uid'] ?? 0) { | 
					
						
							|  |  |  | 			// if the thread is from the current user
 | 
					
						
							|  |  |  | 			case local_user(): | 
					
						
							|  |  |  | 				$dba->update('thread', ['ignored' => $ignored], ['iid' => $message_id]); | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2019-10-23 19:29:17 +00:00
										 |  |  | 			// 0 (null will get transformed to 0) => it's a public post
 | 
					
						
							| 
									
										
										
										
											2019-10-23 14:24:19 +00:00
										 |  |  | 			case 0: | 
					
						
							|  |  |  | 				$dba->update('user-item', ['ignored' => $ignored], ['iid' => $message_id, 'uid' => local_user()], true); | 
					
						
							|  |  |  | 				break; | 
					
						
							| 
									
										
										
										
											2019-10-23 19:29:17 +00:00
										 |  |  | 			// Throws a BadRequestException and not a ForbiddenException on purpose
 | 
					
						
							|  |  |  | 			// Avoids harvesting existing, but forbidden IIDs (security issue)
 | 
					
						
							| 
									
										
										
										
											2019-10-23 14:24:19 +00:00
										 |  |  | 			default: | 
					
						
							|  |  |  | 				throw new HTTPException\BadRequestException(); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// See if we've been passed a return path to redirect to
 | 
					
						
							|  |  |  | 		$return_path = $_REQUEST['return'] ?? ''; | 
					
						
							|  |  |  | 		if (!empty($return_path)) { | 
					
						
							|  |  |  | 			$rand = '_=' . time(); | 
					
						
							|  |  |  | 			if (strpos($return_path, '?')) { | 
					
						
							|  |  |  | 				$rand = "&$rand"; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$rand = "?$rand"; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-15 23:28:31 +00:00
										 |  |  | 			DI::baseUrl()->redirect($return_path . $rand); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// the json doesn't really matter, it will either be 0 or 1
 | 
					
						
							| 
									
										
										
										
											2019-12-01 04:15:58 +00:00
										 |  |  | 		System::jsonExit($ignored); | 
					
						
							| 
									
										
										
										
											2019-10-21 19:18:59 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |