mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-25 04:23:38 +01:00
157 lines
3.6 KiB
PHP
157 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* @package message
|
|
* @copyright (c) 2014 phpBB Group
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
|
*
|
|
*/
|
|
|
|
namespace phpbb\message;
|
|
|
|
/**
|
|
* Class topic_form
|
|
* Form used to send topics as notification emails
|
|
*
|
|
* @package phpbb\message
|
|
*/
|
|
class topic_form extends form
|
|
{
|
|
/** @var int */
|
|
protected $topic_id;
|
|
/** @var array */
|
|
protected $topic_row;
|
|
/** @var string */
|
|
protected $recipient_address;
|
|
/** @var string */
|
|
protected $recipient_name;
|
|
/** @var string */
|
|
protected $recipient_lang;
|
|
|
|
/**
|
|
* Get the data of the topic
|
|
*
|
|
* @param int $topic_id
|
|
* @return false|array false if the topic does not exist, array otherwise
|
|
*/
|
|
protected function get_topic_row($topic_id)
|
|
{
|
|
$sql = 'SELECT forum_id, topic_title
|
|
FROM ' . TOPICS_TABLE . '
|
|
WHERE topic_id = ' . (int) $topic_id;
|
|
$result = $this->db->sql_query($sql);
|
|
$row = $this->db->sql_fetchrow($result);
|
|
$this->db->sql_freeresult($result);
|
|
|
|
return $row;
|
|
}
|
|
|
|
/**
|
|
* {inheritDoc}
|
|
*/
|
|
public function check_allow()
|
|
{
|
|
$error = parent::check_allow();
|
|
if ($error)
|
|
{
|
|
return $error;
|
|
}
|
|
|
|
if (!$this->auth->acl_get('u_sendemail'))
|
|
{
|
|
return 'NO_EMAIL';
|
|
}
|
|
|
|
if (!$this->topic_row)
|
|
{
|
|
return 'NO_TOPIC';
|
|
}
|
|
|
|
if (!$this->auth->acl_get('f_read', $this->topic_row['forum_id']))
|
|
{
|
|
return 'SORRY_AUTH_READ';
|
|
}
|
|
|
|
if (!$this->auth->acl_get('f_email', $this->topic_row['forum_id']))
|
|
{
|
|
return 'NO_EMAIL';
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* {inheritDoc}
|
|
*/
|
|
public function bind(\phpbb\request\request_interface $request)
|
|
{
|
|
parent::bind($request);
|
|
|
|
$this->topic_id = $request->variable('t', 0);
|
|
$this->recipient_address = $request->variable('email', '');
|
|
$this->recipient_name = $request->variable('name', '', true);
|
|
$this->recipient_lang = $request->variable('lang', $this->config['default_lang']);
|
|
|
|
$this->topic_row = $this->get_topic_row($this->topic_id);
|
|
}
|
|
|
|
/**
|
|
* {inheritDoc}
|
|
*/
|
|
public function submit(\messenger $messenger)
|
|
{
|
|
if (!$this->recipient_address || !preg_match('/^' . get_preg_expression('email') . '$/i', $this->recipient_address))
|
|
{
|
|
$this->errors[] = $this->user->lang['EMPTY_ADDRESS_EMAIL'];
|
|
}
|
|
|
|
if (!$this->recipient_name)
|
|
{
|
|
$this->errors[] = $this->user->lang['EMPTY_NAME_EMAIL'];
|
|
}
|
|
|
|
$this->message->set_template('email_notify');
|
|
$this->message->set_template_vars(array(
|
|
'TOPIC_NAME' => htmlspecialchars_decode($this->topic_row['topic_title']),
|
|
'U_TOPIC' => generate_board_url() . '/viewtopic.' . $this->phpEx . '?f=' . $this->topic_row['forum_id'] . '&t=' . $this->topic_id,
|
|
));
|
|
|
|
$this->message->add_recipient(
|
|
$this->recipient_name,
|
|
$this->recipient_address,
|
|
$this->recipient_lang,
|
|
NOTIFY_EMAIL
|
|
);
|
|
$this->message->set_sender_notify_type(NOTIFY_EMAIL);
|
|
|
|
parent::submit($messenger);
|
|
}
|
|
|
|
/**
|
|
* {inheritDoc}
|
|
*/
|
|
public function get_return_message()
|
|
{
|
|
return sprintf($this->user->lang['RETURN_TOPIC'], '<a href="' . append_sid($this->phpbb_root_path . 'viewtopic.' . $this->phpEx, 'f=' . $this->topic_row['forum_id'] . '&t=' . $this->topic_id) . '">', '</a>');
|
|
}
|
|
|
|
/**
|
|
* {inheritDoc}
|
|
*/
|
|
public function render(\phpbb\template\template $template)
|
|
{
|
|
parent::render($template);
|
|
|
|
$this->user->add_lang('viewtopic');
|
|
$template->assign_vars(array(
|
|
'EMAIL' => $this->recipient_address,
|
|
'NAME' => $this->recipient_name,
|
|
'S_LANG_OPTIONS' => language_select($this->recipient_lang),
|
|
'MESSAGE' => $this->body,
|
|
|
|
'L_EMAIL_BODY_EXPLAIN' => $this->user->lang['EMAIL_TOPIC_EXPLAIN'],
|
|
'S_POST_ACTION' => append_sid($this->phpbb_root_path . 'memberlist.' . $this->phpEx, 'mode=email&t=' . $this->topic_id))
|
|
);
|
|
}
|
|
}
|