<div class="inform">
                            <fieldset>
                                <legend>Enter your theme infos and submit</legend>
                                <div class="infldset txtarea">
                                    <label class="required">
                                        <strong>Theme name <span>(Required)</span></strong><br />
                                        <input class="longinput" type="text" name="name" value="<?php 
echo isset(Request::getParsedBody()['name']) ? Request::getParsedBody()['name'] : '';
?>
" size="80" maxlength="70" tabindex="1" required><br/>
                                    </label>
                                    <label class="required">
                                        <strong>Repository URL <span>(Required)</span></strong><br />
                                        <input class="longinput" type="url" name="homepage" value="<?php 
echo isset(Request::getParsedBody()['homepage']) ? Request::getParsedBody()['homepage'] : '';
?>
" size="80" maxlength="70" tabindex="2" pattern="https://github\.com/[\w\-]+/[\w\-]+" required>
                                    </label>
                                </div>
                            </fieldset>
                        </div>
                        <p class="buttons"><input type="submit" name="submit" value="Submit" tabindex="3" accesskey="s" /></p>
 public function update_permissions()
 {
     $form = array_map('intval', Request::getParsedBody());
     $form = Container::get('hooks')->fire('model.admin.permissions.plugins.private-messages.form', $form);
     $update = array();
     foreach ($form as $key => $input) {
         // Make sure the input is never a negative value
         if ($input < 0) {
             $input = 0;
         }
         // Get the group ID from key_gX
         $group_id = filter_var($key, FILTER_SANITIZE_NUMBER_INT);
         if ($group_id != '') {
             // Clean key without the group ID
             if ($group_id < 10) {
                 $key_cleaned = substr($key, 0, -3);
             } elseif ($group_id < 100) {
                 $key_cleaned = substr($key, 0, -4);
             } else {
                 $key_cleaned = substr($key, 0, -5);
             }
             // Build the array for the query
             $update[$group_id]['g_' . $key_cleaned] = $input;
         }
     }
     foreach ($update as $group_id => $values) {
         DB::for_table('groups')->find_one($group_id)->set($values)->save();
     }
     return Router::redirect(Router::pathFor('infoPlugin', ['name' => 'private-messages']), __('Perms updated redirect'));
 }
 public function send($req, $res, $args)
 {
     if (!isset($args['uid'])) {
         $args['uid'] = null;
     }
     if (!isset($args['tid'])) {
         $args['tid'] = null;
     }
     if (Request::isPost()) {
         // First raw validation
         $data = array_merge(array('username' => null, 'subject' => null, 'message' => null, 'smilies' => 0, 'preview' => null), Request::getParsedBody());
         $data = array_map(array('FeatherBB\\Core\\Utils', 'trim'), $data);
         $conv = false;
         if (!is_null($args['tid'])) {
             if ($args['tid'] < 1) {
                 throw new Error('Wrong conversation ID', 400);
             }
             if (!($conv = $this->model->getConversation($args['tid'], User::get()->id))) {
                 throw new Error('Unknown conversation ID', 400);
             }
         }
         // Preview message
         if (Input::post('preview')) {
             // Make breadcrumbs
             $this->crumbs[] = __('Reply', 'private_messages');
             $this->crumbs[] = __('Preview');
             Utils::generateBreadcrumbs($this->crumbs);
             Container::get('hooks')->fire('conversationsPlugin.send.preview');
             $msg = Container::get('parser')->parse_message($data['req_message'], $data['smilies']);
             View::setPageInfo(array('parsed_message' => $msg, 'username' => Utils::escape($data['username']), 'subject' => Utils::escape($data['subject']), 'message' => Utils::escape($data['req_message'])))->addTemplate('send.php')->display();
         } else {
             // Prevent flood
             if (!is_null($data['preview']) && User::get()['last_post'] != '' && Container::get('now') - User::get()['last_post'] < Container::get('prefs')->get(User::get(), 'post.min_interval')) {
                 throw new Error(sprintf(__('Flood start'), Container::get('prefs')->get(User::get(), 'post.min_interval'), Container::get('prefs')->get(User::get(), 'post.min_interval') - (Container::get('now') - User::get()['last_post'])), 429);
             }
             if (!$conv) {
                 // Validate username / TODO : allow multiple usernames
                 if (!($user = $this->model->isAllowed($data['username']))) {
                     throw new Error('You can\'t send an PM to ' . ($data['username'] ? $data['username'] : '******'), 400);
                 }
                 // Avoid self messages
                 if ($user->id == User::get()->id) {
                     throw new Error('No self message', 403);
                 }
                 // Validate subject
                 if (ForumSettings::get('o_censoring') == '1') {
                     $data['subject'] = Utils::trim(Utils::censor($data['subject']));
                 }
                 if (empty($data['subject'])) {
                     throw new Error('No subject or censored subject', 400);
                 } else {
                     if (Utils::strlen($data['subject']) > 70) {
                         throw new Error('Too long subject', 400);
                     } else {
                         if (ForumSettings::get('p_subject_all_caps')['p_subject_all_caps'] == '0' && Utils::is_all_uppercase($data['subject']) && !User::get()->is_admmod) {
                             throw new Error('All caps subject forbidden', 400);
                         }
                     }
                 }
             }
             // TODO : inbox full
             // Validate message
             if (ForumSettings::get('o_censoring') == '1') {
                 $data['req_message'] = Utils::trim(Utils::censor($data['req_message']));
             }
             if (empty($data['req_message'])) {
                 throw new Error('No message or censored message', 400);
             } else {
                 if (Utils::strlen($data['req_message']) > ForumEnv::get('FEATHER_MAX_POSTSIZE')) {
                     throw new Error('Too long message', 400);
                 } else {
                     if (ForumSettings::get('p_subject_all_caps')['p_subject_all_caps'] == '0' && Utils::is_all_uppercase($data['subject']) && !User::get()->is_admmod) {
                         throw new Error('All caps message forbidden', 400);
                     }
                 }
             }
             // Send ... TODO : when perms will be ready
             // Check if the receiver has the PM enabled
             // Check if he has reached his max limit of PM
             // Block feature ?
             if (!$conv) {
                 $conv_data = array('subject' => $data['subject'], 'poster' => User::get()->username, 'poster_id' => User::get()->id, 'num_replies' => 0, 'last_post' => Container::get('now'), 'last_poster' => User::get()->username);
                 $args['tid'] = $this->model->addConversation($conv_data);
             }
             if ($args['tid']) {
                 $msg_data = array('poster' => User::get()->username, 'poster_id' => User::get()->id, 'poster_ip' => Utils::getIp(), 'message' => $data['req_message'], 'hide_smilies' => $data['smilies'], 'sent' => Container::get('now'));
                 if ($conv) {
                     // Reply to an existing conversation
                     if ($msg_id = $this->model->addMessage($msg_data, $args['tid'])) {
                         return Router::redirect(Router::pathFor('Conversations.home'), sprintf(__('Reply success', 'private_messages'), $conv->subject));
                     }
                 } else {
                     // Add message in conversation + add receiver (create new conversation)
                     if ($msg_id = $this->model->addMessage($msg_data, $args['tid'], array($user->id, User::get()->id))) {
                         return Router::redirect(Router::pathFor('Conversations.home'), sprintf(__('Send success', 'private_messages'), $user->username));
                     }
                 }
             } else {
                 throw new Error('Unable to create conversation');
             }
         }
     } else {
         Container::get('hooks')->fire('conversationsPlugin.send.display');
         // New conversation
         if (!is_null($args['uid'])) {
             if ($args['uid'] < 2) {
                 throw new Error('Wrong user ID', 400);
             }
             if ($user = $this->model->getUserByID($args['uid'])) {
                 View::setPageInfo(array('username' => Utils::escape($user->username)));
             } else {
                 throw new Error('Unable to find user', 400);
             }
         }
         // Reply
         if (!is_null($args['tid'])) {
             if ($args['tid'] < 1) {
                 throw new Error('Wrong conversation ID', 400);
             }
             if ($conv = $this->model->getConversation($args['tid'], User::get()->id)) {
                 $inbox = DB::for_table('pms_folders')->find_one($conv->folder_id);
                 $this->crumbs[Router::pathFor('Conversations.home', ['inbox_id' => $inbox['id']])] = $inbox['name'];
                 $this->crumbs[] = __('Reply', 'private_messages');
                 $this->crumbs[] = $conv['subject'];
                 Utils::generateBreadcrumbs($this->crumbs);
                 return View::setPageInfo(array('current_inbox' => $inbox, 'conv' => $conv, 'msg_data' => $this->model->getMessagesFromConversation($args['tid'], User::get()->id, 5)))->addTemplate('reply.php')->display();
             } else {
                 throw new Error('Unknown conversation ID', 400);
             }
         }
         $this->crumbs[] = __('Send', 'private_messages');
         if (isset($user)) {
             $this->crumbs[] = $user->username;
         }
         Utils::generateBreadcrumbs($this->crumbs);
         View::addTemplate('send.php')->display();
     }
 }