<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[PunBB по-русски &mdash; Архив]]></title>
		<link>http://punbb.ru/</link>
		<description><![CDATA[Недавние темы раздела «PunBB по-русски».]]></description>
		<lastBuildDate>Wed, 18 Aug 2010 11:56:44 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Недостатки этого форума]]></title>
			<link>http://punbb.ru/topic127-nedostatki-etogo-foruma-new-posts.html</link>
			<description><![CDATA[<p>Высказывайте ваши пожелания по улучшению нашего форума.</p>]]></description>
			<author><![CDATA[dummy@example.com (pojar)]]></author>
			<pubDate>Wed, 18 Aug 2010 11:56:44 +0000</pubDate>
			<guid>http://punbb.ru/topic127-nedostatki-etogo-foruma-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[opera и перенос темы]]></title>
			<link>http://punbb.ru/topic1814-opera-i-perenos-temy-new-posts.html</link>
			<description><![CDATA[<p>обнаружил багу не в движке, но в Opera :)</p><p>Opera неправильно обрабатывает выпадающий список в форме <strong>если он содержит пустую группу</strong>, т.е. вот такое:<br /></p><div class="codebox"><pre><code>                        &lt;label&gt;Move to                        
                        &lt;br /&gt;
                        &lt;select name=&quot;move_to_forum&quot;&gt;
                            &lt;optgroup label=&quot;Another blog&quot;&gt;
                            &lt;/optgroup&gt;
                            &lt;optgroup label=&quot;Personal blogs&quot;&gt;
                                &lt;option value=&quot;8&quot;&gt;Admin&#039;s nest&lt;/option&gt;
                                &lt;option value=&quot;3&quot;&gt;News&lt;/option&gt;
                                &lt;option value=&quot;12&quot;&gt;Second blog&lt;/option&gt;
                                &lt;option value=&quot;11&quot;&gt;First user bloag&lt;/option&gt;
                            &lt;/optgroup&gt;
                        &lt;/select&gt;</code></pre></div><p>пример приведен для операции &quot;Перенос темы&quot;, но в принципе может возникнуть где угодно.<br />группа Another blog получилась пустая, потомучто на форуме в категории Another blog у меня только один форум и именно из него я пытаюсь перенести тему. соответственно форум исключен из списка форумов-получателей.</p><p>при таком раскладе в данные формы <strong>не попадет поле move_to_forum</strong> и в результате получаем ошибку Bad request. я просто голову сломал пытаясь отловить ошибку, оказалось что она происходит только в опере и только при таком хитром раскладе исходных данных.</p>]]></description>
			<author><![CDATA[dummy@example.com (niikto)]]></author>
			<pubDate>Sat, 20 Sep 2008 17:49:13 +0000</pubDate>
			<guid>http://punbb.ru/topic1814-opera-i-perenos-temy-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Опасные уязвимости в сборке punbb.ru rev 87 EF team.]]></title>
			<link>http://punbb.ru/topic2440-opasnye-uyazvimosti-v-sborke-punbbru-rev-87-ef-team-new-posts.html</link>
			<description><![CDATA[<p><span style="color: red">Авторы</span> : @FATAL@,xN.<br /><span style="color: red">Ссылка</span> : <a href="http://efc.net.ru/viewtopic.php?id=41">http://efc.net.ru/viewtopic.php?id=41</a><br />Архив с пофиксенными скриптами там же.<br />Копипастить не буду читайте там.Исправления думаю скоро будут.На моем форуме все залатано.</p>]]></description>
			<author><![CDATA[dummy@example.com (xN)]]></author>
			<pubDate>Wed, 23 Jul 2008 13:19:26 +0000</pubDate>
			<guid>http://punbb.ru/topic2440-opasnye-uyazvimosti-v-sborke-punbbru-rev-87-ef-team-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Конный форум]]></title>
			<link>http://punbb.ru/topic943-konnyi-forum-new-posts.html</link>
			<description><![CDATA[<p>Сайт Иркутского клуба любителей верховой езды &quot;Кавалькада&quot;.<br />Стилизованный форум: <a href="http://www.irkkoni.ru/forum/">http://www.irkkoni.ru/forum/</a></p><p>Что скажете?</p>]]></description>
			<author><![CDATA[dummy@example.com (coordinator)]]></author>
			<pubDate>Sun, 27 Jan 2008 20:29:33 +0000</pubDate>
			<guid>http://punbb.ru/topic943-konnyi-forum-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA["Новые сообщения" - в верхнее меню]]></title>
			<link>http://punbb.ru/topic1943-novye-soobshcheniya-v-verkhnee-menyu-new-posts.html</link>
			<description><![CDATA[<p>Предлагаю добавить ссылку &quot;Новые сообщения с момента вашего последнего посещения&quot; в верхнее меню - очень удобно, и есть на многих других форумах.</p>]]></description>
			<author><![CDATA[dummy@example.com (Freeman)]]></author>
			<pubDate>Fri, 04 Jan 2008 20:35:14 +0000</pubDate>
			<guid>http://punbb.ru/topic1943-novye-soobshcheniya-v-verkhnee-menyu-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Торможение форума...]]></title>
			<link>http://punbb.ru/topic68-tormozhenie-foruma-new-posts.html</link>
			<description><![CDATA[<p>Вроде самый легкий и быстрый... даже у меня на бесплатном хостинге работает быстрее в разы... <br />А здесь приходится ждать, будто на медленном диалапе сижу...</p>]]></description>
			<author><![CDATA[dummy@example.com (torg)]]></author>
			<pubDate>Sun, 11 Nov 2007 20:53:39 +0000</pubDate>
			<guid>http://punbb.ru/topic68-tormozhenie-foruma-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Усечение сообщения с сохранением разметки]]></title>
			<link>http://punbb.ru/topic1321-usechenie-soobshcheniya-s-sokhraneniem-razmetki-new-posts.html</link>
			<description><![CDATA[<p>hcs, раз ты так считаешь, пусть будет здесь. вытаскиваю тему из ЛС:</p><p><strong>Задача</strong>: нужна функция обрезания произвольного сообщения с bbcodes, сохраняющая пары открывающих-закрывающих тегов.<br /><strong>Область применения</strong>: выдача поиска, различные выборки типа &quot;сообщения за неделю&quot; и т.д. везде, где хочется видеть не только заголовки, но краткое содержание.<br /><strong>Варианты реализации</strong>: <br />a) подавать на вход уже обрезанный текст. функция должна дополнить незакрытые теги.<br />b) подавать на вход полный текст. функция вырежет все лишнее и оставит все необходимое</p><p>Лично я склоняюсь к варианту (b). hcs подкинул работающий паттерн для резки текста и заодно сделал свой вариант (a)</p><p>Вот мой тестовый скрипт testcut4.php: (<strong>ВАЖНО:</strong> в тегах [ code] и [/ code] вставлены пробелы! удалите их перед использованием)<br /></p><div class="codebox"><pre><code>&lt;?php

// debug output. comment echo to suppress all boring output
function decho($str)
{
//    echo $str;
}

// care about magic quotes
function unescape($str)
{
    return (get_magic_quotes_gpc() == 1) ? stripslashes($str) : $str;
}

//
//  Get short version of message. It care about marking.
//  parameters:
//    string  $message     [in, out] - text to cut
//    integer $max_length  [in]      - length to cut
//  returns TRUE when was cut
//
function smartcut(&amp;$message, $max_length=50)
{
    $pattern = &#039;#((?:\[|\[/)(?:b|i|u|s|url|url=(?:[^\[]*?)|email|email=(?:[^\[]*?)|mono|size=(?:[0-9]{2})|center|right|quote|quote=(?:&amp;quot;|&quot;|\&#039;|)(?:.*)|img|imgr|imgl|code|color|color=(?:[a-zA-Z]*|\#?[0-9a-fA-F]{6})|listo|list|li)\])#&#039;;
    $result = preg_split($pattern, $message, -1, PREG_SPLIT_DELIM_CAPTURE );

    $trunc_at = -1;
    $length = 0;
    $was_code = FALSE;
    for ($i=0; $i &lt; count($result); $i++)
    {
        $clause = $result[$i];

        decho($i.&#039;: &#039;);
        if (strlen($clause) == 0)
        {
            decho(&quot;(empty)&lt;br /&gt;\n&quot;);
            continue;
        }

        if ($trunc_at == -1)
        {
            // text was not truncated yet
            if (!preg_match($pattern, $clause))
            {
                decho(&#039;text len=&#039;.strlen($clause).&#039; (&#039;.($length + strlen($clause)).&#039;)&#039;);
                if ($length + strlen($clause) &gt;= $max_length)
                {
                    // truncate text
                    $result[$i] = substr($clause, 0, $max_length-$length);
                    $trunc_at = $i;
                    decho(&#039; -- &lt;span style=&quot;color: red&quot;&gt;TRUNCATION&lt;/span&gt;&#039;);
                }
                $length += strlen($clause);
            }
            else
            {
                decho(&#039;&lt;b&gt;&#039;.$clause.&#039;&lt;/b&gt;&#039;);
                if      ($clause == &#039;[  code]&#039;)  $was_code = TRUE;
                else if ($clause == &#039;[/ code]&#039;) $was_code = FALSE;
            }
        }
        else
        {
            // text was truncated
            if (!preg_match($pattern, $clause))
            {
                // it&#039;s odd text. cut it off!
                $result[$i] = &#039;&#039;;
                decho(&#039;text erased&#039;);
            }
            else
            {
                decho(&#039;&lt;b&gt;&#039;.$clause.&#039;&lt;/b&gt;&#039;);

                if ($was_code &amp;&amp; $clause != &#039;[/ code]&#039;)
                    $result[$i] = &#039;&#039;;
                // it&#039;s tag. is it opening tag?
                else if (!$was_code &amp;&amp; ereg(&#039;\[([a-z]+)&#039;, $clause, $regs) !== FALSE)
                {
                    $result[$i] = &#039;&#039;;

                    // find &amp; destroy its pair
                    $clause = &#039;[/&#039;.$regs[1].&#039;]&#039;;
                    decho(&#039; erased, loking for &lt;b&gt;&#039;.$clause.&#039;&lt;/b&gt;&#039;);
                    for ($j = $i+1; $j &lt; count($result); $j++)
                        if ($result[$j] == $clause)
                        {
                            $result[$j] = &#039;&#039;;
                            decho(&#039; -&amp;gt; #&#039;.$j.&#039; erased&#039;);
                            break;
                        }

                }
                // else { do nothing }

                if      ($clause == &#039;[ code]&#039;)  $was_code = TRUE;
                else if ($clause == &#039;[/ code]&#039;) $was_code = FALSE;
            }
        }
        decho(&quot;&lt;br /&gt;\n&quot;);
    }

    $message = implode(&#039;&#039;, $result);
    return $trunc_at != -1;
}

if (isset($_POST[&#039;req_message&#039;]))
    $message = unescape($_POST[&#039;req_message&#039;]);
else
    $message = &quot;abc def, [b]Lorem ipsum[/b]\n\n[s]\n[ code]\nLook at this [b] something another[/b]\nmissing[/url], odd [/s]\n[/ code]\n\n[u]Just[/u] test[/s]\n\n&quot;;

if (isset($_POST[&#039;req_length&#039;]) &amp;&amp; intval($_POST[&#039;req_length&#039;]) &gt; 0)
    $max_length = intval($_POST[&#039;req_length&#039;]);
else
    $max_length = 50;


$result = $message;
$was_cut = smartcut($result, $max_length);

?&gt;
&lt;div class=&quot;box&quot;&gt;
    &lt;form method=&quot;post&quot; action=&quot;testcut4.php&quot;&gt;
        &lt;label&gt;Message:&lt;/label&gt;&lt;br /&gt;
        &lt;textarea name=&quot;req_message&quot; rows=&quot;20&quot; cols=&quot;95&quot; &gt;&lt;?php echo htmlspecialchars($message) ?&gt;&lt;/textarea&gt;
        &lt;br /&gt;
        &lt;label&gt;Length:&lt;/label&gt;&lt;br /&gt;
        &lt;input type=&quot;text&quot; name=&quot;req_length&quot; value=&quot;&lt;?php echo $max_length ?&gt;&quot; &gt;
        &lt;br /&gt;&lt;br /&gt;
        &lt;input type=&quot;submit&quot; value=&quot;Test&quot;&gt;
    &lt;/form&gt;
&lt;/div&gt;

&lt;hr /&gt;
&lt;?php echo ($was_cut)? &#039;MESSAGE WAS TRUNCATED&#039;: &#039;&#039; ?&gt;
&lt;div class=&quot;box&quot;&gt;
&lt;textarea name=&quot;req_message&quot; rows=&quot;20&quot; cols=&quot;95&quot; disabled=&quot;disabled&quot;&gt;&lt;?php echo htmlspecialchars($result) ?&gt;&lt;/textarea&gt;
&lt;/div&gt;</code></pre></div><p><span style="color: #808080">updated 10:42 MSK: оформлено как функция</span></p><p>поясняю как оно работает:<br />- preg_split режет исходный текст на цепочку вида (текст,тег,текст,тег,тег...)<br />- в цикле перебираются элементы цепочки. тот же самый паттерн используется для распознавания является ли элемент тегом.<br />- измеряется длина текстовых фрагментов. по достижении max_length скрипт переходит в новое состояние. далее все текстовые фрагменты выбрасываются. пары тегов правее границы тоже выбрасываются<br />- в итоге правее границы остаются только закрывающие теги, для которых не была найдена открывающая половинка правее границы. <br />- после окончания цикла строка восстанавливается из цепочки. длина строки может быть больше значения max_length на длину тегов. <br />- косяки в разметке могут сохраниться, т.к. скрипт не добавляет новых тегов</p><p>я придерживаюсь золотого правила выпускающего редактора: ошибки в тексте - это не мои ошибки. нефиг их исправлять. автор текста и корректор отвечают за это.</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Fri, 02 Nov 2007 21:09:19 +0000</pubDate>
			<guid>http://punbb.ru/topic1321-usechenie-soobshcheniya-s-sokhraneniem-razmetki-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Немного о subversion]]></title>
			<link>http://punbb.ru/topic1536-nemnogo-o-subversion-new-posts.html</link>
			<description><![CDATA[<p>Всем привет. <br />Наконец-то свершилось, у нас есть subversion+trac<br />Trac имеет необходимый минимум для управления, но его содержимое не имеет отношения к punBB. Мне бы хотелось, что бы кто-нибудь взял на себя переделку стартовой страницы. Еще необходимо выработать стратегию наполнения вики.<br />Я очень надеюсь на вашу поддержку в этих вопросах.</p><p>Еще немного о репе. У меня есть светлая мысль содержать дополнительно другие проекты - моды и возможно сборки.<br />СВН безусловно прогрессивный инструмент совместной разработки и вполне возможно окажет существенное влияние на развитие различных модов, поскольку разработчики смогут привлекать других разработчиков для реализации своих творческих замыслов. Хотелось бы, чтобы это не осталось мечтами <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (hcs)]]></author>
			<pubDate>Wed, 05 Sep 2007 03:15:13 +0000</pubDate>
			<guid>http://punbb.ru/topic1536-nemnogo-o-subversion-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Последние обновления]]></title>
			<link>http://punbb.ru/topic1621-poslednie-obnovleniya-new-posts.html</link>
			<description><![CDATA[<p>Во-первых, спешу поделиться своей радостью по поводу SVN <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> Давно хотелось, спасибо hcs за это!</p><p>Во-вторых, hcs, как часто ты будешь текущую ревизию превращать в файл &quot;сборка нашего форума&quot;? И как ты выкрутишся с номером ревизии? Сейчас №8, а уже был №85 <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Во-третьих, предложение. Кроме собственно истории изменений, которую можно увидеть через Trac, надо где-то писать развернутый комментарий про текущую ревизию. Почему бы не делать это прямо в этой теме <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Так вот, <strong>ревизии 7 и 8</strong> - мои обновления про E.F.U. <br />Никаких революций, просто убедился, что file upload работает в сборке как надо. Добавлена пара пропущенных CSS-файлов, в профиле пользователя видно сколько он загрузил и ссылка на filemap. Исправлен edit.php - теперь пользователь не сможет превысить квоту на количество постов в одном сообщении... я надеюсь.</p>]]></description>
			<author><![CDATA[dummy@example.com (hcs)]]></author>
			<pubDate>Mon, 20 Aug 2007 01:04:38 +0000</pubDate>
			<guid>http://punbb.ru/topic1621-poslednie-obnovleniya-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Об этом разделе]]></title>
			<link>http://punbb.ru/topic1543-ob-etom-razdele-new-posts.html</link>
			<description><![CDATA[<p>Вообще конечно сокрытие раздела от всех остальных пользователей, имхо, не есть хорошо. С другой стороны и ошиваться тут всем подряд ни к чему.<br />Как думаете, открыть ли раздел для пользователей? При этом для гостей он будет закрыт в том числе и на чтение.<br />Среди пользователей много людей о которых мы не знаем ничего, но которые могут влиться или даже реализовать свою идею.<br />Ваши мнения?</p>]]></description>
			<author><![CDATA[dummy@example.com (hcs)]]></author>
			<pubDate>Wed, 11 Jul 2007 01:06:08 +0000</pubDate>
			<guid>http://punbb.ru/topic1543-ob-etom-razdele-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Вопросы в теме писем. баг]]></title>
			<link>http://punbb.ru/topic847-voprosy-v-teme-pisem-bag-new-posts.html</link>
			<description><![CDATA[<p><span class="postimg"><img src="http://kurt.pp.ru/screen/subj.jpg" alt="http://kurt.pp.ru/screen/subj.jpg" /></span></p><p>Только у меня так?</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Sun, 28 Jan 2007 08:17:52 +0000</pubDate>
			<guid>http://punbb.ru/topic847-voprosy-v-teme-pisem-bag-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Дизайн]]></title>
			<link>http://punbb.ru/topic504-dizain-new-posts.html</link>
			<description><![CDATA[<p>Может предложить Рикарду в следующих версиях основывать дизайн на шаблонах? А то реадктировать php во-первых неудобно, во-вторых ненаглядно а в-третьих - легко ошибиться.<br />Сборки собирать без tpl сложно... <img src="http://punbb.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></description>
			<author><![CDATA[dummy@example.com (torg)]]></author>
			<pubDate>Fri, 19 Jan 2007 07:19:04 +0000</pubDate>
			<guid>http://punbb.ru/topic504-dizain-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Кто это переводил?]]></title>
			<link>http://punbb.ru/topic609-kto-eto-perevodil-new-posts.html</link>
			<description><![CDATA[<p>profile.php?section=personality</p><p>Внешность? Внешность кого? Внешность чего?</p><p>profile.php?section=privacy</p><p>Личный? Кто личный? Личный стоматолог может быть?</p>]]></description>
			<author><![CDATA[dummy@example.com (Bear)]]></author>
			<pubDate>Wed, 30 Aug 2006 14:55:40 +0000</pubDate>
			<guid>http://punbb.ru/topic609-kto-eto-perevodil-new-posts.html</guid>
		</item>
		<item>
			<title><![CDATA[Кнопка форума PunBB.RU]]></title>
			<link>http://punbb.ru/topic159-knopka-foruma-punbbru-new-posts.html</link>
			<description><![CDATA[<p>Сделайте кнопку для форума. Я думаю нам не проблема будет повесить ее на Mozilla.ru среди друзей (надеюсь мы друзья <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> ), поскольку и я и Lakostis поклонники PunBB, а о форуме узнает масса людей. Немного раскуртки не помешает ведь <img src="http://punbb.ru/img/smilies/wink.png" width="15" height="15" alt="wink" /></p><p><em>/Изменил название темы на более понятное.</em></p>]]></description>
			<author><![CDATA[dummy@example.com (PunBB.ru)]]></author>
			<pubDate>Thu, 02 Mar 2006 08:37:57 +0000</pubDate>
			<guid>http://punbb.ru/topic159-knopka-foruma-punbbru-new-posts.html</guid>
		</item>
	</channel>
</rss>
