60 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | declare(strict_types = 1); | ||
|  | 
 | ||
|  | namespace Plugin\UnboundGroup\Controller; | ||
|  | 
 | ||
|  | use App\Core\Controller; | ||
|  | use App\Core\Form; | ||
|  | use function App\Core\I18n\_m; | ||
|  | use App\Entity as E; | ||
|  | use App\Util\Common; | ||
|  | use App\Util\Exception\ClientException; | ||
|  | use Component\Subscription\Subscription; | ||
|  | use Plugin\ActivityPub\Util\Explorer; | ||
|  | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
|  | use Symfony\Component\Form\Extension\Core\Type\TextType; | ||
|  | use Symfony\Component\HttpFoundation\Request; | ||
|  | 
 | ||
|  | class GroupSettings extends Controller | ||
|  | { | ||
|  |     /** | ||
|  |      * Manage the linksTo collection of a Group or Organisation Actor | ||
|  |      */ | ||
|  |     public static function groupLinks(Request $request, E\Actor $target, string $details_id) | ||
|  |     { | ||
|  |         $actor = Common::ensureLoggedIn()->getActor(); | ||
|  |         if (!$actor->canModerate($target)) { | ||
|  |             throw new ClientException(_m('You don\'t have enough permissions to edit {nickname}\'s settings', ['{nickname}' => $target->getNickname()])); | ||
|  |         } | ||
|  | 
 | ||
|  |         $form_definition = [ | ||
|  |             ['new_link', TextType::class, ['label' => _m('Link to'), 'required' => true, 'help' => _m('Enter the URI.')]], | ||
|  |             [$add_link_to_form_name = 'save_group_links', SubmitType::class, ['label' => _m('Add link')]], | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $add_link_to_form = Form::create($form_definition); | ||
|  | 
 | ||
|  |         if ($request->getMethod() === 'POST' && $request->request->has($add_link_to_form_name)) { | ||
|  |             $add_link_to_form->handleRequest($request); | ||
|  |             if ($add_link_to_form->isSubmitted() && $add_link_to_form->isValid()) { | ||
|  |                 if (Common::isValidHttpUrl($new_uri = $add_link_to_form->getData()['new_link'])) { | ||
|  |                     $new_link = Explorer::getOneFromUri($new_uri); | ||
|  |                     if (\is_null(Subscription::subscribe(subject: $target, object: $new_link, source: 'ActivityPub via FEP-2100'))) { | ||
|  |                         throw new ClientException(_m('This group is already linked from {nickname}', ['{nickname}' => $new_link->getNickname()])); | ||
|  |                     } | ||
|  |                     Subscription::refreshSubscriptionCount($target, $new_link); | ||
|  |                     Form::forceRedirect($add_link_to_form, $request); | ||
|  |                 } else { | ||
|  |                     throw new ClientException(_m('Invalid URI given.')); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         return [ | ||
|  |             '_template'          => 'self_tags_settings.fragment.html.twig', | ||
|  |             'add_self_tags_form' => $add_link_to_form->createView(), | ||
|  |         ]; | ||
|  |     } | ||
|  | } |