Перейти к контенту

Косяки IBF. Версии форума 2.x


Рекомендуемые сообщения

Song

Дык и спрашиваю, будет ли толк... У них то тоже вроде не шибко они нагружаются...

 

И обещанные куски кода

class_db_mysql.php

В нескольких местах, где по идее должен заменятся текущий запрос, к нему почему-то присоединяется новый. Конечно проблем не возникает, так как при выполнении запроса текущий все же зануляется, но почему не сразу?

$this->cur_query .= "UPDATE ". $low_pro . SQL_PREFIX."$tbl SET $set";

$this->cur_query .= "DELETE FROM ".SQL_PREFIX."$tbl";

$this->cur_query .= "SELECT $get FROM ".SQL_PREFIX."$table";

Т.е. имхо здесь было бы уместно убрать конкатенацию и заменить на просто присвоить...

Далее, замена префикса автоматом

if ( $this->obj['sql_tbl_prefix'] != "ibf_" and ! $this->prefix_changed )

Возможно я плохо смотрел, но $this->prefix_changed нигде изменяется. В принципе там стоит 0, поэтому эта часть условия всегда верна. Ну не совсем баг, но все же :D.

            $the_error .= "mySQL error code: ".$this->error_no."\n";

В fatal_error. $this->error_no не содержит текущую ошибку. А если содержит, то до строки просто не дойдет исполнение (такова логика этого участка ;)).

Должно быть

            $the_error .= "mySQL error code: ".mysql_errno()."\n";

Вроде больше ничего не помню...

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

Может я конечно чего-то очевидное не вижу... Но вот это имхо маразм:

        //-----------------------------------------
       // Post DB parse BBCode
       //-----------------------------------------

       function post_db_parse_bbcode($t="")
       {
               global $ibforums, $DB, $std;

               if ( is_array( $ibforums->cache['bbcode'] ) and count( $ibforums->cache['bbcode'] ) )
               {
                       foreach( $ibforums->cache['bbcode'] as $i => $row )
                       {
                               if ( substr_count( $row['bbcode_replace'], '{content}' ) > 1 )
                               {
                                       //-----------------------------------------
                                       // Slightly slower
                                       //-----------------------------------------

                                       if ( $row['bbcode_useoption'] )
                                       {
                                               preg_match_all( "#(\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\])(.+?)(\[/".$row['bbcode_tag']."\])#si", $t, $match );

                                               for ($i=0; $i < count($match[0]); $i++)
                                               {
                                                       $tmp = $row['bbcode_replace'];
                                                       $tmp = str_replace( '{option}' , $match[2][$i], $tmp );
                                                       $tmp = str_replace( '{content}', $match[3][$i], $tmp );
                                                       $t   = str_replace( $match[0][$i], $tmp, $t );
                                               }
                                       }
                                       else
                                       {
                                               preg_match_all( "#(\[".$row['bbcode_tag']."\])(.+?)(\[/".$row['bbcode_tag']."\])#si", $t, $match );

                                               for ($i=0; $i < count($match[0]); $i++)
                                               {
                                                       $tmp = $row['bbcode_replace'];
                                                       $tmp = str_replace( '{content}', $match[2][$i], $tmp );
                                                       $t   = str_replace( $match[0][$i], $tmp, $t );
                                               }
                                       }
                               }
                               else
                               {
                                       $replace = explode( '{content}', $row['bbcode_replace'] );

                                       if ( $row['bbcode_useoption'] )
                                       {
                                               $t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\]#si", str_replace( '{option}', "\\1", $replace[0] ), $t );
                                       }
                                       else
                                       {
                                               $t = preg_replace( '#\['.$row['bbcode_tag'].'\]#i' , $replace[0], $t );
                                       }

                                       $t = preg_replace( '#\[/'.$row['bbcode_tag'].'\]#i', $replace[1], $t );
                               }
                       }
               }

               return $t;
       }

Я сделал бы так

        //-----------------------------------------
       // Post DB parse BBCode
       //-----------------------------------------

       function post_db_parse_bbcode($t="")
       {
               global $ibforums, $DB, $std;

               if ( is_array( $ibforums->cache['bbcode'] ) and count( $ibforums->cache['bbcode'] ) )
               {
                       foreach( $ibforums->cache['bbcode'] as $i => $row )
                       {
                                if ( $row['bbcode_useoption'] )
                                {
                                     $replace = str_replace( array("{option}","{content}"), array('\\1','\\2'), $row['bbcode_replace'] );

                                     $t = preg_replace( "#\[".$row['bbcode_tag']."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\](.+?)\[/".$row['bbcode_tag']."\]#si", $replace, $t );

                                }
                                else
                                {
                                     $replace = str_replace( "{content}", '\\1', $row['bbcode_replace'] );

                                     $t = preg_replace( "#\[".$row['bbcode_tag']."\](.+?)\[/".$row['bbcode_tag']."\]#si", $replace, $t );
                                }
                       }
               }

               return $t;
       }

Или я не прав?

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Лазил по calendar.php, в функции make_event_html обнаружил загадочный метод вызова std'шной get_avatar:

$member = $DB->fetch_row();
$member['avatar'] = $std->get_avatar( $member['avatar'], $ibforums->member['view_avs'], $member['avatar_size']);

Естественно, аватары автора записи в событии календария не видно. Если помнять на корректное

$member['avatar'] = $std->get_avatar( $member['avatar_location'] , 1, $member['avatar_size'], $member['avatar_type'] );

, то всё отображается. =_=

 

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

Ссылка на комментарий
Поделиться на других сайтах

  • 3 месяца спустя...
Если помнять на корректное
$member['avatar'] = $std->get_avatar( $member['avatar_location'] , 1, $member['avatar_size'], $member['avatar_type'] );

, то всё отображается. =_=

 

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

 

Отображается, но некорректно масштабируется, а единица тут вообще не нужна.

 

$member['avatar'] = $std->get_avatar( $member['avatar_location'], $ibforums->member['view_avs'], $member['avatar_size'], $member['avatar_type']);

 

У меня вот так переделано.

Ссылка на комментарий
Поделиться на других сайтах

Во-первых,

/*-------------------------------------------------------------------------*/
   // GET USER AVATAR
   /*-------------------------------------------------------------------------*/

   function get_avatar($member_avatar="", [b]$member_view_avatars=0[/b], $avatar_dims="x", $avatar_type='')

Таки не нужна единица?

 

Во-вторых, аватары масштабируются корректно.

 

В третьих, между тем, что написал я, и тем, что написали вы, разница в том, что вы единицу заменили $ibforums->member['view_avs'], т.е. на календарь будет работать настройка «Отображать аватары пользователей?».

 

Дикси.

Ссылка на комментарий
Поделиться на других сайтах

  • 5 месяцев спустя...
Что-то уже обыскался, есть похожие, но не то. Происходит какой-то косяк с сортировкой. Что это может быть. Удалил две спамерские темы и все темы форума исчезли. т.е. они показываются по кнопе - показать скрытые темы. Так-же они показываются и при любом другом способе сортировки (например от A-Z. Перерыл всю базу - различий с другими топиками не обнаружил. завел новую тему - все остальные темы - появились. Удаляю эту тему - снова исчезают. Выход пока нашел только такой - ставлю на этот форум другой способ сортировки (что не есть красиво :-( ) либо завожу левый топик и перевожу его в неодобренные. Кто-нибудь с таким боролся уже ?
Ссылка на комментарий
Поделиться на других сайтах

Ковырялся я долго (по вышприведенному посту). Добрался я до следующей ситуации. Все вышеприведенное натыкается на ошибку в SQL запросе, а именно в момент сортировки по полю last_post и именно по убыванию этого поля. Например если я просто тупо подаю SQL запрос (прямо в базу, не средствами форума) - вот такой

SELECT * FROM ibf_topics WHERE forum_id=6 AND pinned IN (0,1) and approved=1 ORDER BY pinned DESC, last_post DESC

ничего из базы не выбирается. Если-же я даю сортировку по возрастанию (ASC) то все нормально показыват. или если совсем без сортировки - тоже нормально. Я понимаю, что без самих данных - трудно что-либо сказать, но я вроде проверил это поле - там вроде все нормально. Может кто встречался с таким? Где хоть копать - поскажите...

 

 

Вообщем в продолжение темы... Подавая запросы различными способами - определили, что если например поменять местами сортировку - например сначала по последним постам (last_post) а потом по прикрепленным сообщениям (pinned) то все темы показываются, но как и ожидалось - сортировка нарушается с прикрепленными сообщениями. А потом я просто взял и добавил еще одно поле в сортировку, что-б ничего не нарушать, дал сортировку снова по полу pinned - и все заработало. В чем трабла - я так и не понял, но работает. Короче вот такие строки я поменял (для 2.1.1)

Найти

			
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
				 'from'   => 'topics',
				 'where'  =>  $query . $add_query,
				 'order'  => 'pinned DESC, '.$topic_sort.' '.$sort_key .' '. $r_sort_by,

 

Заменить

 

					
$this->ipsclass->DB->simple_construct( array( 'select' => '*',
		  'from'   => 'topics',
		  'where'  =>  $query . $add_query,	
		  'order'  =>  'pinned DESC,' .$topic_sort.' '.$sort_key .' '. $r_sort_by . ',pinned ',

Ссылка на комментарий
Поделиться на других сайтах

  • 3 месяца спустя...
d1pro, так что работает твой вариант замены?
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.