В процессе использования расширения, заметил несколько ошибок (по крайней мере у себя на сервере).
PHP дебаггер ругался на отсутствие переменных: time_exit, output_mont.
Для исправления сего, плюс небольшой оптимизации и удобства настройки (опять же для себя, внес в код небольшие правки)
в Manifest
82 строка:
было
<span class="fld-input"><input type="datetime-local" id="fld" name="period_time" value="<?php echo(isset($_POST['period_time']) ? forum_htmlencode($_POST['period_time']) : forum_htmlencode($user['period_time'])) ?>" size="20" /></span>
стало
<span class="fld-input"><input type="datetime-local" id="fld" name="period_time" value="<?php echo(isset($_POST['period_time']) ? forum_htmlencode($_POST['period_time']) : date("d.m.Y H:i", forum_htmlencode($user['period_time']))) ?>" size="20" /></span>
С 86 по 91 удалил, так как посчитал дублем (может не увидел чего).
В hook vt_row_pre_post_contacts_merge
удалил переменную $time_exit.
было
$forum_page['author_info']['period_time'] = '<li class="period_time"><span>'.pan_progress_time($time_start, $time_exit).'</span></li>';
стало
$forum_page['author_info']['period_time'] = '<li class="period_time"><span>'.pan_progress_time($time_start).'</span></li>';
В functions
в 10 сторке, удалил входящий параметр $time_exit.
с 25 по 41 строку внес изменения
было
if(floor($year) >= 1)
{
$year = floor($year);
$output_year = '<b>'.$year.'</b> '.format_by_year($year, $lang_pan_period_of_time['Year'], $lang_pan_period_of_time['Years2'], $lang_pan_period_of_time['Years5']);
}
if(floor($month) >= 1)
{
$month = floor($month);
$output_month = '<b>'.$month.'</b> '.format_by_month($month, $lang_pan_period_of_time['Month'], $lang_pan_period_of_time['Months2'], $lang_pan_period_of_time['Months5']);
}
if(floor($days) >= 1)
{
$days = floor($days);
$output_day = '<b>'.$days.'</b> '.format_by_days($days, $lang_pan_period_of_time['Day'], $lang_pan_period_of_time['Days2'], $lang_pan_period_of_time['Days5']);
}
стало
if(floor($year) >= 1)
{
$year = floor($year);
$output_year = '<b>'.$year.'</b> '.format_by_year($year, $lang_pan_period_of_time['Year'], $lang_pan_period_of_time['Years2'], $lang_pan_period_of_time['Years5']);
} else {
$output_year = '';
}
if(floor($month) >= 1)
{
$month = floor($month);
$output_month = '<b>'.$month.'</b> '.format_by_month($month, $lang_pan_period_of_time['Month'], $lang_pan_period_of_time['Months2'], $lang_pan_period_of_time['Months5']);
} else {
$output_month = '';
}
if(floor($days) >= 1)
{
$days = floor($days);
$output_day = '<b>'.$days.'</b> '.format_by_days($days, $lang_pan_period_of_time['Day'], $lang_pan_period_of_time['Days2'], $lang_pan_period_of_time['Days5']);
} else {
$output_day = '';
}
По ходу пьесы добавил в manifest проверку даты, вот он целиком:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<!--
/**
* Period Of Time
* @copyright Copyright (C) 2014-15 PanBB
* @license http://www.gnu.org/licenses/gpl.html GPL
* @package pan_period_of_time
* @website https://punbb.softplaza.net
*/
-->
<extension engine="1.0">
<id>pan_period_of_time</id>
<title>Period Of Time</title>
<version>0.3.2</version>
<description>pan_period_of_time - Период времени.</description>
<author>PunBB</author>
<minversion>1.4.0</minversion>
<maxtestedon>1.4.3</maxtestedon>
<install><![CDATA[
$forum_db->add_field('users', 'period_time', 'INT(10) UNSIGNED', false, '0');
$forum_db->add_field('users', 'period_desc', 'VARCHAR(50)', true);
]]></install>
<uninstall><![CDATA[
$forum_db->drop_field('users', 'period_time');
$forum_db->drop_field('users', 'period_desc');
]]></uninstall>
<hooks>
<hook id="vt_start"><![CDATA[
if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'.php'))
require $ext_info['path'].'/lang/'.$forum_user['language'].'.php';
else
require $ext_info['path'].'/lang/English.php';
]]></hook>
<!-- include css -->
<hook id="hd_head"><![CDATA[
if (FORUM_PAGE == 'viewtopic')
{
$forum_loader->add_css($ext_info['url'].'/css/style.css');
}
]]></hook>
<hook id="pf_change_details_signature_validation"><![CDATA[
$form['period_desc'] = strip_tags($_POST['period_desc']);
// Convert posted date to time
$period_time = htmlspecialchars($_POST['period_time']);
if (!empty($period_time))
{
if ( preg_match("/^([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})$/", $period_time, $razdeli) ) {
if ( checkdate($razdeli[2],$razdeli[1],$razdeli[3]) && (strtotime($period_time) < time())) {
$form['period_time'] = strtotime($period_time);
} else {
$form['period_time'] = 0;
}
} else {
$form['period_time'] = 0;
}
} else {
$form['period_time'] = 0;
}
]]></hook>
<hook id="pf_change_details_signature_pre_fieldset_end"><![CDATA[
if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'.php'))
require $ext_info['path'].'/lang/'.$forum_user['language'].'.php';
else
require $ext_info['path'].'/lang/English.php';
if (forum_htmlencode($user['period_time']) == 0) {
$period_time = '';
} else {
$period_time = date("d.m.Y", forum_htmlencode($user['period_time']));
}
?>
<fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>">
<legend class="group-legend"><strong><?php echo $lang_profile['Signature'] ?></strong></legend>
<div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
<div class="sf-box text">
<label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span>Название достижения</span><small>К примеру - "Стаж занятий каратэ:". Если поле оставить пустым, то достижения не будут отображаться.</small></label><br />
<span class="fld-input"><input id="fld<?php echo $forum_page['fld_count'] ?>" type="text" name="period_desc" value="<?php echo(isset($_POST['period_desc']) ? forum_htmlencode($_POST['period_desc']) : forum_htmlencode($user['period_desc'])) ?>" size="35" maxlength="30" /></span>
</div>
</div>
<div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
<div class="sf-box text">
<label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span>Дата старта</span><small>Укажите дату в формате: <?php echo date("d.m.Y", time()) ?>. Если поле оставить пустым, то достижения не будут отображаться.</small></label><br />
<span class="fld-input"><input type="datetime-local" id="fld" name="period_time" value="<?php echo(isset($_POST['period_time']) ? forum_htmlencode($_POST['period_time']) : $period_time) ?>" size="20" /></span>
</div>
</div>
</fieldset>
<?php
]]></hook>
<hook id="es_essentials"><![CDATA[
include $ext_info['path'].'/functions.php';
]]></hook>
<hook id="vt_qr_get_posts"><![CDATA[
$query['SELECT'] .= ', u.period_desc, u.period_time';
]]></hook>
<hook id="vt_row_pre_post_contacts_merge"><![CDATA[
if (!empty($cur_post['period_desc']) && $cur_post['period_time'] != 0)
{
$time_start = ($cur_post['period_time']);
$forum_page['author_info']['period_desc'] = '<li class="period_desc"><span>'.strip_tags($cur_post['period_desc']).'</span></li>';
$forum_page['author_info']['period_time'] = '<li class="period_time"><span>'.pan_progress_time($time_start).'</span></li>';
}
]]></hook>
</hooks>
</extension>