Здравствуйте уважаемые форумчане!
Написал модуль подписки неавторизованным пользователям на новые комментарии.
Появилась пара вопросов мне непонятных.
helper.php
<?php
// no direct access
defined('_JEXEC') or die;
class ModMailHelper
{
function getPost()
{
$app = JFactory::getApplication();
$input = $app->input;
$ta=$input->get('hel');
if($ta=='hel')
{
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
$option = JRequest::getVar('option', '');
$id = JRequest::getString('id');
$lang = JFactory::getLanguage()->getTag();
$mail = $input->get('email', '', 'String');
$user = JFactory::getUser();
if ($user->get('id'))
{
$userid = (int) $user->get('id');
$name = $user->name;
}
else
{
$userid = 0;
$name = 0;
}
$db = JFactory::getDbo();
$query = $db->getQuery( true )
->select('(id)')
->from($db->quoteName('#__jcomments_subscriptions'))
->where ($db->quoteName('email'). ' = ' . $db->quote($mail))
->where ($db->quoteName('object_id'). ' = ' . $db->quote($id));
$xid = $db->setQuery( $query )->loadResult();
if (!$xid)
{
$query = $db->getQuery(true);
$query->insert($db->quoteName('#__jcomments_subscriptions'));
$columns = array( $db->quoteName('email'),
$db->quoteName('object_id'),
$db->quoteName('lang'),
$db->quoteName('object_group'),
$db->quoteName('userid'),
$db->quoteName('name'),
$db->quoteName('hash'),
$db->quoteName('published'));
$query->columns($columns);
$query->values($db->Quote($mail)
. ', ' . $db->quote($id)
. ', ' . $db->quote($lang)
. ', ' . $db->quote($option)
. ', ' . $db->quote($userid)
. ', ' . $db->quote($name)
. ', ' . $db->quote(md5($id . $option . $userid . $mail . $lang))
. ', ' . $db->quote(1));
$db->setQuery($query);
$db->query();
if ($query)
{ // Сообщение о подписке
$app->enqueueMessage('Вы подписаны на уведомления о новых комментариях');
}
}
else
{ // Сообщение об ошибке
$app->enqueueMessage('Вы уже подписаны на уведомления о новых комментариях!', 'error');
}}}}
?>
tmpl/default.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
$option = JRequest::getVar('option', '');
$view = JRequest::getVar('view', '');
if ($option == $params->get('option') && $view == $params->get('view')){
?>
<div class="mail<?php echo $moduleclass_sfx ?>" >
<form action="" name="adminForm" id="adminForm" method="post" class="form-validate" >
<input id="email" name="email" type="text" class="inputbox required validate-email" size="20" /><button type="submit" >Подписаться</button>
<input type="hidden" name="task" value="" />
<input type="hidden" name="hel" value="hel" />
<?php
$url = $_SERVER['HTTP_REFERER'];
$return = base64_encode($url);
?>
<input type="hidden" name="return" value="<?php echo $return; ?>" />
<?php echo JHtml::_('form.token'); ?>
</form>
</div>
<?php
}
?>
При обнавлении страницы (F5) снова происходит отправка данных
Как это решить?
Вот эта строчка смущает JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
В нужное ли место и правильно я её вставил?
Буду очень благодарен за доработку модуля