. // }}} namespace App\Core\Modules; use App\Entity\Note; use App\Util\Common; use Symfony\Component\Form\Form; use Symfony\Component\HttpFoundation\Request; /** * Base class for all GNU social modules (plugins and components) */ abstract class Module { /** * Serialize the class to store in the cache * * @param mixed $state */ public static function __set_state($state) { $class = get_called_class(); $obj = new $class(); foreach ($state as $k => $v) { $obj->{$k} = $v; } return $obj; } /** * Handle the $form submission for the note action for note if * $note->getId() == $data['note_id'] */ public static function noteActionHandle(Request $request, Form $form, Note $note, string $form_name, callable $handle) { if ('POST' === $request->getMethod() && $request->request->has($form_name)) { $form->handleRequest($request); if ($form->isSubmitted()) { $data = $form->getData(); // Loose comparison if ($data['note_id'] != $note->getId()) { return Event::next; } else { $user = Common::user(); if (!$note->isVisibleTo($user)) { // ^ Ensure user isn't trying to trip us up Log::error('Suspicious activity: user ' . $user->getNickname() . ' tried to repeat note ' . $note->getId() . ', but they shouldn\'t have access to it'); throw new NoSuchNoteException(); } else { if ($form->isValid()) { $ret = $handle($note, $data, $user); if ($ret != null) { return $ret; } } else { throw new InvalidFormException(); } } } } } } }