Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 92
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
admin_form
0.00% covered (danger)
0.00%
0 / 92
0.00% covered (danger)
0.00%
0 / 5
210
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 check_allow
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 bind
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 submit
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 1
56
 render
0.00% covered (danger)
0.00%
0 / 26
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3*
4* This file is part of the phpBB Forum Software package.
5*
6* @copyright (c) phpBB Limited <https://www.phpbb.com>
7* @license GNU General Public License, version 2 (GPL-2.0)
8*
9* For full copyright and license information, please see
10* the docs/CREDITS.txt file.
11*
12*/
13
14namespace phpbb\message;
15
16/**
17* Class admin_form
18* Displays a message to the user and allows him to send an email
19*/
20class admin_form extends form
21{
22    /** @var \phpbb\config\db_text */
23    protected $config_text;
24
25    /** @var \phpbb\event\dispatcher_interface */
26    protected $dispatcher;
27
28    /** @var string */
29    protected $subject;
30    /** @var string */
31    protected $sender_name;
32    /** @var string */
33    protected $sender_address;
34
35    /**
36    * Construct
37    *
38    * @param \phpbb\auth\auth $auth
39    * @param \phpbb\config\config $config
40    * @param \phpbb\config\db_text $config_text
41    * @param \phpbb\db\driver\driver_interface $db
42    * @param \phpbb\controller\helper $controller_helper
43    * @param \phpbb\user $user
44    * @param \phpbb\event\dispatcher_interface $dispatcher
45    * @param string $phpbb_root_path
46    * @param string $phpEx
47    */
48    public function __construct(\phpbb\auth\auth $auth, \phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\db\driver\driver_interface $db, \phpbb\controller\helper $controller_helper, \phpbb\user $user, \phpbb\event\dispatcher_interface $dispatcher, $phpbb_root_path, $phpEx)
49    {
50        parent::__construct($auth, $config, $db, $controller_helper, $user, $phpbb_root_path, $phpEx);
51        $this->config_text = $config_text;
52        $this->dispatcher = $dispatcher;
53    }
54
55    /**
56    * {inheritDoc}
57    */
58    public function check_allow()
59    {
60        $error = parent::check_allow();
61        if ($error)
62        {
63            return $error;
64        }
65
66        if (!$this->config['contact_admin_form_enable'])
67        {
68            return 'NO_CONTACT_PAGE';
69        }
70
71        return false;
72    }
73
74    /**
75    * {inheritDoc}
76    */
77    public function bind(\phpbb\request\request_interface $request)
78    {
79        parent::bind($request);
80
81        $this->subject = $request->variable('subject', '', true);
82        $this->sender_address = $request->variable('email', '');
83        $this->sender_name = $request->variable('name', '', true);
84    }
85
86    /**
87    * {inheritDoc}
88    */
89    public function submit(\phpbb\di\service_collection $messenger)
90    {
91        if (!$this->subject)
92        {
93            $this->errors[] = $this->user->lang['EMPTY_SUBJECT_EMAIL'];
94        }
95        if (!$this->body)
96        {
97            $this->errors[] = $this->user->lang['EMPTY_MESSAGE_EMAIL'];
98        }
99
100        $subject = $this->subject;
101        $body = $this->body;
102        $errors = $this->errors;
103
104        /**
105        * You can use this event to modify subject and/or body and add new errors.
106        *
107        * @event core.message_admin_form_submit_before
108        * @var    string    subject    Message subject
109        * @var    string    body    Message body
110        * @var    array    errors    Form errors
111        * @since 3.2.6-RC1
112        */
113        $vars = [
114            'subject',
115            'body',
116            'errors',
117        ];
118        extract($this->dispatcher->trigger_event('core.message_admin_form_submit_before', compact($vars)));
119        $this->subject = $subject;
120        $this->body = $body;
121        $this->errors = $errors;
122
123        if ($this->user->data['is_registered'])
124        {
125            $this->message->set_sender_from_user($this->user);
126            $this->sender_name = $this->user->data['username'];
127            $this->sender_address = $this->user->data['user_email'];
128        }
129        else
130        {
131            if (!$this->sender_name)
132            {
133                $this->errors[] = $this->user->lang['EMPTY_SENDER_NAME'];
134            }
135
136            if (!function_exists('validate_data'))
137            {
138                require($this->phpbb_root_path . 'includes/functions_user.' . $this->phpEx);
139            }
140
141            $validate_array = validate_data(
142                array(
143                    'email' => $this->sender_address,
144                ),
145                array(
146                    'email' => array(
147                        array('string', false, 6, 60),
148                        array('email'),
149                    ),
150                )
151            );
152
153            foreach ($validate_array as $error)
154            {
155                $this->errors[] = $this->user->lang[$error];
156            }
157
158            $this->message->set_sender($this->user->ip, $this->sender_name, $this->sender_address, $this->user->lang_name);
159        }
160
161        $this->message->set_template('contact_admin');
162        $this->message->set_subject($this->subject);
163        $this->message->set_body($this->body);
164        $this->message->add_recipient(
165            $this->user->lang['ADMINISTRATOR'],
166            $this->config['board_contact'],
167            $this->config['default_lang']
168        );
169
170        $this->message->set_template_vars(array(
171            'FROM_EMAIL_ADDRESS'    => $this->sender_address,
172            'FROM_IP_ADDRESS'        => $this->user->ip,
173            'S_IS_REGISTERED'        => $this->user->data['is_registered'],
174
175            'U_FROM_PROFILE'        => generate_board_url() . '/memberlist.' . $this->phpEx . '?mode=viewprofile&u=' . $this->user->data['user_id'],
176        ));
177
178        parent::submit($messenger);
179    }
180
181    /**
182    * {inheritDoc}
183    */
184    public function render(\phpbb\template\template $template)
185    {
186        $l_admin_info = $this->config_text->get('contact_admin_info');
187        if ($l_admin_info)
188        {
189            $contact_admin_data            = $this->config_text->get_array(array(
190                'contact_admin_info',
191                'contact_admin_info_uid',
192                'contact_admin_info_bitfield',
193                'contact_admin_info_flags',
194            ));
195
196            $l_admin_info = generate_text_for_display(
197                $contact_admin_data['contact_admin_info'],
198                $contact_admin_data['contact_admin_info_uid'],
199                $contact_admin_data['contact_admin_info_bitfield'],
200                $contact_admin_data['contact_admin_info_flags']
201            );
202        }
203
204        $template->assign_vars(array(
205            'S_CONTACT_ADMIN'    => true,
206            'S_CONTACT_FORM'    => $this->config['contact_admin_form_enable'],
207            'S_IS_REGISTERED'    => $this->user->data['is_registered'],
208            'S_POST_ACTION'        => append_sid($this->phpbb_root_path . 'memberlist.' . $this->phpEx, 'mode=contactadmin'),
209
210            'CONTACT_INFO'        => $l_admin_info,
211            'MESSAGE'            => $this->body,
212            'SUBJECT'            => $this->subject,
213            'NAME'                => $this->sender_name,
214            'EMAIL'                => $this->sender_address,
215        ));
216
217        parent::render($template);
218    }
219}