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

Косяки 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, так что работает твой вариант замены?
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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