Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/extensions/core/ModeratorPermissions/ContentGenerator.php
<?php
/**
 * @brief        Moderator Permissions: Content
 * @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        15 Jan 2014
 */

namespace IPS\core\extensions\core\ModeratorPermissions;

/* 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;
}

/**
 * Moderator Permissions: Content
 */
class _ContentGenerator extends \IPS\Content\ExtensionGenerator
{
   
/**
     * @brief    If TRUE, will prevent comment classes being included
     */
   
protected static $contentItemsOnly = TRUE;
           
   
/**
     * Get Permissions
     *
     * @param    array    $toggles    Toggle data
     * @code
         return array(
             'key'    => 'YesNo',    // Can just return a string with type
             'key'    => array(    // Or an array for more options
                 'YesNo',            // Type
                 array( ... ),        // Options (as defined by type's class)
                 'prefix',            // Prefix
                 'suffix',            // Suffix
             ),
             ...
         );
     * @endcode
     * @return    array
     */
   
public function getPermissions( $toggles )
    {
       
/* Init */
       
$class = $this->class;
        if ( !
$class::$canBeModeratedFromFrontend )
        {
            return array();
        }
       
$return = array();

       
/* Node selector */
       
if ( isset( $class::$containerNodeClass ) )
        {
           
$containerNodeClass = $class::$containerNodeClass;
           
            if ( isset(
$containerNodeClass::$modPerm ) )
            {
               
$return[ $containerNodeClass::$modPerm ] = array( 'Node', array( 'class' => $containerNodeClass, 'zeroVal' => 'all', 'multiple' => TRUE, 'forceOwner' => FALSE ) );
            }
        }

       
/* Content items */
       
if ( in_array( 'IPS\Content\Pinnable', class_implements( $class ) ) )
        {
           
$return[ "can_pin_{$class::$title}" ] = 'YesNo';
           
$return[ "can_unpin_{$class::$title}" ] = 'YesNo';
        }
        if (
in_array( 'IPS\Content\Featurable', class_implements( $class ) ) )
        {
           
$return[ "can_feature_{$class::$title}" ] = 'YesNo';
           
$return[ "can_unfeature_{$class::$title}" ] = 'YesNo';
        }
       
$return[ "can_edit_{$class::$title}" ] = 'YesNo';
        if (
in_array( 'IPS\Content\Hideable', class_implements( $class ) ) )
        {
           
$return[ "can_hide_{$class::$title}" ] = 'YesNo';
           
$return[ "can_unhide_{$class::$title}" ] = 'YesNo';
           
$return[ "can_view_hidden_{$class::$title}" ] = 'YesNo';
        }
        if (
in_array( 'IPS\Content\FuturePublishing', class_implements( $class ) ) )
        {
           
$return[ "can_future_publish_{$class::$title}" ] = 'YesNo';
           
$return[ "can_view_future_{$class::$title}" ] = 'YesNo';
        }
        if ( isset(
$class::$containerNodeClass ) )
        {
           
$return[ "can_move_{$class::$title}" ] = 'YesNo';
        }
        if (
in_array( 'IPS\Content\Lockable', class_implements( $class ) ) )
        {
           
$return[ "can_lock_{$class::$title}" ] = 'YesNo';
           
$return[ "can_unlock_{$class::$title}" ] = 'YesNo';
           
$return[ "can_reply_to_locked_{$class::$title}" ] = 'YesNo';
        }
        if (
in_array( 'IPS\Content\MetaData', class_implements( $class ) ) )
        {
            if (
in_array( 'core_FeaturedComments', $class::supportedMetaDataTypes() ) )
            {
               
$return[ "can_feature_comments_{$class::$title}" ] = 'YesNo';
               
$return[ "can_unfeature_comments_{$class::$title}" ] = 'YesNo';
            }
           
            if (
in_array( 'core_ContentMessages', $class::supportedMetaDataTypes() ) )
            {
               
$return[ "can_add_item_message_{$class::$title}" ] = 'YesNo';
               
$return[ "can_edit_item_message_{$class::$title}" ] = 'YesNo';
               
$return[ "can_delete_item_message_{$class::$title}" ] = 'YesNo';
            }
        }
       
$return[ "can_delete_{$class::$title}" ] = 'YesNo';
        if (
$class::$firstCommentRequired )
        {
           
$return[ "can_split_merge_{$class::$title}" ] = 'YesNo';
        }
       
       
/* Comments */
       
if ( isset( $class::$commentClass ) )
        {
           
$commentClass = $class::$commentClass;
           
$return[ "can_edit_{$commentClass::$title}" ] = 'YesNo';
            if (
in_array( 'IPS\Content\Hideable', class_implements( $class::$commentClass ) ) )
            {
               
$return[ "can_hide_{$commentClass::$title}" ] = 'YesNo';
               
$return[ "can_unhide_{$commentClass::$title}" ] = 'YesNo';
               
$return[ "can_view_hidden_{$commentClass::$title}" ] = 'YesNo';
            }
           
$return[ "can_delete_{$commentClass::$title}" ] = 'YesNo';
        }
       
       
/* Reviews */
       
if ( isset( $class::$reviewClass ) )
        {
           
$reviewClass = $class::$reviewClass;
           
$return[ "can_edit_{$reviewClass::$title}" ] = 'YesNo';
            if (
in_array( 'IPS\Content\Hideable', class_implements( $class::$reviewClass ) ) )
            {
               
$return[ "can_hide_{$reviewClass::$title}" ] = 'YesNo';
               
$return[ "can_unhide_{$reviewClass::$title}" ] = 'YesNo';
               
$return[ "can_view_hidden_{$reviewClass::$title}" ] = 'YesNo';
            }
           
$return[ "can_delete_{$reviewClass::$title}" ] = 'YesNo';
        }
       
       
/* Other */
       
foreach ( \IPS\Application::load( $class::$application )->extensions( 'core', 'ContentModeratorPermissions' ) as $ext )
        {
           
$return = array_merge( $return, $ext->getPermissions( $toggles ) );
        }
       
       
/* Return */
       
return $return;
    }
   
   
/**
     * After change
     *
     * @param    array    $moderator    The moderator
     * @param    array    $changed    Values that were changed
     * @return    void
     */
   
public function onChange( $moderator, $changed )
    {
       
$class = $this->class;
        foreach ( \
IPS\Application::load( $class::$application )->extensions( 'core', 'ContentModeratorPermissions' ) as $ext )
        {
           
$ext->onChange( $moderator, $changed );
        }
    }
   
   
/**
     * After delete
     *
     * @param    array    $moderator    The moderator
     * @return    void
     */
   
public function onDelete( $moderator )
    {
       
$class = $this->class;
        foreach ( \
IPS\Application::load( $class::$application )->extensions( 'core', 'ContentModeratorPermissions' ) as $ext )
        {
           
$ext->onDelete( $moderator );
        }
    }
}