Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/extensions/core/FrontNavigation/CustomItem.php
<?php
/**
 * @brief        Front Navigation Extension: Custom Item
 * @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
 * @subpackage    Core
 * @since        21 Jan 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: Custom Item
 */
class _CustomItem 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('menu_custom_item');
    }
   
   
/**
     * Allow multiple instances?
     *
     * @return    string
     */
   
public static function allowMultiple()
    {
        return
TRUE;
    }
   
   
/**
     * Get configuration fields
     *
     * @param    array    $configuration    The existing configuration, if editing an existing item
     * @param    int        $id                The ID number of the existing item, if editing
     * @return    array
     */
   
public static function configuration( $existingConfiguration, $id = NULL )
    {
       
$currentUrl = NULL;
        if ( isset(
$existingConfiguration['menu_custom_item_url'] ) )
        {
            if ( isset(
$existingConfiguration['internal'] ) )
            {
               
$currentUrl = (string) \IPS\Http\Url::internal( $existingConfiguration['menu_custom_item_url'], 'front', $existingConfiguration['internal'], isset( $existingConfiguration['seoTitles'] ) ? $existingConfiguration['seoTitles'] : array() );
            }
            else
            {
               
$currentUrl = $existingConfiguration['menu_custom_item_url'];
            }
        }
       
        return array(
            new \
IPS\Helpers\Form\Translatable( 'menu_custom_item_link', NULL, NULL, array( 'app' => 'core', 'key' => $id ? "menu_item_{$id}" : NULL ), function( $val )
            {
                if ( !
trim( $val[ \IPS\Lang::defaultLanguage() ] ) )
                {
                    throw new \
InvalidArgumentException('form_required');
                }
            } ),
            new \
IPS\Helpers\Form\Url( 'menu_custom_item_url', $currentUrl, NULL, array(), function( $val )
            {
                if ( isset( \
IPS\Request::i()->menu_manager_extension ) and \IPS\Request::i()->menu_manager_extension === 'core_CustomItem' and empty( $val ) )
                {
                    throw new \
InvalidArgumentException('form_required');
                }
            } ),
            new \
IPS\Helpers\Form\YesNo( 'menu_custom_item_target_blank', isset( $existingConfiguration['menu_custom_item_target_blank'] ) ? $existingConfiguration['menu_custom_item_target_blank'] : FALSE )
        );
    }
   
   
/**
     * Parse configuration fields
     *
     * @param    array    $configuration    The values received from the form
     * @return    array
     */
   
public static function parseConfiguration( $configuration, $id )
    {
       
$baseUrl = \IPS\Http\Url::internal('', 'front');
       
        if (
$configuration['menu_custom_item_url'] instanceof \IPS\Http\Url\Friendly )
        {
           
$configuration['internal'] = $configuration['menu_custom_item_url']->seoTemplate;
           
$configuration['seoTitles'] = $configuration['menu_custom_item_url']->seoTitles;
           
$configuration['menu_custom_item_url'] = http_build_query( $configuration['menu_custom_item_url']->hiddenQueryString + $configuration['menu_custom_item_url']->queryString, '', '&' );
        }
        else
        {
           
$configuration['menu_custom_item_url'] = (string) $configuration['menu_custom_item_url'];
        }
               
        \
IPS\Lang::saveCustom( 'core', "menu_item_{$id}", $configuration['menu_custom_item_link'] );
        unset(
$configuration['menu_custom_item_link'] );
       
        return
$configuration;
    }
   
   
/**
     * Permissions can be inherited?
     *
     * @return    bool
     */
   
public static function permissionsCanInherit()
    {
        return
FALSE;
    }
       
   
/**
     * Get Title
     *
     * @return    string
     */
   
public function title()
    {
        return \
IPS\Member::loggedIn()->language()->addToStack( "menu_item_{$this->id}" );
    }
   
   
/**
     * Get Link
     *
     * @return    \IPS\Http\Url
     */
   
public function link()
    {
        if ( isset(
$this->configuration['menu_custom_item_url'] ) and ( $this->configuration['menu_custom_item_url'] or isset( $this->configuration['internal'] ) ) )
        {
            if ( isset(
$this->configuration['internal'] ) )
            {
                return \
IPS\Http\Url::internal( $this->configuration['menu_custom_item_url'], 'front', $this->configuration['internal'], isset( $this->configuration['seoTitles'] ) ? $this->configuration['seoTitles'] : array() );
            }
            else
            {
                return \
IPS\Http\Url::external( $this->configuration['menu_custom_item_url'] );
            }
        }
        else
        {
            return
'#';
        }        
    }
   
   
/**
     * Get target (e.g. '_blank')
     *
     * @return    string
     */
   
public function target()
    {
        if ( isset(
$this->configuration['menu_custom_item_target_blank'] ) and $this->configuration['menu_custom_item_target_blank'] )
        {
            return
'_blank';
        }
        else
        {
            return
'';
        }        
    }
}