1 (edited by PunBB 2018.03.02 00:33)

Topic: Period Of Time - период времени, достижения, линейки для PunBB

По просьбе пользователя pervik выпускаем расширение для отображения периода достижения.

Для чего расширение Period Of Time?
С помощью данного расширения, можно установить в профиле подпись вида:


https://punbb.softplaza.net/uploads/images/2017/04/16/screenshot.2017-04-16_13.13.32.png


Как пользоваться расширением Period Of Time?
Установите расширение.
Войдите в свой - Профиль - Подпись -
Установите дату начала события, а также описание. Если поле описание не заполнено, то достижение не отобразится.
Как скачать расширение Period Of Time?
Войдите на форум как пользователь или зарегистрируйтесь, затем будет открыт доступ к ссылке.

Скачать расширение Period Of Time

4

2

Re: Period Of Time - период времени, достижения, линейки для PunBB

Здравствуйте! Появилось первое замечание после запуска на рабочем форуме.
1) Расширение работает только тогда, когда в настройках включено: Отображать место нахождения пользователя, дату регистрации, количество сообщений, адреса email и URL в сообщениях.
Не сразу сообразил почему не заработало после запуска.
2) Это уже посерьезней... Если выставить 1 день, два дня... нормально... но, если поставить "год" с момента какой-то даты, то к году прибавляется 6 дней, причем к каждому году! 1 год 6 дней, 2 года 11 дней и так далее...
С чем это может быть связано? Видимо, где-то часы за год или минуты с секундами набегают?

3

Re: Period Of Time - период времени, достижения, линейки для PunBB

pervik wrote:

1) Расширение работает только тогда, когда в настройках включено: Отображать место нахождения пользователя, дату регистрации, количество сообщений, адреса email и URL в сообщениях.

По видимому конфликт с расширением Show User info. Повесил вывод на другой хук vt_row_pre_post_actions_merge.

pervik wrote:

) Это уже посерьезней... Если выставить 1 день, два дня... нормально... но, если поставить "год" с момента какой-то даты, то к году прибавляется 6 дней, причем к каждому году! 1 год 6 дней, 2 года 11 дней и так далее...
С чем это может быть связано? Видимо, где-то часы за год или минуты с секундами набегают?

Да, все правильно. Не учел високосный год. Рассчитал по среднему арифметическому за 4 года. Других вариантов пока не вижу.
Расширение обновил.

4

Re: Period Of Time - период времени, достижения, линейки для PunBB

Переустановил.
Сегодня протестил снова. Получается так:
1. Выставляю "Я здесь" сегодняшнюю дату 25 07 2015 и время 07:00.. ничего, кроме "я здесь" не показывает
2. Ставлю 25 07 2014 и 07:00... показывает 1год 12 месяцев и 30 дней
3. Ставлю 25 07 2013 и 07:00 ... показывает 2 года 12 месяцев и 30 дней
Похоже, что прибавляется где-то 12 месяцев или 1 год ( может в конце года?), потому что, если ставлю полгода с 25 01 2015
показывает 6 месяцев 29 дней... время везде 07:00
А часы нельзя убрать? Может из-за них что-то? Хотя вряд ли...
Спасибо за то, что разбираетесь в возникшей проблеме

5 (edited by PunBB 2015.07.25 04:47)

Re: Period Of Time - период времени, достижения, линейки для PunBB

pervik wrote:

1. Выставляю "Я здесь" сегодняшнюю дату 25 07 2015 и время 07:00.. ничего, кроме "я здесь" не показывает

Это логично, что не показывает, ведь не прошло ни одних суток.

pervik wrote:

Переустановил.
Сегодня протестил снова. Получается так:
1. Выставляю "Я здесь" сегодняшнюю дату 25 07 2015 и время 07:00.. ничего, кроме "я здесь" не показывает
2. Ставлю 25 07 2014 и 07:00... показывает 1год 12 месяцев и 30 дней
3. Ставлю 25 07 2013 и 07:00 ... показывает 2 года 12 месяцев и 30 дней
Похоже, что прибавляется где-то 12 месяцев или 1 год ( может в конце года?), потому что, если ставлю полгода с 25 01 2015
показывает 6 месяцев 29 дней... время везде 07:00
А часы нельзя убрать? Может из-за них что-то? Хотя вряд ли...
Спасибо за то, что разбираетесь в возникшей проблеме

А вот это интересно, нужно разобраться. Возмодно придется поменять весь алгоритм функций.

pervik wrote:

А часы нельзя убрать? Может из-за них что-то? Хотя вряд ли...

Дело не в часах, все вычисления происходят в секундах. Вначале идет подсчет лет, целых чисел.
Затем из остатка вычисляет месяцы, за основу взяты 30 дней.
И из последнего остатка получаем дни.

Потребуется время, чтобы настроить. Будут идеи, пишите.
-------------
Значит... внес некоторые изменения, поменял функции php для округления дробей в меньшую сторону. Исправлены операторы сравнения.
Тестируйте, обновил до версии 0.3,

6

Re: Period Of Time - период времени, достижения, линейки для PunBB

Отписываюсь. Поставил даты нескольким пользователям. Там, где идут еще дни, недели и месяцы - полет нормальный. Все считает так, как надо.
У меня отчет "моего достижения" начинается с 02 09 2013  00:01, стоит  Period of time и стоит счетчик со стороннего сервиса в подписи, разница пока 1 день
То есть, Если на Period of time стоит 1г 10 мес 24 дня, то на стороннем 1г 10 25 дней.
Дождусь начала следующего месяца, если Period of time "перескочит" на 11 месяцев вовремя, то можно считать, что расширение обкатку прошло успешно!

7

Re: Period Of Time - период времени, достижения, линейки для PunBB

Я рад, что расширение вам приглянулось. Мы всегда рады интересным идеям.

pervik wrote:

Если на Period of time стоит 1г 10 мес 24 дня, то на стороннем 1г 10 25 дней

Разница ± 1 день допустима, так как время исчисляется по простому алгоритму, берется среднее арифметическое за 4 года (високосный год - раз в четыре года).
В течении четырех лет значение может колебаться на один день, но в итоге выравнивается с точностью до секунды.
+ еще месяцы могут влиять где 31, 28 и 29 дней.

8

Re: Period Of Time - период времени, достижения, линейки для PunBB

клевое расширение, не нарадуюсь ))

Предложение:
как бы вот, подправить, когда показано 1 год, 15 дней, то можно ли заменить на 1 год и 15 дней? т.е. вместо запятой, когда месяца нету, поставить букву и

Как бы не критично, но по моему так было бы логичней. А так все супер! За расширение плюсую++

Если вам уже за тридцать и вы абсолютно ничего не добились в этой жизни — значит, вы честный и порядочный человек.

9

Re: Period Of Time - период времени, достижения, линейки для PunBB

PunPRO, могу предложить такой вариант:
1 - убрать запятые вообще
2 - если есть год, но нет месяца, то показать букву и
Как такой вариант?

10

Re: Period Of Time - период времени, достижения, линейки для PunBB

Внимание! Важное обновление!
Обновление связано с безопасностью ввода символов. Добавлена функция очищающая поля от html тегов, запрещающая злоумышленникам вводить вредоносные символы.

Чтобы обновить расширение, не переустанавливайте его.
1. Отключите расширение
2. Скачайте и загрузите поверх старого
3. Обновите хуки с помощью Pun Admin Manage Extensions Improved

11

Re: Period Of Time - период времени, достижения, линейки для PunBB

Есть небольшое предложенье по стилизации расширения. Может быть немного оформить блок, где выводится время? ну к примеру рамкой какой нибудь красивой и цветом. Я в стилях плохо понимаю, есть только несколько идей. Что скажете на это?

12

Re: Period Of Time - период времени, достижения, линейки для PunBB

MIRAX wrote:

Может быть немного оформить блок, где выводится время? ну к примеру рамкой какой нибудь красивой и цветом. Я в стилях плохо понимаю, есть только несколько идей. Что скажете на это?

Можно конечно, но не тяжелый CSS, ведь представьте, если на странице 25 сообщений и в каждом профиле будет загружать навороченный стиль. Эффект будет примерно тот же что и от расширения социальные кнопки.

13

Re: Period Of Time - период времени, достижения, линейки для PunBB

есть небольшая проблема
короче, когда повторно сохраняешь информацию в профиле, происходит какой то сброс даты и она становится в профиле пустой
Установленная дата (здесь пусто вместо даты после обновления)
Ну эт лан, а вот в профиле ваще казус! короче дата такая
Живу здесь
45 лет, 7 месяцев, 22 дня

Можно ли эт как нить исправить?

14 (edited by PunBB 2017.04.16 03:24)

Re: Period Of Time - период времени, достижения, линейки для PunBB

ZOMBIE, спасибо за замечание. Ошибка исправлена. Обновляйте расширение, брать из первого поста. Версия 0.3.2
По поводу CSS, соглашусь с Xakker'ом, хотя в расширение такую возможность добавил.


MIRAX wrote:

Есть небольшое предложенье по стилизации расширения. Может быть немного оформить блок, где выводится время? ну к примеру рамкой какой нибудь красивой и цветом. Я в стилях плохо понимаю, есть только несколько идей. Что скажете на это?

При очень умелых ручках можно добиться и красивее. Если стиль не нужен совсем, то очистите файл стилей в расширении.

15 (edited by PunBB 2016.01.23 01:46)

Re: Period Of Time - период времени, достижения, линейки для PunBB

В процессе использования расширения, заметил несколько ошибок (по крайней мере у себя на сервере).
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>

16

Re: Period Of Time - период времени, достижения, линейки для PunBB

sempai, наконец то я добрался чтобы пересмотреть расширение. Большое вам спасибо за выявленные ошибки. Я принял их к сведению и внес в новую версию соответствующие изменения.

sempai wrote:

С 86 по 91 удалил, так как посчитал дублем (может не увидел чего).

это не дубль, просто выводит установленную дату, если браузер не поддерживает HTML5 (а точнее local-time).
Хотя если использовать обычное текстовое поле, то можно и удалить. В HTML5 с помощью local-time чем удобно, для ввода даты появляется календарь.

Была также просьба добавить опционально на выбор место вывода достижения. Например, как я понял по просьбе пользователей: чтобы в месте, где подпись отображать картинку или временную шкалу. Остается только доработать немного, а так идея хорошая.

Любые идеи, мысли, критика,  все кстати  PunBB_INFO_ICQ/smile

17

Re: Period Of Time - период времени, достижения, линейки для PunBB

А что вы скажете на счет того чтобы добавить под сообщение картинку и подпись, на самой картинке. Я на каком то форуме видел такую примочку, вроде для cms phpbb есть такой мод, но он использует для вставки сторонний сервис.

Подпись наверно можно использовать текущую, просто сверстать в css поверх картинки. К сожалению примера нет PunBB_INFO_ICQ/sad

18

Re: Period Of Time - период времени, достижения, линейки для PunBB

olimpic wrote:

Подпись наверно можно использовать текущую, просто сверстать в css поверх картинки. К сожалению примера нет

примерно понял. попробуем добавить такую возможность.
Спасибо за идею  Default/ay

19

Re: Period Of Time - период времени, достижения, линейки для PunBB

Вот типа этого?

https://punbb.softplaza.net/uploads/images/2016/05/11/e9985a416f946be7e8b1b66d295b9f21.png

$matches[1]

Обновил расширение до 0.3.6

Теперь можно выбрать вид отображения достижения. В целях безопасности, я не стал добавлять возможность пользователям вставлять ссылки на картинку. Вы можете загрузить свои изображения в папку /imgs//
После чего пользователи могут в настройке подписи выбрать понравившийся логотип из списка.

Внимание! Если на вашем форуме форуме пользователи уже настроили период, то ОБЯЗАТЕЛЬНО сделайте Бекап БД или полей таблицы данного расширения с помощью инструмента
Pan Backup DB - (Резервное копирование дампа базы данных)

1. После установки перейти - Управление - Recovery
2. Выбрать таблицу, в данном случае users
3. Отметить галочками необходимые колонки:  period_mode, period_time, period_desc, period_img.

После переустановки расширения восстановить поля из резервного копирования.

20

Re: Period Of Time - период времени, достижения, линейки для PunBB

olimpic wrote:

А что вы скажете на счет того чтобы добавить под сообщение картинку и подпись, на самой картинке. Я на каком то форуме видел такую примочку, вроде для cms phpbb есть такой мод, но он использует для вставки сторонний сервис.
Подпись наверно можно использовать текущую, просто сверстать в css поверх картинки. К сожалению примера нет

Такие сервисы называются Линейки для форумов, но для PunBB от них возможно только установить в подпись ссылку с их сервиса.
Вобщем то можно и расширить возможности этого расширения, добавить больше линеек, добавить или нарисовать бегунков, что можно было выбрать подходящий, подпись естественно, а так же ее цвет.

Даже шрифты для подписи линеек можно придумать. Работы немного, но кропотливо все это. Рисование линеек и бегунков смысла нет, каждый админ форума пусть сам берет на себя эту задачу. В интернете их полно, раз рисовать лень.  Default/bd

21

Re: Period Of Time - период времени, достижения, линейки для PunBB

Данное расширение более не поддерживается. Используйте более усовершенствованное расширение Time On The Line - Линейки, бегунки, период времени под сообщением