Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/modules/front/system/ignore.php
<?php
/**
 * @brief        Ignore Preferences
 * @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        20 Aug 2013
 */

namespace IPS\core\modules\front\system;

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

/**
 * Ignore Preferences
 */
class _ignore extends \IPS\Dispatcher\Controller
{
   
/**
     * Execute
     *
     * @return    void
     */
   
public function execute()
    {
        if ( !\
IPS\Member::loggedIn()->member_id )
        {
            \
IPS\Output::i()->error( 'no_module_permission_guest', '2C146/1', 403, '' );
        }

        \
IPS\Output::i()->jsFiles    = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js('front_ignore.js', 'core' ) );

       
parent::execute();
    }
   
   
/**
     * Manage
     *
     * @return    void
     */
   
protected function manage()
    {
       
$url = \IPS\Http\Url::internal( "app=core&module=system&controller=ignore", 'front', 'ignore' );
       
       
/* Build form */
       
$form = \IPS\core\Ignore::form();
        if (
$values = $form->values() )
        {
            \
IPS\Session::i()->csrfCheck();

            try
            {
                \
IPS\core\Ignore::createFromForm( $values );
            }
            catch( \
InvalidArgumentException $e )
            {
                if ( \
IPS\Request::i()->isAjax() )
                {
                    \
IPS\Output::i()->json( array( 'error' => \IPS\Member::loggedIn()->language()->addToStack( 'cannot_ignore_self' ) ), 403 );
                }
                else
                {
                    \
IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack( $e->getMessage() ), '1C146/2', 403, '' );
                }
            }
               
            if ( \
IPS\Request::i()->isAjax() )
            {
               
$data = array();
                foreach( \
IPS\core\Ignore::types() AS $type )
                {
                    if (
$values["ignore_{$type}"] )
                    {
                       
$data["ignore_{$type}"] = 1;
                    }
                }
               
                \
IPS\Output::i()->json( array( 'name' => $values['member']->name, 'member_id' => $values['member']->member_id, 'data' => $data ) );
            }
            else
            {
                \
IPS\Output::i()->redirect( $url );
            }
        }
       
       
/* Build table */
       
$table = new \IPS\Helpers\Table\Db( 'core_ignored_users', $url, array( array( 'ignore_owner_id=?', \IPS\Member::loggedIn()->member_id ) ) );
       
$table->title = 'ignored_users_current';
       
$table->langPrefix = 'ignore_';
       
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'system', 'core', 'front' ), 'ignoreTable' );
       
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'system' ), 'ignoreTableRows' );
       
$filters = array();
        foreach ( \
IPS\core\Ignore::types() as $type )
        {
           
$filters[ $type ] = "ignore_{$type}=1";
        }
       
$table->filters = $filters;
               
       
/* Display */
       
\IPS\Output::i()->breadcrumb[] = array( NULL, \IPS\Member::loggedIn()->language()->addToStack('ignored_users') );
        \
IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('ignored_users');
        \
IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'system' )->ignore( $form->customTemplate( array( \IPS\Theme::i()->getTemplate( 'system' ), 'ignoreForm' ) ), (string) $table, ( isset( \IPS\Request::i()->id ) ? \IPS\Request::i()->id : 0 ) );
    }
   
   
/**
     * Add new ignored user
     *
     * @return    void
     */
   
protected function add()
    {
        \
IPS\Session::i()->csrfCheck();

        try
        {
           
/* We have to html_entity_decode because the javascript code sends the encoded name here */
           
$member = \IPS\Member::load( html_entity_decode( \IPS\Request::i()->name, ENT_QUOTES, 'UTF-8' ), 'name' );
           
           
/* If \IPS\Member::load() cannot find a member, it just creates a new guest object, never throwing the exception */
           
if ( !$member->member_id )
            {
                throw new \
OutOfRangeException( 'cannot_ignore_no_user' );
            }
           
            if (
$member->member_id == \IPS\Member::loggedIn()->member_id )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_self' );
            }

            if ( !
$member->canBeIgnored() )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_that_member' );
            }
           
           
$ignore = NULL;
            try
            {
               
$ignore = \IPS\core\Ignore::load( $member->member_id, 'ignore_ignore_id', array( 'ignore_owner_id=?', \IPS\Member::loggedIn()->member_id ) );
            }
            catch ( \
OutOfRangeException $e ) {}
           
           
$data = array();
            foreach ( \
IPS\core\Ignore::types() as $t )
            {
               
$data[ $t ] = $ignore ? $ignore->$t : FALSE;
            }

            \
IPS\Output::i()->json( $data );            
        }
        catch( \
Exception $e )
        {
            \
IPS\Output::i()->json( array( 'error' => \IPS\Member::loggedIn()->language()->addToStack( $e->getMessage() ) ), 403 );
        }
    }

   
/**
     * Edit
     *
     * @return    void
     */
   
protected function edit()
    {
        try
        {
           
$member = \IPS\Member::load( \IPS\Request::i()->id );
           
           
/* If \IPS\Member::load() cannot find a member, it just creates a new guest object, never throwing the exception */
           
if ( !$member->member_id )
            {
                throw new \
OutOfRangeException( 'cannot_ignore_no_user' );
            }
           
            if (
$member->member_id == \IPS\Member::loggedIn()->member_id )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_self' );
            }
           
            if ( !
$member->canBeIgnored() )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_that_member' );
            }
           
           
$ignore = NULL;
            try
            {
               
$ignore = \IPS\core\Ignore::load( $member->member_id, 'ignore_ignore_id', array( 'ignore_owner_id=?', \IPS\Member::loggedIn()->member_id ) );
            }
            catch ( \
OutOfRangeException $e ) {}
           
           
$form = new \IPS\Helpers\Form( NULL, 'ignore_edit' );
           
$form->class = 'ipsForm_vertical';
           
            foreach ( \
IPS\core\Ignore::types() as $type )
            {
               
$form->add( new \IPS\Helpers\Form\Checkbox( "ignore_{$type}", $ignore ? $ignore->$type : FALSE ) );
            }

           
/* Save values */
           
if( $values = $form->values() )
            {
                foreach ( \
IPS\core\Ignore::types() as $type )
                {
                   
$ignore->$type = $values["ignore_{$type}"];
                }

               
$ignore->save();

                if( !\
IPS\Request::i()->isAjax() )
                {
                   
$this->manage();
                }
                else
                {
                    \
IPS\Output::i()->json( 'OK' );
                }
            }
           
            \
IPS\Output::i()->breadcrumb[] = array( NULL, \IPS\Member::loggedIn()->language()->addToStack('ignored_users') );
            \
IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('add_ignored_user');
            \
IPS\Output::i()->output = $form->customTemplate( array( \IPS\Theme::i()->getTemplate( 'system' ), 'ignoreEditForm' ) );
        }
        catch( \
Exception $e )
        {
            \
IPS\Output::i()->json( \IPS\Member::loggedIn()->language()->addToStack( $e->getMessage() ), 403 );
        }
    }

   
/**
     * Remove (AJAX)
     *
     * @return    void
     */
   
protected function remove()
    {
        \
IPS\Session::i()->csrfCheck();

       
/* Make sure the user confirmed the deletion */
       
\IPS\Request::i()->confirmedDelete();

        try
        {
           
$member = \IPS\Member::load( \IPS\Request::i()->id );
           
           
/* If \IPS\Member::load() cannot find a member, it just creates a new guest object, never throwing the exception */
           
if ( !$member->member_id )
            {
                throw new \
OutOfRangeException;
            }
           
           
$ignore = \IPS\core\Ignore::load( $member->member_id, 'ignore_ignore_id', array( 'ignore_owner_id=?', \IPS\Member::loggedIn()->member_id ) );
           
$ignore->delete();
           
            if ( \
IPS\Request::i()->isAjax() )
            {
                \
IPS\Output::i()->json( array( 'results' => 'ok', 'name' => $member->name ) );
            }
            else
            {
                \
IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=core&module=system&controller=ignore", 'front', 'ignore' ), \IPS\Member::loggedIn()->language()->addToStack( 'ignore_removed', FALSE, array( 'sprintf' => array( $member->name ) ) ) );
            }
        }
        catch ( \
OutOfRangeException $e )
        {
            \
IPS\Output::i()->error( 'node_error', '2C146/5', 404, '' );
        }
    }
   
   
/**
     * Ignore Specific Content Type (AJAX)
     *
     * @return    void
     */
   
protected function ignoreType()
    {
        \
IPS\Session::i()->csrfCheck();
       
        try
        {
            if ( !
in_array( \IPS\Request::i()->type, \IPS\core\Ignore::types() ) )
            {
                throw new \
OutOfRangeException( 'invalid_type' );
            }
           
           
$member    = \IPS\Member::load( \IPS\Request::i()->member_id );
           
            if ( !
$member->member_id )
            {
                throw new \
OutOfRangeException( 'cannot_ignore_no_user' );
            }
           
            if (
$member->member_id == \IPS\Member::loggedIn()->member_id )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_self' );
            }
           
            if ( !
$member->canBeIgnored() )
            {
                throw new \
InvalidArgumentException( 'cannot_ignore_that_member' );
            }
           
           
$type = \IPS\Request::i()->type;
           
$value = isset( \IPS\Request::i()->off ) ? FALSE : TRUE;
           
            try
            {
               
$ignore = \IPS\core\Ignore::load( $member->member_id, 'ignore_ignore_id', array( 'ignore_owner_id=?', \IPS\Member::loggedIn()->member_id ) );
               
$ignore->$type = $value;
               
$ignore->save();
            }
            catch( \
OutOfRangeException $e )
            {
               
$ignore = new \IPS\core\Ignore;
               
$ignore->$type = $value;
               
$ignore->owner_id    = \IPS\Member::loggedIn()->member_id;
               
$ignore->ignore_id    = $member->member_id;
               
$ignore->save();
            }
                       
            \
IPS\Member::loggedIn()->members_bitoptions['has_no_ignored_users'] = FALSE;
            \
IPS\Member::loggedIn()->save();
                       
            if ( \
IPS\Request::i()->isAjax() )
            {
                \
IPS\Output::i()->json( array( 'result' => 'ok' ) );
            }
            else
            {
                \
IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=core&module=system&controller=ignore", 'front', 'ignore' ), 'ignore_adjusted' );
            }
        }

        catch( \
Exception $e )
        {
            if ( \
IPS\Request::i()->isAjax() )
            {
                \
IPS\Output::i()->json( array( 'error' => $e->getMessage() ), 403 );
            }
            else
            {
                \
IPS\Output::i()->error( $e->getMessage(), '1C146/4', 403, '' );
            }
        }
    }
}