Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/extensions/core/FrontNavigation/YourActivityStreams.php
<?php
/**
 * @brief        Front Navigation Extension: Your Activity Streams
 * @author        <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
 * @copyright    (c) Invision Power Services, Inc.
 * @license        https://www.invisioncommunity.com/legal/standards/
 * @package        Invision Community
 * @since        30 Jun 2015
 */

namespace IPS\core\extensions\core\FrontNavigation;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
   
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
    exit;
}

/**
 * Front Navigation Extension: Your Activity Streams
 */
class _YourActivityStreams extends \IPS\core\FrontNavigation\FrontNavigationAbstract
{
   
/**
     * Get Type Title which will display in the AdminCP Menu Manager
     *
     * @return    string
     */
   
public static function typeTitle()
    {
        return \
IPS\Member::loggedIn()->language()->addToStack('your_activity_streams_acp');
    }
       
   
/**
     * Can the currently logged in user access the content this item links to?
     *
     * @return    bool
     */
   
public function canAccessContent()
    {
        return \
IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'discover' ) ) and count( $this->children() );
    }
   
   
/**
     * Get Title
     *
     * @return    string
     */
   
public function title()
    {
        return \
IPS\Member::loggedIn()->language()->addToStack('your_activity_streams');
    }
   
   
/**
     * Get Link
     *
     * @return    \IPS\Http\Url
     */
   
public function link()
    {
        return
NULL;
    }
   
   
/**
     * Is Active?
     *
     * @return    bool
     */
   
public function active()
    {
        return ( \
IPS\Dispatcher::i()->application->directory === 'core' and \IPS\Dispatcher::i()->module->key === 'discover' and ( isset( \IPS\Request::i()->id ) or ( isset( \IPS\Request::i()->do ) and \IPS\Request::i()->do == 'create' ) ) );
    }
   
   
/**
     * Cached Children
     *
     * @return    array
     */
   
protected static $children = array();
   
   
/**
     * Items
     *
     * @return    array
     */
   
public static function items( \IPS\Member $member = NULL )
    {    
       
$member = $member ?: \IPS\Member::loggedIn();
       
        if ( !isset( static::
$children[ $member->member_id ] ) )
        {
            static::
$children[ $member->member_id ] = array();
           
            if ( !isset( \
IPS\Data\Store::i()->globalStreamIds ) )
            {
               
$globalStreamIds = array();
                foreach ( new \
IPS\Patterns\ActiveRecordIterator( \IPS\Db::i()->select( '*', 'core_streams', 'member IS NULL', 'position ASC' ), 'IPS\core\Stream' ) as $stream )
                {
                   
$globalStreamIds[ $stream->id ] = ( $stream->ownership == 'all' and $stream->read == 'all' and $stream->follow == 'all' and $stream->date_type != 'last_visit' );
                }
               
                \
IPS\Data\Store::i()->globalStreamIds = $globalStreamIds;
            }
                   
           
$globalStreamIdsToShow = array_keys( !$member->member_id ? array_filter( \IPS\Data\Store::i()->globalStreamIds ) : \IPS\Data\Store::i()->globalStreamIds );
           
            if (
count( $globalStreamIdsToShow ) )
            {
                if (
$member->member_id )
                {
                    static::
$children[ $member->member_id ][] = new MenuHeader('default_streams');
                }
               
                foreach (
$globalStreamIdsToShow as $id )
                {
                    static::
$children[ $member->member_id ][] = new YourActivityStreamsItem( array(), $id, '*' );
                }
            }
           
            if (
$member->member_id )
            {
                if (
$member->member_streams and $streams = json_decode( $member->member_streams, TRUE ) and count( $streams['streams'] ) )
                {
                    static::
$children[ $member->member_id ][] = new MenuHeader('custom_streams');
                    foreach (
$streams['streams'] as $id => $title )
                    {
                        static::
$children[ $member->member_id ][] = new YourActivityStreamsItem( array( 'title' => $title ), $id, '*' );
                    }
                }
               
                static::
$children[ $member->member_id ][] = new MenuSeparator;
                static::
$children[ $member->member_id ][] = new MenuButton( 'create_new_stream', \IPS\Http\Url::internal( "app=core&module=discover&controller=streams&do=create", 'front', 'discover_all' ) );
            }
        }
       
        return static::
$children[ $member->member_id ];
    }
   
   
/**
     * Children
     *
     * @param    bool    $noStore    If true, will skip datastore and get from DB (used for ACP preview)
     * @return    array
     */
   
public function children( $noStore=FALSE )
    {    
        return static::
items();        
    }
}