Jump to content

Хук подписок выводит информацию безпорядочно


Trotor
 Share

Recommended Posts

Хук который выводит подписки юзера на темы и форумы выводит последние сообщения не по мере обновления тем, а в какой то разброс дат. 

Вот инфа касающегоэтого хука в файле class_forums.php:

Скрытый текст

    /**
     * Hook: Watched Items.
     * Moved here so we can update with out requiring global hook changes
     *
     */
    public function hooks_watchedItems()
    {
        $this->registry->class_localization->loadLanguageFile( array( 'public_topic' ), 'forums' );
        
        if( !$this->memberData['member_id'] )
        {
            return;
        }

        /* INIT */
        $updatedTopics    = array();
        $updatedForums    = array();
        $nUpdatedTopics    = array();
        $nUpdatedForums    = array();
        
        /* Get watched topics */
        $this->registry->DB()->build( array(
                                'select'    => 'tr.*',
                                'from'        => array( 'tracker' => 'tr' ),
                                'where'        => 'tr.member_id=' . $this->memberData['member_id'] . ' AND tr.topic_id > 0',
                                'order'        => 'tr.last_sent DESC',
                                'limit'        => array( 0, 50 ),
                                'add_join'    => array(
                                                    array(
                                                        'select'    => 't.*',
                                                        'from'        => array( 'topics' => 't' ),
                                                        'where'        => 't.tid=tr.topic_id',
                                                        'type'        => 'left'
                                                        )
                                                    )
                        )        );
        $this->registry->DB()->execute();
        
        while( $r = $this->registry->DB()->fetch() )
        {
            if( !$r['tid'] )
            {
                continue;
            }

            $is_read    = $this->registry->classItemMarking->isRead( array( 'forumID' => $r['forum_id'], 'itemID' => $r['tid'], 'itemLastUpdate' => $r['last_post'] ), 'forums' );
            
            if( ! $is_read && $this->memberData['member_id'] != $r['last_poster_id'] )
            {
                $updatedTopics[ $r['topic_id'] ]    = $r;
            }
            else
            {
                $nUpdatedTopics[ $r['topic_id'] ]    = $r;
            }
        }
        
        /* Build a list of hidden forums */
        $noForums = array();
        $_extra      = '';

        foreach( $this->forum_by_id as $forumID => $forumData )
        {
            if ( $forumData['hide_last_info'] )
            {
                $noForums[] = $forumID;
            }
        }
        
        if ( count( $noForums ) )
        {
            $_extra = ' AND forum_id NOT IN (' . implode( ',', $noForums ) . ')';
        }
        
        /* Get watched forums */
        $this->registry->DB()->build( array(
                                            'select'    => 'forum_id, last_sent, member_id',
                                            'from'        => 'forum_tracker',
                                            'order'        => 'last_sent DESC',
                                            'limit'        => array( 0, 50 ),
                                            'where'        => 'member_id=' . $this->memberData['member_id'] . $_extra ) );
                                
        $this->registry->DB()->execute();
        
        while( $r = $this->registry->DB()->fetch() )
        {
            if ( is_array( $this->forum_by_id[ $r['forum_id'] ] ) )
            {
                $r             = array_merge( $r, $this->forum_by_id[ $r['forum_id'] ] );
                
                $last_time    = $this->registry->classItemMarking->fetchTimeLastMarked( array( 'forumID' => $r['forum_id'] ), 'forums' );
                
                if( $r['last_post'] > $last_time )
                {
                    $updatedForums[ $r['forum_id'] ]    = $r;
                }
                else
                {
                    $nUpdatedForums[ $r['forum_id'] ]    = $r;
                }
            }
        }
    
        return $this->registry->output->getTemplate( 'boards' )->hookWatchedItems( $updatedTopics, $nUpdatedTopics, $updatedForums, $nUpdatedForums );
    }

И собственно сам файл: 

class_forums.php

Edited by Trotor
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...