Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 125
admin_form
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
210.00
0.00% covered (danger)
0.00%
0 / 125
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 5
 check_allow
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 12
 bind
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 6
 submit
0.00% covered (danger)
0.00%
0 / 1
56.00
0.00% covered (danger)
0.00%
0 / 72
 render
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 30
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\message;
/**
* Class admin_form
* Displays a message to the user and allows him to send an email
*/
class admin_form extends form
{
    /** @var \phpbb\config\db_text */
    protected $config_text;
    /** @var \phpbb\event\dispatcher_interface */
    protected $dispatcher;
    /** @var string */
    protected $subject;
    /** @var string */
    protected $sender_name;
    /** @var string */
    protected $sender_address;
    /**
    * Construct
    *
    * @param \phpbb\auth\auth $auth
    * @param \phpbb\config\config $config
    * @param \phpbb\config\db_text $config_text
    * @param \phpbb\db\driver\driver_interface $db
    * @param \phpbb\user $user
    * @param \phpbb\event\dispatcher_interface $dispatcher
    * @param string $phpbb_root_path
    * @param string $phpEx
    */
    public function __construct(\phpbb\auth\auth $auth, \phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\db\driver\driver_interface $db, \phpbb\user $user, \phpbb\event\dispatcher_interface $dispatcher, $phpbb_root_path, $phpEx)
    {
        parent::__construct($auth, $config, $db, $user, $phpbb_root_path, $phpEx);
        $this->config_text = $config_text;
        $this->dispatcher = $dispatcher;
    }
    /**
    * {inheritDoc}
    */
    public function check_allow()
    {
        $error = parent::check_allow();
        if ($error)
        {
            return $error;
        }
        if (!$this->config['contact_admin_form_enable'])
        {
            return 'NO_CONTACT_PAGE';
        }
        return false;
    }
    /**
    * {inheritDoc}
    */
    public function bind(\phpbb\request\request_interface $request)
    {
        parent::bind($request);
        $this->subject = $request->variable('subject', '', true);
        $this->sender_address = $request->variable('email', '');
        $this->sender_name = $request->variable('name', '', true);
    }
    /**
    * {inheritDoc}
    */
    public function submit(\messenger $messenger)
    {
        if (!$this->subject)
        {
            $this->errors[] = $this->user->lang['EMPTY_SUBJECT_EMAIL'];
        }
        if (!$this->body)
        {
            $this->errors[] = $this->user->lang['EMPTY_MESSAGE_EMAIL'];
        }
        $subject = $this->subject;
        $body = $this->body;
        $errors = $this->errors;
        /**
        * You can use this event to modify subject and/or body and add new errors.
        *
        * @event core.message_admin_form_submit_before
        * @var    string    subject    Message subject
        * @var    string    body    Message body
        * @var    array    errors    Form errors
        * @since 3.2.6-RC1
        */
        $vars = [
            'subject',
            'body',
            'errors',
        ];
        extract($this->dispatcher->trigger_event('core.message_admin_form_submit_before', compact($vars)));
        $this->subject = $subject;
        $this->body = $body;
        $this->errors = $errors;
        if ($this->user->data['is_registered'])
        {
            $this->message->set_sender_from_user($this->user);
            $this->sender_name = $this->user->data['username'];
            $this->sender_address = $this->user->data['user_email'];
        }
        else
        {
            if (!$this->sender_name)
            {
                $this->errors[] = $this->user->lang['EMPTY_SENDER_NAME'];
            }
            if (!function_exists('validate_data'))
            {
                require($this->phpbb_root_path . 'includes/functions_user.' . $this->phpEx);
            }
            $validate_array = validate_data(
                array(
                    'email' => $this->sender_address,
                ),
                array(
                    'email' => array(
                        array('string', false, 6, 60),
                        array('email'),
                    ),
                )
            );
            foreach ($validate_array as $error)
            {
                $this->errors[] = $this->user->lang[$error];
            }
            $this->message->set_sender($this->user->ip, $this->sender_name, $this->sender_address, $this->user->lang_name);
            $this->message->set_sender_notify_type(NOTIFY_EMAIL);
        }
        $this->message->set_template('contact_admin');
        $this->message->set_subject($this->subject);
        $this->message->set_body($this->body);
        $this->message->add_recipient(
            $this->user->lang['ADMINISTRATOR'],
            $this->config['board_contact'],
            $this->config['default_lang'],
            NOTIFY_EMAIL
        );
        $this->message->set_template_vars(array(
            'FROM_EMAIL_ADDRESS'    => $this->sender_address,
            'FROM_IP_ADDRESS'        => $this->user->ip,
            'S_IS_REGISTERED'        => $this->user->data['is_registered'],
            'U_FROM_PROFILE'        => generate_board_url() . '/memberlist.' . $this->phpEx . '?mode=viewprofile&u=' . $this->user->data['user_id'],
        ));
        parent::submit($messenger);
    }
    /**
    * {inheritDoc}
    */
    public function render(\phpbb\template\template $template)
    {
        $l_admin_info = $this->config_text->get('contact_admin_info');
        if ($l_admin_info)
        {
            $contact_admin_data            = $this->config_text->get_array(array(
                'contact_admin_info',
                'contact_admin_info_uid',
                'contact_admin_info_bitfield',
                'contact_admin_info_flags',
            ));
            $l_admin_info = generate_text_for_display(
                $contact_admin_data['contact_admin_info'],
                $contact_admin_data['contact_admin_info_uid'],
                $contact_admin_data['contact_admin_info_bitfield'],
                $contact_admin_data['contact_admin_info_flags']
            );
        }
        $template->assign_vars(array(
            'S_CONTACT_ADMIN'    => true,
            'S_CONTACT_FORM'    => $this->config['contact_admin_form_enable'],
            'S_IS_REGISTERED'    => $this->user->data['is_registered'],
            'S_POST_ACTION'        => append_sid($this->phpbb_root_path . 'memberlist.' . $this->phpEx, 'mode=contactadmin'),
            'CONTACT_INFO'        => $l_admin_info,
            'MESSAGE'            => $this->body,
            'SUBJECT'            => $this->subject,
            'NAME'                => $this->sender_name,
            'EMAIL'                => $this->sender_address,
        ));
        parent::render($template);
    }
}