Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

pawel7121

Użytkownik
  • Postów

    552
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez pawel7121

  1. Date: Wed, 31 Jul 2013 10:40:35 +0000 Error: 1146 - Table 'fuj_com._postacie' doesn't exist IP Address: 178.23.106.90 - /user/1-pgmajster/?tab=characters ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- mySQL query error: SELECT COUNT(*) AS num_rows FROM _postacie WHERE Online = 1 .--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. | File | Function | Line No. | |----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------| | web/applications_addon/other/majster/sources/classes/core.php | [core].loadOnlinePlayersAmount | 1 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------' | web/applications_addon/other/majster/extensions/profileTabs/characters.php | [core].__construct | 26 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------' | web/applications/members/modules_public/profile/view.php | [profile_characters].return_html_block | 479 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------' | web/applications/members/modules_public/profile/view.php | [public_members_profile_view]._viewModern | 64 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------' | web/sources/base/ipsController.php | [public_members_profile_view].doExecute | 306 | '----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'
    

    Więc o tabele chodzi, pomyślę trochę nad tym.

    Temat nie zamykać, zawieszam go. :)

  2. Witam, stworzyłem coś takiego jak miałem, lecz to mi nie wystarcza i zacząłem pisać inną appkę, ale za to też nie umie się zabrać.

    Napisałem w profileTabs aplikacji character.php, który zawiera:

     

    [long]

    <?php
    
    define( 'RP_PREFIX', '_');
    
    class profile_characters extends profile_plugin_parent
    {
    
        private $template = '';
        private $profile = array();
        private $character = array();
    
        /**
         * Feturn HTML block
         *
         * @access    public
         * @param    array        Member information
         * @return    string        HTML block
         */
        public function return_html_block( $profile = array() )
        {
            $this->profile = $profile;
            
            try
            {
                $classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'majster' ) . '/sources/classes/core.php', 'core' );
                $this->registry->setClass( 'core', new $classToLoad( $this->registry ) );
            }
            catch( Exception $error )
            {
                IPS_exception_error( $error );
            }
            
            if( isset( $this->request['newCharacter'] ) )
            {            
                $this->newCharacterView();
            }
            else
            {
                $this->allCharactersView();
            }
            
            return $this->template;
        }
        
        private function allCharactersView()
        {
            $characters =  $this->registry->getClass( 'core' )->getCharactersOfMember( $this->profile['member_id'] );
            $this->template = $this->registry->output->getTemplate( 'majster' )->profileTabCharacters_AllCharacters( $characters, $this->profile );
        }
        
        private function newCharacterView()
        {
            try
            {
                $classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'majster' ) . '/sources/classes/newCharacter.php', 'newCharacter' );
                $this->registry->setClass( 'newCharacter', new $classToLoad( $this->registry ) );
            }
            catch( Exception $error )
            {
                IPS_exception_error( $error );
            }
            
            $this->template =  $this->registry->output->getTemplate( 'majster' )->pageTabCharacters_newCharacter();
        }
    }
    ?>
    

    [/long]

     

    I troche tam w stylu, gdy będzie trzeba pokaże.

     

    Gdy wchodzę w zakładkę w profilu wyskakuje driver error

    http://i.imgur.com/Sb0YU8m.png

     

    Co poradzicie? Żadnego połączenia MySQL nie robiłem, a w kodzie pomagał kolega :P

  3.  

    Usuń ostatni }:

     

                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
            }

    Klamry są do pary.

     

     

        public function formMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* HTML checkbox language strings */
            $this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_post' ), 'forums' );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
                    
            if ( ! $this->memberData['g_edit_profile'] AND ! $this->memberData['g_minecraft_unit'] )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
               
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
    
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setAllowHtml( $this->memberData['g_dohtml'] );
            $this->editor->setIsHtml( $this->memberData['bw_html_minecraft'] );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->set( array( 'memberData'       => $this->memberData,
                                 'parseBBCode'       => 1,
                                 'parseHtml'       => ( $this->memberData['g_dohtml'] && $this->memberData['bw_html_minecraft'] ),
                                 'parseArea'      => 'minecraft',
                                 'parseEmoticons' => 1 ) );
            
            $minecraft    = $parser->display( $this->memberData['minecraft'] );
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersSignatureForm( $this->editor->show( 'Post', array( 'noSmilies' => false ) ), $minecraft );
        }
    

    Dziękuje Mac, lecz nie wyświetla mi się zakładka "Minecraft" w panelu bocznym

    RpyLoA0.png

    nie wiem jaki kod za to odpowiada.

  4. Skopiowałem z sygnatury kod na wyświetlanie i zedytowałem na minecraft pages.

     /**
         * Show the minecraft pages
         *
         * @author    PGmajster
         * @return    string        Processed HTML
         */
        public function formMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* HTML checkbox language strings */
            $this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_post' ), 'forums' );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
                    
            
            
            if ( ! $this->memberData['g_edit_profile'] AND ! $this->memberData['g_minecraft_unit'] )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
            
        
                
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
            }
    
             
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setAllowHtml( $this->memberData['g_dohtml'] );
            $this->editor->setIsHtml( $this->memberData['bw_html_minecraft'] );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->set( array( 'memberData'       => $this->memberData,
                                 'parseBBCode'       => 1,
                                 'parseHtml'       => ( $this->memberData['g_dohtml'] && $this->memberData['bw_html_minecraft'] ),
                                 'parseArea'      => 'minecraft',
                                 'parseEmoticons' => 1 ) );
            
            $minecraft    = $parser->display( $this->memberData['minecraft'] );
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersSignatureForm( $this->editor->show( 'Post', array( 'noSmilies' => false ) ), $minecraft );
        }
     
    

     

     

    również zapis skopiowałem z sygnatury i zedytowałem na minecrafta

     

    /**
         * UserCP Save Form: Minecraft
         *
         * @return    array    Errors
         */
        public function saveMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            $this->editor->setLegacyMode(false);
            
            $isHtml = intval( $this->request['minecraft_htmlstatus'] );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
    
        
            
            if ( ! $this->memberData['g_edit_profile'] AND ! $this->memberData['g_minecraft_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1028, null, null, 403 );
            }
    
            //-----------------------------------------
            // Post process the editor
            // Now we have safe HTML and bbcode
            //-----------------------------------------
            
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setIsHtml( $this->memberData['g_dohtml'] && $isHtml );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
            $minecraft = $this->editor->process( $_POST['Post'] );
            
            //-----------------------------------------
            // Parse post
            //-----------------------------------------
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->testForParsingLimits( $minecraft, array( 'quote', 'emoticons', 'urls' ) );
                
            if ( is_array( $parser->getErrors() ) && count( $parser->getErrors() ) )
            {
                $this->lang->loadLanguageFile( array( 'public_post' ), 'forums' );
                    
                $_error    = array_pop( $parser->getErrors() );
                $this->registry->getClass('output')->showError( $_error, 10210 );
            }
            
            //-----------------------------------------
            // Signature restrictions...
            //-----------------------------------------
            
            $minecraft_errors    = array();
    
            $minecraft    = preg_replace( '#^\s*(</p>)+#i', '', $minecraft );
            $minecraft    = preg_replace( '#(</p>)+?\s*$#i', '', $minecraft );
            
            
            
    
            
            if( count($minecraft_errors) )
            {
                $this->registry->getClass('output')->showError( implode( '<br />', $minecraft_errors ), 10211 );
            }
            
            /* Save HTML status */
            $members_bitoptions = IPSBWOptions::thaw( $this->memberData['members_bitoptions'], 'members', 'global' );
            $members_bitoptions['bw_html_minecraft'] = $isHtml;
            
            //-----------------------------------------
            // Write it to the DB.
            //-----------------------------------------
            
            IPSMember::save( $this->memberData['member_id'], array( 'members' => $members_bitoptions, 'extendedProfile' => array( 'minecraft' => $minecraft ) ) );
            
            /* Update cache */
            IPSContentCache::update( $this->memberData['member_id'], 'minecraft', $parser->display( $minecraft ) );
            
            return TRUE;
        }
    

     

    Zostało wiele po resistance sygnaturki, tzn. ustawienia, które są w ACP. (Max lini, obrazków itd.) Spróbowałem usunąć większość ale pewnie zostało jeszcze.

  5. Wszystko

    [long]

    <?php

    /**
     * <pre>
     * Invision Power Services
     * IP.Board v3.4.5
     * Core user control panel plugin
     * Last Updated: $Date: 2013-05-02 17:05:35 -0400 (Thu, 02 May 2013) $
     * </pre>
     *
     * @author         $Author: bfarber $
     * @copyright    © 2001 - 2009 Invision Power Services, Inc.
     * @license        http://www.invisionpower.com/company/standards.php#license
     * @package        IP.Board
     * @subpackage    Core
     * @link        http://www.invisionpower.com
     * @since        20th February 2002
     * @version        $Rev: 12216 $
     *
     */

    if ( ! defined( 'IN_IPB' ) )
    {
        print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
        exit();
    }

    class usercpForms_core extends public_core_usercp_manualResolver implements interface_usercp
    {
        /**
         * Tab name
         * This can be left blank and the application title will
         * be used
         *
         * @var        string
         */
        public $tab_name = "Settings";

        /**
         * Default area code
         *
         * @var        string
         */
        public $defaultAreaCode = 'profileinfo';
        
        /**
         * OK Message
         * This is an optional message to return back to the framework
         * to replace the standard 'Settings saved' message
         *
         * @var        string
         */
        public $ok_message = '';

        /**
         * Hide 'save' button and form elements
         * Useful if you have custom output that doesn't
         * need to use it
         *
         * @var        bool
         */
        public $hide_form_and_save_button = false;

        /**
         * If you wish to allow uploads, set a value for this
         *
         * @var        integer
         */
        public $uploadFormMax = 0;

        /**
         * Flag to indicate that the user is a facebook logged in user doozer
         *
         * @var        boolean
         */
        protected $_isFBUser = false;
        
        /**
         * Flag to indicate compatibility
         *
         * @var        int
         */
         public $version    = 32;

        /**
         * Initiate this module
         *
         * @return    @e void
         */
        public function init( )
        {
            $this->tab_name    = ipsRegistry::getClass('class_localization')->words['tab__core'];

            /* Facebook? */
            if ( IPSLib::fbc_enabled() === TRUE AND $this->memberData['fb_uid'] )
            {
                $this->_isFBUser = true;
            }

            if( !$this->memberData['g_edit_profile'] )
            {
                $this->defaultAreaCode    = 'email';
            }
        }

        /**
         * Return links for this tab
         * You may return an empty array or FALSE to not have
         * any links show in the tab.
         *
         * The links must have 'area=xxxxx'. The rest of the URL
         * is added automatically.
         * 'area' can only be a-z A-Z 0-9 - _
         *
         * @author    Matt Mecham
         * @return    array         Links
         */
        public function getLinks()
        {
            ipsRegistry::instance()->getClass('class_localization')->loadLanguageFile( array( 'public_usercp' ), 'core' );

            $array = array();

            if( $this->memberData['g_edit_profile'] )
            {
                $array[] = array( 'url'    => 'area=profileinfo',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['change_settings'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'profileinfo' ? 1 : 0,
                                  'area'   => 'profileinfo'
                                   );
            }
            
            if ( $this->memberData['gbw_allow_customization'] AND ! $this->memberData['bw_disable_customization'] )
            {
                $array[] = array( 'url'    => 'area=customize',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_customize'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'customize' ? 1 : 0,
                                  'area'   => 'customize'
                                 );
            }
            
            $array[] = array( 'url'    => 'area=email',
                              'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_email_pass_change'],
                              'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'email' ? 1 : 0,
                              'area'   => 'email'
                            );
            
            if ( $this->settings['auth_allow_dnames'] == 1 AND $this->memberData['g_dname_changes'] != 0 )
            {
                $array[] = array( 'url'    => 'area=displayname',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['ucp_change_name'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'displayname' ? 1 : 0,
                                  'area'   => 'displayname'
                                );
            }
            
            $sig_restrictions    = explode( ':', $this->memberData['g_signature_limits'] );
            
            if ( ( ! $sig_restrictions[0] OR ( $sig_restrictions[0] AND $this->memberData['g_sig_unit'] ) ) AND $this->memberData['g_edit_profile'] )
            {
                $array[] = array( 'url'    => 'area=signature',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_sig_info'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'signature' ? 1 : 0,
                                  'area'   => 'signature'
                                  );
            }

            
            $array[] = array( 'url'    => 'area=ignoredusers',
                              'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_ignore_users'],
                              'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'ignoredusers' ? 1 : 0,
                              'area'   => 'ignoredusers'
                             );
                            
            if ( IPSLib::fbc_enabled() === TRUE )
            {
                $array[] = array( 'url'    => 'area=facebook',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_facebook'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'facebook' ? 1 : 0,
                                  'area'   => 'facebook'
                                 );
            }
            
            if ( IPSLib::twitter_enabled() === TRUE )
            {
                $array[] = array( 'url'    => 'area=twitter',
                                  'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_twitter'],
                                  'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'twitter' ? 1 : 0,
                                  'area'   => 'twitter'
                                 );
            }
            
            if ( $this->memberData['g_attach_max'] != -1 )
            {
                $array[] = array(
                                'url'    => 'area=attachments',
                                'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_attach'],
                                'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'attachments' ? 1 : 0,
                                'area'   => 'attachments'
                                );
            }

            $array[] = array( 'url'    => 'area=notifications',
                              'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_notifications'],
                              'active' => $this->request['tab'] == 'core' && $this->request['area'] == 'notifications' ? 1 : 0,
                              'area'   => 'notifications'
                            );
                            
            $array[] = array( 'url'    => 'area=notificationlog',
                              'title'  => ipsRegistry::instance()->getClass('class_localization')->words['m_arch_notify'],
                              'active' => ( in_array( $this->request['area'], array( 'notificationlog', 'viewNotification', 'removeNotifications' ) ) ) ? 1 : 0,
                              'area'   => 'notificationlog'
                            );

            return $array;
        }


        /**
         * Run custom event
         *
         * If you pass a 'do' in the URL / post form that is not either:
         * save / save_form or show / show_form then this function is loaded
         * instead. You can return a HTML chunk to be used in the UserCP (the
         * tabs and footer are auto loaded) or redirect to a link.
         *
         * If you are returning HTML, you can use $this->hide_form_and_save_button = 1;
         * to remove the form and save button that is automatically placed there.
         *
         * @author    Matt Mecham
         * @param    string        Current area
         * @return    mixed        html or void
         */
        public function runCustomEvent( $currentArea )
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $html = '';

            //-----------------------------------------
            // What to do?
            //-----------------------------------------

            switch( $currentArea )
            {
                case 'removeIgnoredUser':
                    return $this->customEvent_removeIgnoredUser();
                break;
                case 'toggleIgnoredUser':
                    return $this->customEvent_toggleIgnoredUser();
                break;
                case 'facebookSync':
                    $html = $this->customEvent_facebookSync();
                break;
                case 'facebookRemove':
                    $html = $this->customEvent_facebookRemove();
                break;
                case 'twitterRemove':
                    $html = $this->customEvent_twitterRemove();
                break;
                case 'facebookLink':
                    $html = $this->customEvent_facebookLink();
                break;
                case 'updateAttachments':
                    return $this->customEvent_updateAttachments();
                break;
                
                case 'viewNotification':
                    $html    = $this->customEvent_viewNotification();
                break;
                
                case 'markNotification':
                    return $this->customEvent_markNotification();
                break;
                
                case 'removeNotifications':
                    return $this->customEvent_removeNotifications();
                break;
            }

            //-----------------------------------------
            // Turn off save button
            //-----------------------------------------

            $this->hide_form_and_save_button = 1;

            //-----------------------------------------
            // Return
            //-----------------------------------------

            return $html;
        }

        /**
         * Delete attachments
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function customEvent_updateAttachments()
        {
            //-----------------------------------------
             // Get the ID's to delete
             //-----------------------------------------

             $finalIDs = array();

            //-----------------------------------------
            // Grab post IDs
            //-----------------------------------------

            if ( is_array( $_POST['attach'] ) and count( $_POST['attach'] ) )
            {
                foreach( $_POST['attach'] as $id => $value )
                {
                    $finalIDs[ $id ] = intval( $id );
                }
            }

             if ( count($finalIDs) > 0 )
             {
                $this->DB->build( array(    'select'    => 'a.*',
                                                'from'        => array( 'attachments' => 'a' ),
                                                'where'        => "a.attach_id IN (" . implode( ",", $finalIDs ) .") AND a.attach_rel_module IN( 'post', 'msg' ) AND attach_member_id=" . $this->memberData['member_id'],
                                                'add_join'    => array(
                                                                    array( 'select'    => 'p.topic_id, p.pid',
                                                                            'from'    => array( 'posts' => 'p' ),
                                                                            'where'    => "p.pid=a.attach_rel_id AND a.attach_rel_module='post'",
                                                                            'type'    => 'left'
                                                                        ),
                                                                    array( 'select'    => 'mt.msg_id, mt.msg_topic_id',
                                                                            'from'    => array( 'message_posts' => 'mt' ),
                                                                            'where'    => "mt.msg_id=a.attach_rel_id AND a.attach_rel_module='msg'",
                                                                            'type'    => 'left'
                                                                        ),
                                                                    )
                                    )        );

                $o = $this->DB->execute();

                while ( $killmeh = $this->DB->fetch( $o ) )
                {
                    if ( $killmeh['attach_location'] )
                    {
                        @unlink( $this->settings['upload_dir']."/".$killmeh['attach_location'] );
                    }
                    if ( $killmeh['attach_thumb_location'] )
                    {
                        @unlink( $this->settings['upload_dir']."/".$killmeh['attach_thumb_location'] );
                    }

                    if ( $killmeh['topic_id'] )
                    {
                        $this->DB->update( 'topics', 'topic_hasattach=topic_hasattach-1', 'tid='.$killmeh['topic_id'], true, true );
                    }
                    else if( $killmeh['msg_id'] )
                    {
                        $this->DB->update( 'message_topics', 'mt_hasattach=mt_hasattach-1', 'mt_id='.$killmeh['msg_topic_id'], true, true );
                    }
                }

                $this->DB->delete( 'attachments', 'attach_id IN ('.implode(",",$finalIDs).') and attach_member_id='.$this->memberData['member_id'] );
             }

            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=attachments&do=show" );
        }

        /**
         * UserCP handle our notifications
         *
         * @return    boolean        Successful
         */
        public function customEvent_removeNotifications()
        {
            //-----------------------------------------
            // Check form hash
            //-----------------------------------------
            
            $this->request['secure_key'] = $this->request['secure_key'] ? $this->request['secure_key'] : $this->request['md5check'];

            if( $this->request['secure_key'] != $this->member->form_hash )
            {
                $this->registry->output->showError( 'usercp_forums_bad_key', 1021523 );
            }
            
            //-----------------------------------------
            // Notifications library
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );

            //-----------------------------------------
            // Delete the notifications
            //-----------------------------------------
            
            $_toDelete    = IPSLib::cleanIntArray( $this->request['notifications'] );
            
            if( !count($_toDelete) )
            {
                return $this->showInlineNotifications( $this->lang->words['no_notify_del'] );
            }
            
            $this->DB->delete( 'inline_notifications', "notify_id IN(" . implode( ',', $_toDelete ) . ") AND notify_to_id=" . $this->memberData['member_id'] );
            
            //-----------------------------------------
            // If member has 'unread' count, rebuild count
            //-----------------------------------------
            
            if( $this->memberData['notification_cnt'] )
            {
                $notifyLibrary->rebuildUnreadCount();
            }

            //-----------------------------------------
            // Redirect
            //-----------------------------------------
            
            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=notificationlog&confirm=1" );
        }
        
        /**
         * Mark a notification
         *
         * @return    string    HTML
         */
        public function customEvent_markNotification()
        {
            //-----------------------------------------
            // Notifications library
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );

            //-----------------------------------------
            // Get notification
            //-----------------------------------------
            
            /* Marking them all as read? */
            if ( $this->request['mark'] == 'all' )
            {
                $this->DB->update( 'inline_notifications', array( 'notify_read' => time() ), 'notify_to_id=' . $this->memberData['member_id'] );
            }
            else
            {
                $id                = intval($this->request['mark']);
                $notification    = $this->DB->buildAndFetch( array( 'select' => '*', 'from' => 'inline_notifications', 'where' => 'notify_id=' . $id ) );
                
                //-----------------------------------------
                // Error checking
                //-----------------------------------------
                
                if( !$notification['notify_id'] )
                {
                    if( $this->request['ajax'] )
                    {
                        print 'ok';
                        exit;
                    }
                    else
                    {
                        $this->registry->getClass('output')->silentRedirect( $this->settings['base_url'] . "app=core&module=usercp&tab=core&area=notificationlog" );
                    }
                }
        
                if( $notification['notify_to_id'] != $this->memberData['member_id'] )
                {
                    if( $this->request['ajax'] )
                    {
                        print 'ok';
                        exit;
                    }
                    else
                    {
                        $this->registry->getClass('output')->silentRedirect( $this->settings['base_url'] . "app=core&module=usercp&tab=core&area=notificationlog" );
                    }
                }
                
                //-----------------------------------------
                // Update read timestamp
                //-----------------------------------------
                
                $this->DB->update( 'inline_notifications', array( 'notify_read' => time() ), 'notify_id=' . $id );
            }
            
            //-----------------------------------------
            // If member has 'unread' count, rebuild count
            //-----------------------------------------
            
            if( $this->memberData['notification_cnt'] )
            {
                $notifyLibrary->rebuildUnreadCount();
            }
            
            if( $this->request['ajax'] )
            {
                print 'ok';
                exit;
            }
            else
            {
                $this->registry->output->silentRedirect( $this->settings['base_url'] . "app=core&module=usercp&tab=core&area=notificationlog" );
            }
        }
        
        /**
         * View a notification
         *
         * @return    string    HTML
         */
        public function customEvent_viewNotification()
        {
            //-----------------------------------------
            // Notifications library
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );

            //-----------------------------------------
            // Get notification
            //-----------------------------------------
            
            $id                = intval($this->request['view']);
            $notification    = $this->DB->buildAndFetch( array( 'select' => '*', 'from' => 'inline_notifications', 'where' => 'notify_id=' . $id ) );
            
            //-----------------------------------------
            // Error checking
            //-----------------------------------------
            
            if( !$notification['notify_id'] )
            {
                $this->registry->output->showError( 'bad_notify_id', 10191 );
            }

            if( $notification['notify_to_id'] != $this->memberData['member_id'] )
            {
                $this->registry->output->showError( 'bad_notify_id', 10192 );
            }
            
            //-----------------------------------------
            // Update read timestamp
            //-----------------------------------------
            
            $this->DB->update( 'inline_notifications', array( 'notify_read' => time() ), 'notify_id=' . $id );
            
            //-----------------------------------------
            // If member has 'unread' count, rebuild count
            //-----------------------------------------
            
            if( $this->memberData['notification_cnt'] )
            {
                $notifyLibrary->rebuildUnreadCount();
            }
            
            //-----------------------------------------
            // Parse for display
            //-----------------------------------------
            
            /* As the email template parser makes an attempt to reparse 'safe' HTML, we need to make it safe here */
            $notification['notify_text'] = IPSText::htmlspecialchars( $notification['notify_text'] );
                
             IPSText::getTextClass('bbcode')->parse_smilies                = 1;
             IPSText::getTextClass('bbcode')->parse_nl2br                = 1;
             IPSText::getTextClass('bbcode')->parse_html                    = 0;
             IPSText::getTextClass('bbcode')->parse_bbcode                = 1;
             IPSText::getTextClass('bbcode')->parsing_section            = 'global';
             
             $notification['notify_text'] = IPSText::getTextClass('bbcode')->preDisplayParse( nl2br( $notification['notify_text'] ) );
             
            //-----------------------------------------
            // Show notification
            //-----------------------------------------
            
            $this->_nav[] = array( $this->lang->words['m_arch_notify'], 'app=core&module=usercp&tab=core&area=notificationlog' );
            return $this->registry->getClass('output')->getTemplate('ucp')->showNotification( $notification );
        }
        
        /**
         * Custom Event: Remove Twitter link
         *
         * @return    @e void  
         */
        public function customEvent_twitterRemove()
        {
            //-----------------------------------------
            // Check secure hash...
            //-----------------------------------------
            
            if ( $this->request['secure_key'] != $this->member->form_hash )
            {
                $this->registry->output->showError( 'authorization_error', 100, true, null, 403 );
            }
            
            //-----------------------------------------
            // Okay...
            //-----------------------------------------
            
            if ( $this->memberData['twitter_id'] )
            {
                /* Remove the link */
                IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'twitter_id' => 0, 'twitter_token' => '', 'twitter_secret' => '' ) ) );
            }
            
            /* Log the user out */
            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=global&section=login&do=logout&k=" . $this->member->form_hash );
        }
        
        /**
         * Custom Event: Create facebook link
         *
         * @return    @e void  
         */
        public function customEvent_facebookLink()
        {
            //-----------------------------------------
            // Check secure hash...
            //-----------------------------------------
            
            if ( $this->request['secure_key'] != $this->member->form_hash )
            {
                $this->registry->output->showError( 'authorization_error', 100, true, null, 403 );
            }
            
            /* Load application */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
            $facebook    = new $classToLoad( $this->registry );
            
            try
            {
                $facebook->linkMember( $this->memberData['member_id'] );
            }
            catch( Exception $error )
            {
                $msg = $error->getMessage();
            
                switch( $msg )
                {
                    default:
                    case 'NO_FACEBOOK_USER_LOGGED_IN':
                    case 'ALREADY_LINKED':
                        $this->registry->getClass('output')->showError( 'fbc_authorization_screwup', 1005.99, null, null, 403 );
                    break;
                }
            }
            
            //-----------------------------------------
            // Return
            //-----------------------------------------

            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=facebook&do=show" );
        }
        
        /**
         * Custom Event: Remove facebook link
         *
         * @return    @e void  
         */
        public function customEvent_facebookRemove()
        {
            //-----------------------------------------
            // Check secure hash...
            //-----------------------------------------
            
            if ( $this->request['secure_key'] != $this->member->form_hash )
            {
                $this->registry->output->showError( 'authorization_error', 100, true, null, 403 );
            }
            
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
            $facebook    = new $classToLoad( $this->registry );
                
            //-----------------------------------------
            // Okay...
            //-----------------------------------------
            
            if ( $this->memberData['fb_uid'] )
            {
                /* Unauthorize application */
                $facebook->revokeAuthorization();
                            
                /* Remove the link */
                IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'fb_uid' => 0, 'fb_emailhash' => '', 'fb_token' => '', 'fb_lastsync' => 0 ) ) );
            }
            
            /* Log the user out */
            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=global&section=login&do=logout&k=" . $this->member->form_hash );
        }
        
        /**
         * Custom Event: Sync up facebook
         * NO LONGER USED. LEFT FOR FIX CONFIRMATION
         *
         * @return    @e void  
         */
        public function customEvent_facebookSync()
        {
            if ( IPSLib::fbc_enabled() === TRUE )
            {
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
                $facebook    = new $classToLoad( $this->registry );
                
                try
                {
                    $facebook->syncMember( $this->memberData );
                }
                catch( Exception $error )
                {
                    $msg = $error->getMessage();
                    
                    switch( $msg )
                    {
                        case 'NOT_LINKED':
                        case 'NO_MEMBER':
                        default:
                            $this->registry->getClass('output')->showError( 'fbc_authorization_screwup', 1005, null, null, 403 );
                        break;
                    }
                }
                
                //-----------------------------------------
                // Return
                //-----------------------------------------

                $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=facebook&do=show" );
            }
        }
        
        /**
         * Custom Event: Run the find user tool
         *
         * @return    @e void  
         */
        public function customEvent_toggleIgnoredUser()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            $member_id = intval( $this->request['id'] );
            $field       = $this->request['field'];
            $update    = array();
            
            //-----------------------------------------
            // Grab user
            //-----------------------------------------
            
            $ignoredUser = $this->DB->buildAndFetch( array( 'select' => '*',
                                                            'from'   => 'ignored_users',
                                                            'where'  => 'ignore_ignore_id=' . $member_id . ' AND ignore_owner_id=' . $this->memberData['member_id'] ) );
                                                            
            if ( $ignoredUser['ignore_id'] )
            {
                switch( $field )
                {
                    default:
                    case 'topics':
                        $update = array( 'ignore_topics' => ( $ignoredUser['ignore_topics'] == 1 ) ? 0 : 1 );
                    break;
                    case 'messages':
                        $update = array( 'ignore_messages' => ( $ignoredUser['ignore_messages'] == 1 ) ? 0 : 1 );
                    break;
                    case 'signatures':
                        $update = array( 'ignore_signatures' => ( $ignoredUser['ignore_signatures'] == 1 ) ? 0 : 1 );
                    break;
                    case 'minecraft':
                        $update = array( 'ignore_minecraft' => ( $ignoredUser['ignore_minecraft'] == 1 ) ? 0 : 1 );
                    break;
                    case 'chats':
                        $update = array( 'ignore_chats' => ( $ignoredUser['ignore_chats'] == 1 ) ? 0 : 1 );
                    break;
                }
                
                //-----------------------------------------
                // Update
                //-----------------------------------------

                $this->DB->update( 'ignored_users', $update, 'ignore_id=' . $ignoredUser['ignore_id'] );
            
                /* Rebuild cache */
                IPSMember::rebuildIgnoredUsersCache( $this->memberData );
            }
        
            //-----------------------------------------
            // Return
            //-----------------------------------------
            
            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=ignoredusers&do=show&st={$this->request['st']}" );
        }
        
        /**
         * Custom event: Remove ignored user
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function customEvent_removeIgnoredUser()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            $removeID = intval( $this->request['id'] );
            
            $this->DB->delete( 'ignored_users', 'ignore_owner_id=' . $this->memberData['member_id'] . ' AND ignore_ignore_id=' . $removeID );
             
            /* Rebuild cache */
            IPSMember::rebuildIgnoredUsersCache( $this->memberData );
            
            $this->registry->getClass('output')->silentRedirect( $this->settings['base_url']."app=core&module=usercp&tab=core&area=ignoredusers&do=show" );
        }
        
        /**
         * UserCP Form Show
         *
         * @author    Matt Mecham
         * @param    string        Current area as defined by 'get_links'
         * @param    array        Array of errors
         * @return    string        Processed HTML
         */
        public function showForm( $current_area, $errors=array() )
        {
            //-----------------------------------------
            // Where to go, what to see?
            //-----------------------------------------

            if( !$current_area AND !$this->memberData['g_edit_profile'] )
            {
                $current_area    = 'email';
            }

            switch( $current_area )
            {
                default:
                case 'profileinfo':
                    return $this->formProfileInfo();
                break;
                case 'signature':
                    return $this->formSignature();
                break;

                case 'photo':
                    return $this->formPhoto();
                break;
                case 'ignoredusers':
                    return $this->formIgnoredUsers();
                break;
                case 'facebook':
                    return $this->formFacebook();
                break;
                case 'twitter':
                    return $this->formTwitter();
                break;
                case 'customize':
                    return $this->formCustomize();
                break;
                case 'email':
                    return $this->showFormEmailPassword();
                break;
                case 'displayname':
                    return $this->showFormDisplayname();
                break;
                case 'attachments':
                    return $this->showFormAttachments();
                break;
                case 'notifications':
                    return $this->showFormNotifications();
                break;
                case 'notificationlog':
                    return $this->showInlineNotifications();
                break;
            }
        }
        
        /**
         * Show the customization form
         *
         * @author    Matt Mecham
         * @param    string        Any inline message to show
         * @return    string        Processed HTML
         */
        public function formCustomize( $inlineMsg='' )
        {
            /* Allow uploads */
            $this->uploadFormMax = 10000 * 1024;
            
            if ( ! $this->memberData['gbw_allow_customization'] OR $this->memberData['bw_disable_customization'] )
            {        
                $this->registry->getClass('output')->showError( 'no_permission', 1005.5 );
            }
            
            /* Grab current options */
            $options = IPSLib::safeUnserialize( $this->memberData['pp_customization'] );
            $options = is_array( $options ) ? $options : array();
            
            /* Build input */
            foreach( $options as $k => $v )
            {
                $input[ $k ] = ( $this->request[ $k ] ) ? $this->request[ $k ] : $v;
            }
            
            /* Figure out preview URL */
            if ( $options['type'] == 'url' AND $options['bg_url'] )
            {
                $input['_preview'] = $options['bg_url'];
            }
            else if ( $options['type'] == 'upload' AND $options['bg_url'] )
            {
                $input['_preview'] = $this->settings['upload_url'] . '/' . $options['bg_url'];
                $input['bg_url']   = '';
            }
            
            /* Show form */
            return $this->registry->getClass('output')->getTemplate('ucp')->membersProfileCustomize( $options, $input, $inlineMsg );
        }
        
        /**
         * Show the twitter form
         *
         * @author    Matt Mecham
         * @param    string        Any inline message to show
         * @return    string        Processed HTML
         */
        public function formTwitter( $inlineMsg='' )
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            if( !IPSLib::twitter_enabled() )
            {        
                $this->registry->getClass('output')->showError( 'twitter_disabled', 1005.1 );
            }
            
            //-----------------------------------------
            // Twitter user logged in?
            //-----------------------------------------
            
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/twitter/connect.php', 'twitter_connect' );
            $twitter     = new $classToLoad( $this->registry, $this->memberData['twitter_token'], $this->memberData['twitter_secret'] );
            
            //-----------------------------------------
            // Thaw bitfield options
            //-----------------------------------------
            
            $bwOptions = IPSBWOptions::thaw( $this->memberData['tc_bwoptions'], 'twitter' );
            
            //-----------------------------------------
            // Merge..
            //-----------------------------------------
            
            if ( is_array( $bwOptions ) )
            {
                foreach( $bwOptions as $k => $v )
                {
                    $this->memberData[ $k ] = $v;
                }
            }
            
            if( ! $twitter->isConnected() )
            {
                $this->hide_form_and_save_button = 1;
            }
            
            $userData = $twitter->fetchUserData();
            
            if ( isset( $userData['status']['text'] ) )
            {    
                if ( IPS_DOC_CHAR_SET != 'UTF-8' )
                {
                    $userData['status']['text'] = IPSText::utf8ToEntities( $userData['status']['text'] );
                }
                
                /* Make safe */
                $userData['status']['text'] = str_replace( array( '<', '>' ), array( '<', '>' ), $userData['status']['text'] );
            }
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersTwitterConnect( $twitter->isConnected(), $userData );
        }
        
        
        /**
         * Show the member form
         *
         * @author    Matt Mecham
         * @param    string        Any inline message to show
         * @return    string        Processed HTML
         */
        public function formFacebook( $inlineMsg='' )
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            if( !IPSLib::fbc_enabled() )
            {        
                $this->registry->getClass('output')->showError( 'fbc_disabled', 1005.2 );
            }
            
            //-----------------------------------------
            // Shut off save button if not associated yet
            //-----------------------------------------
            
            if( !$this->memberData['fb_uid'] )
            {
                $this->hide_form_and_save_button    = true;
                $userData                            = array();
                $linkedMemberData                    = array();
                $perms                                = array();
            }
            else
            {
                //-----------------------------------------
                // FB user logged in?
                //-----------------------------------------
                
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
                $facebook    = new $classToLoad( $this->registry );
                
                /* Now get the linked user */
                $linkedMemberData = IPSMember::load( intval($this->memberData['fb_uid']), 'all', 'fb_uid' );
                
                $userData = $facebook->fetchUserData();
                                
                /* Email */
                $perms['email']          = $facebook->fetchHasAppPermission( 'email' );
                
                /* Publish Stream */
                $perms['publish_stream'] = $facebook->fetchHasAppPermission( 'publish_stream' );
                
                /* Read stream */
                $perms['read_stream']    = $facebook->fetchHasAppPermission( 'read_stream' );
                
                /* Offline access */
                $perms['offline_access'] = $facebook->fetchHasAppPermission( 'offline_access' );
                
                
                //-----------------------------------------
                // Thaw bitfield options
                //-----------------------------------------
                
                $bwOptions = IPSBWOptions::thaw( $this->memberData['fb_bwoptions'], 'facebook' );
                
                //-----------------------------------------
                // Merge..
                //-----------------------------------------
                
                if ( is_array( $bwOptions ) )
                {
                    foreach( $bwOptions as $k => $v )
                    {
                        $this->memberData[ $k ] = $v;
                    }
                }
                
                //-----------------------------------------
                // Able to update status?
                //-----------------------------------------
        
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/member/status.php', 'memberStatus' );
                $this->registry->setClass( 'memberStatus', new $classToLoad( $this->registry ) );
                
                $this->registry->memberStatus->setAuthor( $this->memberData );
                $this->memberData['can_updated_status'] = $this->registry->memberStatus->canCreate();
                
                $_updates = $facebook->fetchUserTimeline( $userData['id'], 0, true );
                            
                /* Got any? */
                if ( count( $_updates ) )
                {
                    $update = array_shift( $_updates );
                    
                    if ( count( $update ) AND is_array( $update ) )
                    {
                        $userData['status'] = $update;
                    }
                }
                
                if ( is_array( $userData ) AND $userData['status']['message'] AND IPS_DOC_CHAR_SET != 'UTF-8' )
                {
                    $userData['status']['message'] = IPSText::utf8ToEntities( $userData['status']['message'] );
                }
                
                /* Make safe */
                $userData['status']['message'] = str_replace( array( '<', '>' ), array( '<', '>' ), $userData['status']['message'] );
            }
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersFacebookConnect( trim($this->memberData['fb_uid']), $userData, $linkedMemberData, $perms );
        }
        
        /**
         * Show the ignored users
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function formIgnoredUsers()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            $final_users  = array();
             $temp_users   = array();
             $uid          = intval( $this->request['uid'] );
            $ignoredUsers = array();
            
             //-----------------------------------------
             // Do we have incoming?
             //-----------------------------------------
             
             if ( $uid )
             {
                 $newmem = IPSMember::load( $uid );

                 $this->request['newbox_1']    = $newmem['members_display_name'];
             }
             
             //-----------------------------------------
             // Get ignored users
             //-----------------------------------------
             
             $perPage = 25;
             
             /* Count */
            $count = $this->DB->buildAndFetch( array( 'select' => 'count(*) as dracula', 'from' => 'ignored_users', 'where' => 'ignore_owner_id=' . $this->memberData['member_id'] ) );
             
             /* Sort out pagination */
            $st = intval($this->request['st']) >=0 ? intval($this->request['st']) : 0;
            $pagination = $this->registry->output->generatePagination( array(
                'totalItems'        => $count['dracula'],
                'itemsPerPage'        => $perPage,
                'currentStartValue'    => $st,
                'baseUrl'            => 'app=core&module=usercp&tab=core&area=ignoredusers',
                )    );

            /* Get em */         
            $this->DB->build( array( 'select' => '*', 'from' => 'ignored_users', 'where' => 'ignore_owner_id=' . $this->memberData['member_id'], 'limit' => array( $st, $perPage ) ) );
             $this->DB->execute();

            while( $row = $this->DB->fetch() )
            {
                $ignoredUsers[ $row['ignore_ignore_id'] ] = $row;
            }
             
             //-----------------------------------------
             // Get members and check to see if they've
             // since been moved into a group that cannot
             // be ignored
             //-----------------------------------------
             
             foreach( $ignoredUsers as $_id => $data )
             {
                 if ( intval($_id) )
                 {
                     $temp_users[] = $_id;
                 }
             }
             
             if ( count($temp_users) )
             {
                 $members = IPSMember::load( $temp_users, 'all' );
            
                 foreach( $members as $m )
                 {
                     $m['g_title'] = IPSMember::makeNameFormatted( $this->caches['group_cache'][ $m['member_group_id'] ]['g_title'], $m['member_group_id'] );
                     
                     $final_users[ $m['member_id'] ] = IPSMember::buildDisplayData( $m );
                    $final_users[ $m['member_id'] ]['ignoreData'] = $ignoredUsers[ $m['member_id'] ];
                 }
             }

             $this->request['newbox_1'] = $this->request['newbox_1'] ? $this->request['newbox_1'] : '';
             
             return $this->registry->getClass('output')->getTemplate('ucp')->membersIgnoredUsersForm( $final_users, $pagination );
        }
        
        
        /**
         * Show the signature page
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function formSignature()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* HTML checkbox language strings */
            $this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_post' ), 'forums' );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
                    
            $sig_restrictions = explode( ':', $this->memberData['g_signature_limits'] );
            
            if ( ! $this->memberData['g_edit_profile'] OR ( $sig_restrictions[0] AND ! $this->memberData['g_sig_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
            
            /* Signature Limits */
             if ( $sig_restrictions[0] AND $this->memberData['g_sig_unit'] )
            {
                if ( $this->memberData['gbw_sig_unit_type'] )
                {
                    /* days */
                    if ( $this->memberData['joined'] > ( time() - ( 86400 * $this->memberData['g_sig_unit'] ) ) )
                    {
                        $this->hide_form_and_save_button = 1;
                        $form['_noPerm'] = sprintf( $this->lang->words['sig_group_restrict_date'], $this->lang->getDate( $this->memberData['joined'] + ( 86400 * $this->memberData['g_sig_unit'] ), 'long' ) );
                    }
                }
                else
                {
                    /* Posts */
                    if ( $this->memberData['posts'] < $this->memberData['g_sig_unit'] )
                    {
                        $this->hide_form_and_save_button = 1;
                        $form['_noPerm'] = sprintf( $this->lang->words['sig_group_restrict_posts'], $this->memberData['g_sig_unit'] - $this->memberData['posts'] );
                    }
                }
                
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersSignatureFormError( $form );
                }
            }
        
             //-----------------------------------------
             // Set max length
             //-----------------------------------------

             $current_sig    = '';
             $t_sig            = '';
             
            /* Set content in editor */
            $this->editor->setLegacyMode(false);
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setAllowHtml( $this->memberData['g_dohtml'] );
            $this->editor->setIsHtml( $this->memberData['bw_html_sig'] );
            $this->editor->setBbcodeSection('signatures');
            $this->editor->setContent( $this->memberData['signature'] );
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->set( array( 'memberData'       => $this->memberData,
                                 'parseBBCode'       => 1,
                                 'parseHtml'       => ( $this->memberData['g_dohtml'] && $this->memberData['bw_html_sig'] ),
                                 'parseArea'      => 'signatures',
                                 'parseEmoticons' => 1 ) );
            
            $signature    = $parser->display( $this->memberData['signature'] );
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersSignatureForm( $this->editor->show( 'Post', array( 'noSmilies' => false ) ), $sig_restrictions, $signature );
        }

        /**
         * Show the minecraft pages
         *
         * @author    PGmajster
         * @return    string        Processed HTML
         */
        public function formMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* HTML checkbox language strings */
            $this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_post' ), 'forums' );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
                    
            
            
            if ( ! $this->memberData['g_edit_profile'] AND ! $this->memberData['g_minecraft_unit'] )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
            
        
                
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
            }

             
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setAllowHtml( $this->memberData['g_dohtml'] );
            $this->editor->setIsHtml( $this->memberData['bw_html_minecraft'] );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->set( array( 'memberData'       => $this->memberData,
                                 'parseBBCode'       => 1,
                                 'parseHtml'       => ( $this->memberData['g_dohtml'] && $this->memberData['bw_html_minecraft'] ),
                                 'parseArea'      => 'minecraft',
                                 'parseEmoticons' => 1 ) );
            
            $minecraft    = $parser->display( $this->memberData['minecraft'] );
            
            return $this->registry->getClass('output')->getTemplate('ucp')->membersSignatureForm( $this->editor->show( 'Post', array( 'noSmilies' => false ) ), $minecraft );
        }
        
        /**
         * Show the profile information
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function formProfileInfo()
        {    
            /* Load Lang File */
            $this->registry->class_localization->loadLanguageFile( array( 'public_profile' ), 'members' );
            
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* INIT */
             $required_output = "";
            $optional_output = "";
            
            /* Permission Check */
            if( ! $this->memberData['g_edit_profile'] )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1026, null, null, 403 );
            }
            
            /* Format the birthday drop boxes.. */
            $date = getdate();
            
            $day   = array();
            $mon   = array();
            $year  = array();
            $times = array();
            
            /* Build the day options */
            $day[] = array( '0', '--' );
            for ( $i = 1 ; $i < 32 ; $i++ )
            {
                $day[] = array( $i, $i );            
            }
            
            /* Build the month options */
            $mon[] = array( '0', '--' );
            for( $i = 1 ; $i < 13 ; $i++ )
            {
                $mon[] = array( $i, $this->lang->words['M_' . $i ] );
            }
            
            /* Build the years options */
            $i = $date['year'] - 1;
            $j = $date['year'] - 100;
            
            $year[] = array( '0', '--' );
            for( $i ; $j < $i ; $i-- )
            {
                $year[] = array( $i, $i );
            }
        
            /* Custom Fields */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php', 'customProfileFields' );
            $fields      = new $classToLoad();
            
            $fields->member_data = $this->member->fetchMemberData();
            $fields->initData( 'edit' );
            $fields->parseToEdit();
            
            $field_output = array();
            
            if ( count( $fields->out_fields ) )
            {
                foreach( $fields->out_fields as $id => $element )
                {
                    $data = $fields->cache_data[ $id ];
                    $field_output[ $data['pf_group_key'] ][ $id ] = array(
                                                                            'field' => $this->registry->getClass('output')->getTemplate('ucp')->field_entry( $fields->field_names[ $id ], $fields->field_desc[ $id ], $fields->out_fields[ $id ], $id ),
                                                                            'required' => $data['pf_not_null']
                                                                        );
                }
                                                                            
                /*foreach( $fields->out_fields as $id => $data )
                {
                    if ( $fields->cache_data[ $id ]['pf_not_null'] == 1 )
                    {
                        $ftype = 'required_output';
                    }
                    else
                    {
                        $ftype = 'optional_output';
                    }

                    ${$ftype} .= $this->registry->getClass('output')->getTemplate('ucp')->field_entry( $fields->field_names[ $id ], $fields->field_desc[ $id ], $data, $id );
                }*/
            }
            
            /* About me */
            $this->editor->setContent( $this->memberData['pp_about_me'] );
            
            $amEditor = $this->editor->show( 'Post', array( 'delayInit' => 1 ) );
            
            /* Times */
            foreach ( $this->lang->words as $k => $v )
            {
                if ( strpos( $k, "time_" ) === 0 )
                {
                    $k = str_replace( "time_", '', $k );

                    if( preg_match( '/^[\-\d\.]+$/', $k ) )
                    {
                        $times[ $k ]    = $v;
                    }
                }
            }

            ksort( $times );
            
            /* Build and return the form */
            $template = $this->registry->getClass('output')->getTemplate('ucp')->membersProfileForm( $field_output, $fields->fetchGroupTitles(), $day, $mon, $year, $amEditor, $times );

            return $template;
        }

        /**
         * Show the logged inline notifications
         *
         * @author    Brandon Farber
         * @param    string        Error message
         * @return    string        Processed HTML
         */
        public function showInlineNotifications( $error='' )
        {
            /* Init */
            $start   = intval( $this->request['st'] );
            $perPage = 50;
            
            //-----------------------------------------
            // Get class
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );    
            
            /* Clear them? - used in mobile skin */
            if ( isset($this->request['clear']) && trim($this->request['clear']) == 'true' )
            {
                $this->DB->update( 'inline_notifications', array( 'notify_read' => 1 ), 'notify_to_id=' . $this->memberData['member_id'] );
            
                $notifyLibrary->rebuildUnreadCount();
            }
            
            //-----------------------------------------
            // Turn off normal form
            //-----------------------------------------
            
            $this->hide_form_and_save_button = 1;
            
            //-----------------------------------------
            // Get notifications
            //-----------------------------------------
            
            $_notifications    = array();
            $mids            = array();
            
            $count = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as er',
                                                        'from'   => 'inline_notifications',
                                                        'where'  => 'notify_to_id=' . $this->memberData['member_id'] ) );
            
            if ( $count['er'] )
            {
                $this->DB->build( array( 'select' => '*',
                                         'from'   => 'inline_notifications',
                                         'where'  => 'notify_to_id=' . $this->memberData['member_id'],
                                         'limit'  => array( $start, $perPage ),
                                         'order'  => 'notify_sent DESC' ) );
                $outer    = $this->DB->execute();
                
                while( $r = $this->DB->fetch($outer) )
                {
                    $r['notify_icon']    = $notifyLibrary->getNotificationIcon( $r['notify_type_key'] );
                    
                    $_notifications[]    = $r;
        
                    $mids[ $r['notify_from_id'] ] = $r['notify_from_id'];
                }
        
                /* Get members */
                if ( count( $mids ) )
                {
                    $members = IPSMember::load( array_keys( $mids ), 'all' );
                    
                    if ( count( $members ) )
                    {
                        foreach( $_notifications as $key => $data )
                        {
                            if ( isset($members[ $data['notify_from_id'] ]) )
                            {
                                $_notifications[ $key ]['member'] = IPSMember::buildProfilePhoto( $members[ $data['notify_from_id'] ] );
                            }
                        }
                    }
                }
            }

            $pages = $this->registry->getClass('output')->generatePagination( array( 'totalItems'         => $count['er'],
                                                                                         'itemsPerPage'       => $perPage,
                                                                                     'currentStartValue'  => $start,
                                                                                     'baseUrl'            => "app=core&module=usercp&tab=core&area=notificationlog"
                                                                             )        );
            
            //-----------------------------------------
            // Send to template
            //-----------------------------------------
            
            return $this->registry->getClass('output')->getTemplate('ucp')->notificationsLog( $_notifications, $error, $pages );
        }

        /**
         * Show notification configuration form
         *
         * @author    Brandon Farber
         * @return    string        Processed HTML
         *
         * @note    Updating this function update also mobileApiRequest::_handleNotificationTypes()
         */
        public function showFormNotifications()
        {
            //-----------------------------------------
            // Notifications library
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );
            
            //-----------------------------------------
            // Show the form
            //-----------------------------------------
            
            $_basicOptions    = array( array( 'email', $this->lang->words['notopt__email'] ), array( 'inline', $this->lang->words['notopt__inline'] ), array( 'mobile', $this->lang->words['notopt__mobile'] ) );
            $_configOptions    = $notifyLibrary->getNotificationData( TRUE );
            $_notifyConfig    = $notifyLibrary->getMemberNotificationConfig( $this->memberData );
            $_defaultConfig    = $notifyLibrary->getDefaultNotificationConfig();
            $_formOptions    = array();
            
            foreach( $_configOptions as $option )
            {
                $_thisConfig    = isset($_notifyConfig[ $option['key'] ]) ? $_notifyConfig[ $option['key'] ] : $_defaultConfig[ $option['key'] ];
                
                //-----------------------------------------
                // Determine available options
                //-----------------------------------------
                
                $_available    = array();
                
                foreach( $_basicOptions as $_bo )    // ewwww :P
                {
                    if( !is_array($_defaultConfig[ $option['key'] ]['disabled']) OR !in_array( $_bo[0], $_defaultConfig[ $option['key'] ]['disabled'] ) )
                    {
                        $_available[]    = $_bo;
                    }
                }
                
                //-----------------------------------------
                // If none available, at least give inline
                //-----------------------------------------
                
                if( !count($_available) )
                {
                    $_available[]    = array( 'inline', $this->lang->words['notify__inline'] );
                }
                
                //-----------------------------------------
                // Start setting data to pass to form
                //-----------------------------------------
                
                $_formOptions[ $option['key'] ]                    = array();
                $_formOptions[ $option['key'] ]['key']            = $option['key'];
                $_formOptions[ $option['key'] ]['app']            = $option['app'];
                
                //-----------------------------------------
                // Rikki asked for this...
                //-----------------------------------------
                
                foreach( $_available as $_availOption )
                {
                    $_formOptions[ $option['key'] ]['options'][ $_availOption[0] ]    = $_availOption;
                }
                
                //$_formOptions[ $option['key'] ]['options']        = $_available;
                
                $_formOptions[ $option['key'] ]['defaults']        = is_array($_thisConfig['selected']) ? $_thisConfig['selected'] : array();
                $_formOptions[ $option['key'] ]['disabled']        = 0;
                
                //-----------------------------------------
                // Don't allow member to configure
                // Still show, but disable on form
                //-----------------------------------------
                
                if( $_defaultConfig[ $option['key'] ]['disable_override'] )
                {
                    $_formOptions[ $option['key'] ]['disabled']        = 1;
                    $_formOptions[ $option['key'] ]['defaults']        = is_array($_defaultConfig[ $option['key'] ]['selected']) ? $_defaultConfig[ $option['key'] ]['selected'] : array();
                }
            }
            
            //-----------------------------------------
            // Other settings
            //-----------------------------------------

            $_emailData   = array();
            
            //-----------------------------------------
            // Email settings...
            //-----------------------------------------
            
            $_emailData['auto_track']    = $this->memberData['auto_track'] ? 'checked="checked"' : '';
            
            foreach( array( 'none', 'immediate', 'offline', 'daily', 'weekly' ) as $_opt )
            {
                $_emailData['trackOption'][ $_opt ] = ( $this->memberData['auto_track'] == $_opt ) ? 'selected="selected"' : '';
            }
            
             return $this->registry->getClass('output')->getTemplate('ucp')->notificationsForm( $_formOptions, $_emailData );
        }

        /**
         * Show the attachments form
         *
         * @author    Matt Mecham
         * @return    string        Processed HTML
         */
        public function showFormAttachments()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $info        = array();
             $start       = intval( $this->request['st'] );
             $perpage     = 15;
             $sort_key    = "";
             $attachments = array();
            
            $this->hide_form_and_save_button = 1;
            
            //-----------------------------------------
            // Sort it
            //-----------------------------------------
            
             switch ( $this->request['sort'] )
             {
                 case 'date':
                     $sort_key = 'a.attach_date ASC';
                     $info['date_order'] = 'rdate';
                     $info['size_order'] = 'size';
                     break;
                 case 'rdate':
                     $sort_key = 'a.attach_date DESC';
                     $info['date_order'] = 'date';
                     $info['size_order'] = 'size';
                     break;
                 case 'size':
                     $sort_key = 'a.attach_filesize DESC';
                     $info['date_order'] = 'date';
                     $info['size_order'] = 'rsize';
                     break;
                 case 'rsize':
                     $sort_key = 'a.attach_filesize ASC';
                     $info['date_order'] = 'date';
                     $info['size_order'] = 'size';
                     break;
                 default:
                     $sort_key = 'a.attach_date DESC';
                     $info['date_order'] = 'date';
                     $info['size_order'] = 'size';
                     break;
             }

             //-----------------------------------------
             // Get some stats...
             //-----------------------------------------

             $maxspace = intval($this->memberData['g_attach_max']);

             if ( $this->memberData['g_attach_max'] == -1 )
             {
                 $this->registry->getClass('output')->showError( 'no_permission_to_attach', 1010 );
             }

             //-----------------------------------------
             // Limit by forums
             //-----------------------------------------

             $stats = $this->DB->buildAndFetch( array( 'select' => 'count(*) as count, ' . $this->DB->buildCoalesce( array( 'sum(attach_filesize)', 0 ) ) . ' as sum',
                                                       'from'   => 'attachments',
                                                       'where'  => 'attach_member_id=' . $this->memberData['member_id'] . " AND attach_rel_module IN( 'post', 'msg' )" ) );

                      
             if ( $maxspace > 0 )
             {
                //-----------------------------------------
                // Figure out percentage used
                //-----------------------------------------

                $info['has_limit']    = 1;
                $info['full_percent'] = $stats['sum'] ? sprintf( "%.0f", ( ( $stats['sum'] / ($maxspace * 1024) ) * 100) ) : 0;

                if ( $info['full_percent'] > 100 )
                {
                    $info['full_percent'] = 100;
                }
                else if ( $info['full_percent'] < 1 AND $stats['count'] > 0 )
                {
                    $info['full_percent'] = 1;
                }

                $info['attach_space_count'] = sprintf( $this->lang->words['attach_space_count'], intval($stats['count']), intval($info['full_percent']) );
                $info['attach_space_used']  = sprintf( $this->lang->words['attach_space_used'] , IPSLib::sizeFormat($stats['sum']), IPSLib::sizeFormat($maxspace * 1024) );
             }
             else
             {
                 $info['has_limit'] = 0;
                 $info['attach_space_used']  = sprintf( $this->lang->words['attach_space_unl'] , IPSLib::sizeFormat($stats['sum']) );
             }

             //-----------------------------------------
             // Pages
             //-----------------------------------------

             $pages = $this->registry->getClass('output')->generatePagination( array(  'totalItems'         => $stats['count'],
                                                                                          'itemsPerPage'       => $perpage,
                                                                                      'currentStartValue'  => $start,
                                                                                      'baseUrl'            => "app=core&module=usercp&tab=core&area=attachments&sort=" . $this->request['sort'] . "",
                                                                              )      );

             //-----------------------------------------
             // Get attachments...
             //-----------------------------------------

            if( $stats['count'] )
            {
                 $this->DB->build( array( 'select'    => 'a.*',
                                         'from'        => array( 'attachments' => 'a' ),
                                         'where'    => "a.attach_member_id=" . $this->memberData['member_id'] . " AND a.attach_rel_module IN( 'post', 'msg' )",
                                         'order'    => $sort_key,
                                         'limit'    => array( $start, $perpage ),
                                         'add_join'    => array(
                                                            array( 'select'    => 'p.topic_id',
                                                                    'from'    => array( 'posts' => 'p' ),
                                                                    'where'    => 'p.pid=a.attach_rel_id',
                                                                    'type'    => 'left'
                                                                ),
                                                            array( 'select'    => 't.*',
                                                                    'from'    => array( 'topics' => 't' ),
                                                                    'where'    => 't.tid=p.topic_id',
                                                                    'type'    => 'left'
                                                                ) )
                                 )        );
                $outer = $this->DB->execute();
        
                $this->registry->getClass( 'class_localization')->loadLanguageFile( array( 'public_topic' ), 'forums' );
        
                $cache = $this->cache->getCache('attachtypes');
                
                /* Load topic class */
                if ( ! $this->registry->isClassLoaded('topics') )
                {
                    $classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/topics.php", 'app_forums_classes_topics', 'forums' );
                    $this->registry->setClass( 'topics', new $classToLoad( $this->registry ) );
                }
        
                while ( $row = $this->DB->fetch( $outer ) )
                {
                    $row['_link'] = true;
                    
                    if ( ! $this->registry->topics->canView( $row ) )
                    {
                        $row['title'] = $this->lang->words['attach_topicmoved'];
                        $row['_link'] = false;
                    }
        
                    //-----------------------------------------
                    // Full attachment thingy
                    //-----------------------------------------
        
                    if ( $row['attach_rel_module'] == 'post' )
                    {
                        $row['_type'] = 'post';
                    }
                    else if ( $row['attach_rel_module'] == 'msg' )
                    {
                        $row['_type'] = 'msg';
                        $row['title'] = $this->lang->words['attach_inpm'];
                    }
        
                    /* IPB 2.x conversion */
                    $row['image']       = str_replace( 'folder_mime_types', 'mime_types', $cache[ $row['attach_ext'] ]['atype_img'] );
                    $row['short_name']  = IPSText::truncate( $row['attach_file'], 30 );
                    $row['attach_date'] = $this->registry->getClass( 'class_localization')->getDate( $row['attach_date'], 'SHORT' );
                    $row['real_size']   = IPSLib::sizeFormat( $row['attach_filesize'] );
        
                    $attachments[]      = $row;
                }
            }

            return $this->registry->getClass('output')->getTemplate('ucp')->coreAttachments( $info, $pages, $attachments );
        }

        /**
         * Show the Email & Password form
         *
         * @author    Matt Mecham
         * @param    string        Returned error message (if any)
         * @return    string        Processed HTML
         */
        public function showFormEmailPassword( $_message='' )
        {
            //-----------------------------------------
            // Do not allow validating members to change
            // email when admin validation is on
            // @see    http://community.invisionpower.com/tracker/issue-19964-loophole-in-registration-procedure/
            //-----------------------------------------
            
            if( $this->memberData['member_group_id'] == $this->settings['auth_group'] AND in_array( $this->settings['reg_auth_type'], array( 'admin', 'admin_user' ) ) )
            {
                $this->registry->output->showError( $this->lang->words['admin_val_no_email_chg'], 10189 );
            }
            
            //-----------------------------------------
            // Do we have another URL for email resets?
            //-----------------------------------------

            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/handlers/han_login.php', 'han_login' );
            $this->han_login   = new $classToLoad( $this->registry );
            $this->han_login->init();
            $this->han_login->checkMaintenanceRedirect();

            //$txt = $this->lang->words['ce_current'] . $this->memberData['email'];

             if ( $this->settings['reg_auth_type'])
             {
                 $txt .= $this->lang->words['ce_auth'];
             }
             
            $_message = $_message ? $this->lang->words[$_message] : '';

            if( $this->memberData['g_access_cp'] )
            {
                $this->hide_form_and_save_button    = true;
            }

             return $this->registry->getClass('output')->getTemplate('ucp')->emailPasswordChangeForm( $txt, $_message, $this->_isFBUser );
        }

        /**
         * Show the display name form
         *
         * @author    Matt Mecham
         * @param    string        Error message (if any)
         * @return    string        Processed HTML
         */
        public function showFormDisplayname( $error="" )
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $form = array();

            //-----------------------------------------
            // CHECK (please)
            //-----------------------------------------

            if ( ! $this->settings['auth_allow_dnames'] OR $this->memberData['g_dname_changes'] == 0 OR $this->memberData['g_dname_date'] == 0 )
            {
                $this->registry->getClass('output')->showError( 'no_permission_for_display_names', 1011 );
            }

            $this->request['display_name'] =  $this->request['display_name'] ? $this->request['display_name'] : '';

            $this->settings['username_errormsg'] =  str_replace( '{chars}', $this->settings['username_characters'], $this->settings['username_errormsg'] );

            //-----------------------------------------
            // Grab # changes > 24 hours
            //-----------------------------------------

            $time_check = time() - 86400 * $this->memberData['g_dname_date'];

            if( $time_check < $this->memberData['joined'] )
            {
                $time_check = $this->memberData['joined'];
            }

            $name_count = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count, MIN(dname_date) as min_date', 'from' => 'dnames_change', 'where' => "dname_member_id=" . $this->memberData['member_id'] . " AND dname_date > $time_check AND dname_discount=0" ) );

            $name_count['count']    = intval( $name_count['count'] );
            $name_count['min_date'] = intval( $name_count['min_date'] ) ? intval( $name_count['min_date'] ) : $time_check;

            //-----------------------------------------
            // Calculate # left
            //-----------------------------------------

            /* Check new permissions */
            $_g = $this->caches['group_cache'][ $this->memberData['member_group_id'] ];

            if ( $_g['g_displayname_unit'] )
            {
                if ( $_g['gbw_displayname_unit_type'] )
                {
                    /* days */
                    if ( $this->memberData['joined'] > ( time() - ( 86400 * $_g['g_displayname_unit'] ) ) )
                    {
                        $this->hide_form_and_save_button = 1;
                        $form['_noPerm'] = sprintf( $this->lang->words['dname_group_restrict_date'], $this->lang->getDate( $this->memberData['joined'] + ( 86400 * $_g['g_displayname_unit'] ), 'long' ) );
                    }
                }
                else
                {
                    /* Posts */
                    if ( $this->memberData['posts'] < $_g['g_displayname_unit'] )
                    {
                        $this->hide_form_and_save_button = 1;
                        $form['_noPerm'] = sprintf( $this->lang->words['dname_group_restrict_posts'], $_g['g_displayname_unit'] - $this->memberData['posts'] );
                    }
                }
            }

            if( !$form['_noPerm'] )
            {
                if ( $this->memberData['g_dname_changes'] == -1 )
                {
                    $form['_lang_string'] = $this->lang->words['dname_string2'];
                }
                else
                {
                    $form['_changes_left'] = $this->memberData['g_dname_changes'] - $name_count['count'];
                    $form['_changes_done'] = $name_count['count'];
        
                    # Make sure changes done isn't larger than allowed
                    # This happens when changing via ACP
        
                    if ( $form['_changes_done'] > $this->memberData['g_dname_changes'] )
                    {
                        $form['_changes_done'] = $this->memberData['g_dname_changes'];
                    }
        
                    $form['_first_change'] = $this->registry->getClass( 'class_localization')->getDate( $name_count['min_date'], 'date', 1 );
                    $form['_lang_string']  = sprintf( $this->lang->words['dname_string'],
                                                        $form['_changes_done'], $this->memberData['g_dname_changes'],
                                                        $form['_first_change'], $this->memberData['g_dname_changes'],
                                                        $this->memberData['g_dname_date'] ) . $this->lang->words['dname_string2'];
                }
            }

            //-----------------------------------------
            // Print
            //-----------------------------------------

            $this->_pageTitle = $this->lang->words['m_dname_change'];

            return $this->registry->getClass('output')->getTemplate('ucp')->displayNameForm( $form, $error, '', $this->_isFBUser );
        }

        /**
         * UserCP Form Check
         *
         * @author    Matt Mecham
         * @param    string        Current area as defined by 'get_links'
         * @return    string        Processed HTML
         */
        public function saveForm( $current_area )
        {
            //-----------------------------------------
            // Where to go, what to see?
            //-----------------------------------------

            switch( $current_area )
            {
                default:
                case 'profileinfo':
                    return $this->saveProfileInfo();
                break;
                case 'signature':
                    return $this->saveSignature();
                break;
                case 'photo':
                    return $this->savePhoto();
                break;
                case 'ignoredusers':
                    return $this->saveIgnoredUsers();
                break;
                case 'facebook':
                    return $this->saveFacebook();
                break;
                case 'twitter':
                    return $this->saveTwitter();
                break;
                case 'customize':
                    return $this->saveCustomize();
                break;
                case 'email':
                    return $this->saveFormEmailPassword();
                break;
                case 'password':
                    return $this->saveFormPassword();
                break;
                case 'displayname':
                    return $this->saveFormDisplayname();
                break;
                case 'notifications':
                    return $this->saveFormNotifications();
                break;
            }
        }
        
        /**
         * UserCP Save Form: Customize
         *
         * @return    array    Errors
         */
        public function saveCustomize()
        {
            /* Init */
            $errors   = array();
            $custom   = array();
            $bg_nix   = trim( $this->request['bg_nix'] );
            $bg_url   = trim( $this->request['bg_url'] );
            $bg_tile  = intval( $this->request['bg_tile'] );
            $bg_color = trim( str_replace( '#', '', $this->request['bg_color'] ) );
            
            /* reset custom */
            $custom   = IPSLib::safeUnserialize( $this->memberData['pp_customization'] );
            
            /* Bug #21578 */
            if( ! $bg_color && $custom['bg_color'] )
            {
                $bg_color = $custom['bg_color'];
            }
            
            /* Delete all? */
            if ( $bg_nix )
            {
                /* reset array */
                $custom = array( 'bg_url' => '', 'type' => '', 'bg_color' => '', 'bg_tile' => '' );
                
                /* remove bg images */
                IPSMember::getFunction()->removeUploadedBackgroundImages( $this->memberData['member_id'] );
            }
            else
            {
                if ( $bg_url AND $this->memberData['gbw_allow_url_bgimage'] )
                {
                    /* Check */

                    {
                        return array( 0 => $this->lang->words['pp_bgimg_url_bad'] );
                    }
                    
                    $image_extension = strtolower( pathinfo( $bg_url, PATHINFO_EXTENSION ) );
                    
                    if( ! in_array( $image_extension, array( 'png', 'jpg', 'gif', 'jpeg'  ) ) )
                    {
                        return array( 0 => $this->lang->words['pp_bgimg_ext_bad'] );
                    }
                    
                    $custom['bg_url'] = $bg_url;
                    $custom['type']   = 'url';
                }
                else if ( $this->memberData['gbw_allow_upload_bgimage'] )
                {
                    /* Load more lang strings */
                    $this->registry->class_localization->loadLanguageFile( array( 'public_profile' ), 'members' );
            
                    /* Upload img */
                    $img = IPSMember::getFunction()->uploadBackgroundImage();
            
                    if ( $img['status'] == 'fail' )
                    {
                        return array( 0 => sprintf( $this->lang->words[ 'pp_' . $img['error'] ], $img['maxSize'] ) );
                    }
                    else if ( $img['final_location'] )
                    {
                        $custom['bg_url'] = $img['final_location'];
                        $custom['type']   = 'upload';
                    }
                }
            }
            
            /* BG color */
            $custom['bg_color'] = $bg_nix ? '' : IPSText::alphanumericalClean( $bg_color );
            
            /* Tile */
            $custom['bg_tile']  = $bg_nix ? '' : $bg_tile;
            
            /* Save it */
            if ( ! $this->memberData['bw_disable_customization'] AND $this->memberData['gbw_allow_customization'] )
            {
                IPSMember::save( $this->memberData['member_id'], array( 'extendedProfile' => array( 'pp_profile_update' => IPS_UNIX_TIME_NOW, 'pp_customization' => serialize( $custom ) ) ) );
            }
            
            return TRUE;
        }
        
        /**
         * UserCP Save Form: Twitter
         *
         * @return    array    Errors
         */
        public function saveTwitter()
        {
            if( !IPSLib::twitter_enabled() )
            {        
                $this->registry->getClass('output')->showError( 'twitter_disabled', 1005.2 );
            }
            
            //-----------------------------------------
            // Data
            //-----------------------------------------
            
            $toSave = IPSBWOptions::thaw( $this->memberData['tc_bwoptions'], 'twitter' );
            
            //-----------------------------------------
            // Loop and save... simple
            //-----------------------------------------
            
            foreach( array( 'tc_s_pic', 'tc_s_status', 'tc_s_aboutme', 'tc_s_bgimg', 'tc_si_status' ) as $field )
            {
                $toSave[ $field ] = intval( $this->request[ $field ] );
            }
            
            $this->memberData['tc_bwoptions'] = IPSBWOptions::freeze( $toSave, 'twitter' );        
            $return = IPSMember::save( $this->memberData['member_id'], array( 'extendedProfile' => array( 'tc_bwoptions' => $this->memberData['tc_bwoptions'] ) ) );
            
            //-----------------------------------------
            // Now sync
            //-----------------------------------------
            
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/twitter/connect.php', 'twitter_connect' );
            $twitter     = new $classToLoad( $this->registry, $this->memberData['twitter_token'], $this->memberData['twitter_secret'] );
            
            try
            {
                $twitter->syncMember( $this->memberData );
            }
            catch( Exception $error )
            {
                $msg = $error->getMessage();
                
                switch( $msg )
                {
                    case 'NOT_LINKED':
                    case 'NO_MEMBER':
                    break;
                }
            }
            
            return TRUE;
        }
        
        /**
         * UserCP Save Form: Facebook
         *
         * @return    array    Errors
         */
        public function saveFacebook()
        {
            if( !IPSLib::fbc_enabled() )
            {        
                $this->registry->getClass('output')->showError( 'fbc_disabled', 1005 );
            }
            
            //-----------------------------------------
            // Data
            //-----------------------------------------
            
            $toSave = IPSBWOptions::thaw( $this->memberData['members_bitoptions'], 'members' );
            
            //-----------------------------------------
            // Loop and save... simple
            //-----------------------------------------
            
            foreach( array( 'fbc_s_pic', 'fbc_s_status', 'fbc_s_aboutme', 'fbc_si_status' ) as $field )
            {
                $toSave[ $field ] = intval( $this->request[ $field ] );
            }
            
            $this->memberData['fb_bwoptions'] = IPSBWOptions::freeze( $toSave, 'facebook' );
            IPSMember::save( $this->memberData['member_id'], array( 'extendedProfile' => array( 'fb_bwoptions' => $this->memberData['fb_bwoptions'] ) ) );
            
            //-----------------------------------------
            // Now sync
            //-----------------------------------------
            
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
            $facebook    = new $classToLoad( $this->registry );
            
            try
            {
                $facebook->syncMember( $this->memberData );
            }
            catch( Exception $error )
            {
                $msg = $error->getMessage();
                
                switch( $msg )
                {
                    case 'NOT_LINKED':
                    case 'NO_MEMBER':
                    break;
                }
            }
            
            return TRUE;
        }
        
        /**
         * UserCP Save Form: Ignore Users
         *
         * @return    array    Errors
         */
        public function saveIgnoredUsers()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            $newName = $this->request['newbox_1'];
            $dnvs    = intval( $this->request['donot_view_sigs'] );
            
            IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'view_sigs' => ( $dnvs ) ? 0 : 1 ) ) );
            
            if ( trim( $newName ) && $_POST['newbox_1'] != $this->lang->words['ucp_members_name'] )
            {    
                //-----------------------------------------
                // Load
                //-----------------------------------------
                
                $member = IPSMember::load( $newName, 'core', 'displayname' );
                
                if ( ! $member['member_id'] )
                {
                    return array( 0 => $this->lang->words['ignoreuser_nomem'] );
                }
                
                if ( $member['member_id'] == $this->memberData['member_id'] )
                {
                    return array( 0 => $this->lang->words['ignoreuser_cannot'] );
                }
                
                //-----------------------------------------
                // Already ignoring?
                //-----------------------------------------
                
                $ignoreMe = $this->DB->buildAndFetch( array(
                                                            'select' => '*',
                                                            'from'   => 'ignored_users',
                                                            'where'  => 'ignore_owner_id=' . $this->memberData['member_id'] . ' AND ignore_ignore_id=' . $member['member_id']
                                                    )     );
                
                if ( $ignoreMe['ignore_id'] )
                {
                    return array( 0 => $this->lang->words['ignoreuser_already'] );
                }
                
                //-----------------------------------------
                // Can we ignore them?
                //-----------------------------------------
                
                if ( $member['_canBeIgnored'] !== TRUE )
                {
                    return array( 0 => $this->lang->words['ignoreuser_cannot'] );
                 }
        
                //-----------------------------------------
                // Add it
                //-----------------------------------------
        
                $this->DB->insert( 'ignored_users', array(
                                                            'ignore_owner_id'    => $this->memberData['member_id'],
                                                            'ignore_ignore_id'    => $member['member_id'],
                                                            'ignore_messages'    => !empty( $this->request['ignore_messages'] ) ? 1 : 0,
                                                            'ignore_topics'        => !empty( $this->request['ignore_topics'] ) ? 1 : 0,
                                                            'ignore_signatures'    => !empty( $this->request['ignore_signatures'] ) ? 1 : 0,
                                                            'ignore_chats'        => !empty( $this->request['ignore_chats'] ) ? 1 : 0,
                                                        )
                                );
                                
                /* Rebuild cache */
                IPSMember::rebuildIgnoredUsersCache( $this->memberData );
            }
            
            return TRUE;
        }
        
        
        /**
         * UserCP Save Form: Signature
         *
         * @return    array    Errors
         */
        public function saveSignature()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            $this->editor->setLegacyMode(false);
            
            $isHtml = intval( $this->request['sig_htmlstatus'] );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------

            $sig_restrictions    = explode( ':', $this->memberData['g_signature_limits'] );
            
            if ( ! $this->memberData['g_edit_profile'] OR ( $sig_restrictions[0] AND ! $this->memberData['g_sig_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1028, null, null, 403 );
            }

            //-----------------------------------------
            // Post process the editor
            // Now we have safe HTML and bbcode
            //-----------------------------------------
            
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setIsHtml( $this->memberData['g_dohtml'] && $isHtml );
            $this->editor->setBbcodeSection('signatures');
            $this->editor->setContent( $this->memberData['signature'] );
            
            $signature = $this->editor->process( $_POST['Post'] );
            
            //-----------------------------------------
            // Parse post
            //-----------------------------------------
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->testForParsingLimits( $signature, array( 'quote', 'emoticons', 'urls' ) );
                
            if ( is_array( $parser->getErrors() ) && count( $parser->getErrors() ) )
            {
                $this->lang->loadLanguageFile( array( 'public_post' ), 'forums' );
                    
                $_error    = array_pop( $parser->getErrors() );
                $this->registry->getClass('output')->showError( $_error, 10210 );
            }
            
            //-----------------------------------------
            // Signature restrictions...
            //-----------------------------------------
            
            $sig_errors    = array();
            
            //-----------------------------------------
            // Max number of images...
            //-----------------------------------------
            
            if( isset($sig_restrictions[1]) and $sig_restrictions[1] !== '' )
            {
                if( $parser->getImageCount( $signature ) > $sig_restrictions[1] )
                {
                    $sig_errors[] = sprintf( $this->lang->words['sig_toomanyimages'], $sig_restrictions[1] );
                }
            }
            
            //-----------------------------------------
            // Max number of urls...
            //-----------------------------------------
                    
            if( isset($sig_restrictions[4]) and $sig_restrictions[4] !== '' )
            {
                if( $parser->getUrlCount( $signature ) > $sig_restrictions[4] )
                {
                    $sig_errors[] = sprintf( $this->lang->words['sig_toomanyurls'], $sig_restrictions[4] );
                }
                else
                {

                    
                    if( count($matches[1]) > $sig_restrictions[4] )
                    {
                        $sig_errors[] = sprintf( $this->lang->words['sig_toomanyurls'], $sig_restrictions[4] );
                    }
                }
            }
            
            $this->settings['signature_line_length']    = $this->settings['signature_line_length'] > 0 ? $this->settings['signature_line_length'] : 200;
            
            /* You can't wordwrap on HTML http://community.invisionpower.com/resources/bugs.html/_/ip-board/signature-url-bbcode-r41254 */
            //$signature    = wordwrap( $signature, $this->settings['signature_line_length'], '</p>', true );

            // http://community.invisionpower.com/tracker/issue-35105-signature-restriction-minor-bug
            $signature    = preg_replace( '#^\s*(</p>)+#i', '', $signature );
            $signature    = preg_replace( '#(</p>)+?\s*$#i', '', $signature );
            
            //-----------------------------------------
            // Max number of lines of text...
            //-----------------------------------------
        
            if( isset($sig_restrictions[5]) and $sig_restrictions[5] !== '' )
            {
                $lineCount = substr_count( $signature, "</p>" ) + substr_count( $signature, "br>" );
                
                if( $lineCount >= $sig_restrictions[5] )
                {
                    $sig_errors[] = sprintf( $this->lang->words['sig_toomanylines'], $sig_restrictions[5] );
                }
            }
            
            //-----------------------------------------
            // Now the crappy part..
            //-----------------------------------------
                    
            if( isset($sig_restrictions[2]) and $sig_restrictions[2] !== '' AND isset($sig_restrictions[3]) and $sig_restrictions[3] !== '' )
            {
                preg_match_all( '/\<img([^>]+?)>/i', $signature, $allImages );

                if( count($allImages[1]) )
                {
                    foreach( $allImages[1] as $foundImage )
                    {
                        preg_match( '#src=[\'"]([^\'"]+?)[\'"]#i', $foundImage, $url );
                        $imageProperties = @getimagesize( $url[1] );
                        
                        if( is_array($imageProperties) AND count($imageProperties) )
                        {
                            if( $imageProperties[0] > $sig_restrictions[2] OR $imageProperties[1] > $sig_restrictions[3] )
                            {
                                $sig_errors[] = sprintf( $this->lang->words['sig_imagetoobig'], $url[1], $sig_restrictions[2], $sig_restrictions[3] );
                            }
                        }
                        else
                        {
                            $sig_errors[] = $this->lang->words['sig_imagenotretrievable'];
                        }
                    }
                }
            }
            
            if( count($sig_errors) )
            {
                $this->registry->getClass('output')->showError( implode( '<br />', $sig_errors ), 10211 );
            }
            
            /* Save HTML status */
            $members_bitoptions = IPSBWOptions::thaw( $this->memberData['members_bitoptions'], 'members', 'global' );
            $members_bitoptions['bw_html_sig'] = $isHtml;
            
            //-----------------------------------------
            // Write it to the DB.
            //-----------------------------------------
            
            IPSMember::save( $this->memberData['member_id'], array( 'members' => $members_bitoptions, 'extendedProfile' => array( 'signature' => $signature ) ) );
            
            /* Update cache */
            IPSContentCache::update( $this->memberData['member_id'], 'sig', $parser->display( $signature ) );
            
            return TRUE;
        }
        

        /**
         * UserCP Save Form: Minecraft
         *
         * @return    array    Errors
         */
        public function saveMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            $this->editor->setLegacyMode(false);
            
            $isHtml = intval( $this->request['minecraft_htmlstatus'] );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------

        
            
            if ( ! $this->memberData['g_edit_profile'] AND ! $this->memberData['g_minecraft_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1028, null, null, 403 );
            }

            //-----------------------------------------
            // Post process the editor
            // Now we have safe HTML and bbcode
            //-----------------------------------------
            
            /* Set content in editor */
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setIsHtml( $this->memberData['g_dohtml'] && $isHtml );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
            $minecraft = $this->editor->process( $_POST['Post'] );
            
            //-----------------------------------------
            // Parse post
            //-----------------------------------------
            
            /* Load parser */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
            $parser = new $classToLoad();
            
            $parser->testForParsingLimits( $minecraft, array( 'quote', 'emoticons', 'urls' ) );
                
            if ( is_array( $parser->getErrors() ) && count( $parser->getErrors() ) )
            {
                $this->lang->loadLanguageFile( array( 'public_post' ), 'forums' );
                    
                $_error    = array_pop( $parser->getErrors() );
                $this->registry->getClass('output')->showError( $_error, 10210 );
            }
            
            //-----------------------------------------
            // Signature restrictions...
            //-----------------------------------------
            
            $minecraft_errors    = array();

            $minecraft    = preg_replace( '#^\s*(</p>)+#i', '', $minecraft );
            $minecraft    = preg_replace( '#(</p>)+?\s*$#i', '', $minecraft );
            
            
            

            
            if( count($minecraft_errors) )
            {
                $this->registry->getClass('output')->showError( implode( '<br />', $minecraft_errors ), 10211 );
            }
            
            /* Save HTML status */
            $members_bitoptions = IPSBWOptions::thaw( $this->memberData['members_bitoptions'], 'members', 'global' );
            $members_bitoptions['bw_html_minecraft'] = $isHtml;
            
            //-----------------------------------------
            // Write it to the DB.
            //-----------------------------------------
            
            IPSMember::save( $this->memberData['member_id'], array( 'members' => $members_bitoptions, 'extendedProfile' => array( 'minecraft' => $minecraft ) ) );
            
            /* Update cache */
            IPSContentCache::update( $this->memberData['member_id'], 'minecraft', $parser->display( $minecraft ) );
            
            return TRUE;
        }
        
        
        
        /**
         * UserCP Save Form: Profile Info
         *
         * @return    array    Errors
         */
        public function saveProfileInfo()
        {
            /* Load editor stuff */
            if( $this->request['updateAboutMe'] )
            {
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
                $this->editor = new $classToLoad();
                $this->editor->setLegacyMode(false);
            }

            //-----------------------------------------
            // INIT
            //-----------------------------------------
            
            $pp_setting_moderate_comments = intval( $this->request['pp_setting_moderate_comments'] );
            $pp_setting_moderate_friends  = intval( $this->request['pp_setting_moderate_friends'] );
            $pp_setting_count_visitors    = intval( $this->request['pp_setting_count_visitors'] );
            $pp_setting_count_comments    = intval( $this->request['pp_setting_count_comments'] );
            $pp_setting_count_friends     = intval( $this->request['pp_setting_count_friends'] );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
            
            if ( ! $this->memberData['g_edit_profile'] )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 10214, null, null, 403 );
            }
            
            //-----------------------------------------
            // make sure that either we entered
            // all calendar fields, or we left them
            // all blank
            //-----------------------------------------
            
            $c_cnt = 0;
            
            foreach ( array('day','month','year') as $v )
            {
                if ( $this->request[ $v ] )
                {
                    $c_cnt++;
                }
            }
            
            if( $c_cnt > 0 && $c_cnt < 2 )
            {
                $this->registry->getClass('output')->showError( 'member_bad_birthday', 10215 );
            }
            else if( $c_cnt > 0 )
            {
                //-----------------------------------------
                // Make sure it's a legal date
                //-----------------------------------------
                
                $_year = $this->request['year'] ? $this->request['year'] : 2000;
                
                if ( ! checkdate( $this->request['month'], $this->request['day'], $_year ) )
                {
                    $this->registry->getClass('output')->showError( 'member_bad_birthday', 10216 );
                }
            }

            //-----------------------------------------
            // Start off our array
            //-----------------------------------------
            
            $core = array( 'bday_day'    => $this->request['day'],
                           'bday_month'  => $this->request['month'],
                           'bday_year'   => $this->request['year'],
                          );

            $extendedProfile = array( 'pp_setting_moderate_comments' => $pp_setting_moderate_comments,
                                      'pp_setting_moderate_friends'  => $pp_setting_moderate_friends,
                                      'pp_setting_count_visitors'    => $pp_setting_count_visitors,
                                      'pp_setting_count_comments'    => $pp_setting_count_comments,
                                      'pp_setting_count_friends'     => $pp_setting_count_friends );
            
            //-----------------------------------------
            // check to see if we can enter a member title
            // and if one is entered, update it.
            //-----------------------------------------
            
            if( isset( $this->request['member_title'] ) and ( $this->settings['post_titlechange'] == -1 or ( $this->settings['post_titlechange'] and $this->memberData['posts'] >= $this->settings['post_titlechange'] ) ) )
            {
                $core['title'] = IPSText::getTextClass('bbcode')->stripBadWords( $this->request['member_title'] );
            }
            
            //-----------------------------------------
            // Custom profile field stuff
            //-----------------------------------------
            
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/customfields/profileFields.php', 'customProfileFields' );
            $fields      = new $classToLoad();
            
            $fields->member_data = $this->member->fetchMemberData();
            $fields->initData( 'edit' );
            /* Use $_POST and not ipsRegistry::$request as the custom profile field kernel class has its own cleaning routines for saving and showing
               which means we end up with double & -> & conversion (&lt;, etc) */
            $fields->parseToSave( $_POST );
            
            if( $fields->error_messages )
            {
                return $fields->error_messages;
            }
            
            /* Check the website url field */
            $website_field = $fields->getFieldIDByKey( 'website' );
            
            if( $website_field && $fields->out_fields[ 'field_' . $website_field ] )
            {

                {

                }
            }

            //-----------------------------------------
            // Check...
            //-----------------------------------------
            
            if ( count( $fields->error_fields['empty'] ) )
            {
                $this->registry->getClass('output')->showError( array( 'customfields_empty', $fields->error_fields['empty'][0]['pf_title'] ), 10217 );
            }
            
            if ( count( $fields->error_fields['invalid'] ) )
            {
                $this->registry->getClass('output')->showError( array( 'customfields_invalid', $fields->error_fields['invalid'][0]['pf_title'] ), 10218 );
            }
            
            if ( count( $fields->error_fields['toobig'] ) )
            {
                $this->registry->getClass('output')->showError( array( 'customfields_toobig', $fields->error_fields['toobig'][0]['pf_title'] ), 10219 );
            }
            
            /* About me */
            if( $this->request['updateAboutMe'] )
            {
                $extendedProfile['pp_about_me'] = $this->editor->process( $_POST['Post'] );
            }
            
            /* Open ID & times*/
            $timeZone    = IPSText::alphanumericalClean( $this->request['timeZone'], '+.' );
            $dst_correct = intval( $this->request['dst_correct'] );
            
            /* Add into array */
            $core['time_offset']      = $timeZone;
            
            /* http://community.invisionpower.com/resources/bugs.html/_/ip-board/cannot-uncheck-my-timezone-is-currently-in-dst-checkbox-in-profile-r41510 */
            //$core['dst_in_use']       = $this->settings['time_dst_auto_correction'] ? ( ( $this->request['dstOption'] AND intval($this->request['dstCheck']) == 0 ) ? intval($this->request['dstOption']) : 0 ) : $this->memberData['dst_in_use'];
            $core['dst_in_use']       = $this->settings['time_dst_auto_correction'] ? ( ( $this->request['dstOption'] AND intval($this->request['dstCheck']) == 0 ) ? intval($this->request['dstOption']) : 0 ) : intval($this->request['dstOption']);
            
            $core['members_auto_dst'] = $this->settings['time_dst_auto_correction'] ? intval($this->request['dstCheck']) : $this->memberData['members_auto_dst'];
            
            //-----------------------------------------
            // Update the DB
            //-----------------------------------------
            
            IPSMember::save( $this->memberData['member_id'], array( 'core'            => $core,
                                                                     'customFields'    => $fields->out_fields,
                                                                     'extendedProfile' => $extendedProfile ) );

            //-----------------------------------------
            // Update birthdays cache if user set to today
            // or if birthday was today but isn't now
            //-----------------------------------------
            
            if( $core['bday_month'] == date('m') AND $core['bday_day'] == date('d') )
            {
                $this->cache->rebuildCache( 'birthdays', 'calendar' );
            }
            else if( $this->memberData['bday_month'] == date('m') AND $this->memberData['bday_day'] == date('d') AND ( $core['bday_month'] != date('m') OR $core['bday_day'] != date('d') ) )
            {
                $this->cache->rebuildCache( 'birthdays', 'calendar' );
            }

            return TRUE;
        }
        
        /**
         * UserCP Save Form: Notifications config
         *
         * @return    boolean        Successful
         */
        public function saveFormNotifications()
        {
            //-----------------------------------------
            // Notifications library
            //-----------------------------------------
            
            $classToLoad        = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
            $notifyLibrary        = new $classToLoad( $this->registry );
            $notifyLibrary->setMember( $this->memberData );

            //-----------------------------------------
            // Show the form
            //-----------------------------------------
            
            $_basicOptions        = array( array( 'email', $this->lang->words['notopt__email'] ), array( 'inline', $this->lang->words['notopt__inline'] ), array( 'mobile' => $this->lang->words['notopt__mobile'] ) );
            $_configOptions        = $notifyLibrary->getNotificationData();
            $_notifyConfig        = $notifyLibrary->getMemberNotificationConfig( $this->memberData );
            $_defaultConfig        = $notifyLibrary->getDefaultNotificationConfig();
            $_saveConfig        = array();

            foreach( $_configOptions as $option )
            {
                $_saveConfig[ $option['key'] ]                        = array();
                $_saveConfig[ $option['key'] ]['selected']            = array();
                
                //-----------------------------------------
                // Loop through and mark what we selected.
                // Do not allow changing of stuff from disable_override
                //    and disabled, however
                //-----------------------------------------
                
                if( is_array($this->request['config_' . $option['key'] ]) AND count($this->request['config_' . $option['key'] ]) )
                {
                    foreach( $this->request['config_' . $option['key'] ] as $_selected )
                    {
                        if( !is_array($_defaultConfig[ $option['key'] ]['disabled']) OR !in_array( $_selected, $_defaultConfig[ $option['key'] ]['disabled'] ) )
                        {
                            $_saveConfig[ $option['key'] ]['selected'][]    = $_selected;
                        }
                    }
                }
                
                if( $_defaultConfig[ $option['key'] ]['disable_override'] )
                {
                    $_saveConfig[ $option['key'] ]['selected']    = $_defaultConfig[ $option['key'] ]['selected'];
                }
            }

            //-----------------------------------------
            // Save
            //-----------------------------------------
            
            IPSMember::packMemberCache( $this->memberData['member_id'], array( 'notifications' => $_saveConfig, 'show_notification_popup' => intval($this->request['show_notification_popup']) ), $this->memberData['members_cache'] );

            //-----------------------------------------
            // Topic preferences
            //-----------------------------------------
            
            $_trackChoice    = '';
            
            if ( $this->request['auto_track'] )
            {
                 if ( in_array( $this->request['trackchoice'], array( 'none', 'immediate', 'offline', 'daily', 'weekly' ) ) )
                 {
                     $_trackChoice = $this->request['trackchoice'];
                 }
             }
             
             //-----------------------------------------
             // Profile preferences
             //-----------------------------------------

            IPSMember::save( $this->memberData['member_id'], array( 'core' => array(  
                                                                                         'allow_admin_mails'    => intval( $this->request['admin_send'] ),
                                                                                      'auto_track'            => $_trackChoice
                                                                                    ) ) );

            return TRUE;
        }
        /**
         * UserCP Save Form: Password
         *
         * @param    array    Array of member / core_sys_login information (if we're editing)
         * @return    mixed    Array of errors / boolean true
         */
        public function saveFormPassword( $member=array() )
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $cur_pass = trim($this->request['current_pass']);
             $new_pass = trim($this->request['new_pass_1']);
             $chk_pass = trim($this->request['new_pass_2']);
            $isRemote = ( ! $this->memberData['bw_local_password_set'] AND $this->memberData['members_created_remote'] ) ? true : false;
            
            //-----------------------------------------
            // Checks...
            //-----------------------------------------

            if( $this->memberData['g_access_cp'] )
            {
                return array( 0 => $this->lang->words['admin_emailpassword'] );
            }

            if ( $isRemote === false AND ( ! $_POST['current_pass'] OR ( empty($new_pass) ) or ( empty($chk_pass) ) ) )
             {
                return array( 0 => $this->lang->words['complete_entire_form'] );
             }

             //-----------------------------------------
             // Do the passwords actually match?
             //-----------------------------------------

             if ( $new_pass != $chk_pass )
             {
                 return array( 0 => $this->lang->words['passwords_not_matchy'] );
             }

             //-----------------------------------------
             // Check password...
             //-----------------------------------------
            
            if ( $isRemote === false )
            {
                if ( $this->_checkPassword( $cur_pass ) !== TRUE )
                {
                    return array( 0 => $this->lang->words['current_pw_bad'] );
                }
            }
            else
            {
                /* This is INIT in _checkPassword */
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/handlers/han_login.php', 'han_login' );
                $this->han_login   = new $classToLoad( $this->registry );
                $this->han_login->init();
            }

             //-----------------------------------------
             // Create new password...
             //-----------------------------------------

             $md5_pass = md5($new_pass);

            //-----------------------------------------
            // han_login was loaded during check_password
            //-----------------------------------------

            $this->han_login->changePass( $this->memberData['email'], $md5_pass, $new_pass, $this->memberData );

            if ( $this->han_login->return_code AND $this->han_login->return_code != 'METHOD_NOT_DEFINED' AND $this->han_login->return_code != 'SUCCESS' )
            {
                return array( 0 => $this->lang->words['hanlogin_pw_failed'] );
            }

             //-----------------------------------------
             // Update the DB
             //-----------------------------------------

             IPSMember::updatePassword( $this->memberData['member_id'], $md5_pass );

             IPSLib::runMemberSync( 'onPassChange', $this->memberData['member_id'], $new_pass );

             //-----------------------------------------
             // Update members log in key...
             //-----------------------------------------

             $key  = IPSMember::generateAutoLoginKey();

            IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'member_login_key' => $key, 'bw_local_password_set' => 1 ) ) );

            $this->ok_message = $this->lang->words['pw_change_successful'];

             return TRUE;
        }

        /**
         * UserCP Save Form: Display Name
         *
         * @return    mixed    Array of errors / boolean true
         */
        public function saveFormDisplayname()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $members_display_name  = trim($this->request['displayName']);
            $password_check        = trim( $this->request['displayPassword'] );

            //-----------------------------------------
            // Check for blanks...
            //-----------------------------------------

            if ( ! $members_display_name OR ( ! $this->_isFBUser AND ! $password_check ) )
            {
                return array( 0 => $this->lang->words['complete_entire_form'] );
            }

            //-----------------------------------------
            // Check password
            //-----------------------------------------

            if ( ! $this->_isFBUser )
            {
                if ( $this->_checkPassword( $password_check ) === FALSE )
                {
                    return array( 0 => $this->lang->words['current_pw_bad'] );
                }
            }

            try
            {
                if ( IPSMember::getFunction()->updateName( $this->memberData['member_id'], $members_display_name, 'members_display_name' ) === TRUE )
                {
                    $this->cache->rebuildCache( 'stats', 'global' );

                    return $this->showFormDisplayname( '', $this->lang->words['dname_change_ok'] );
                }
                else
                {
                    # We should absolutely never get here. So this is a fail-safe, really to
                    # prevent a "false" positive outcome for the end-user
                    return array( 0 => $this->lang->words['name_taken_change'] );
                }
            }
            catch( Exception $error )
            {
                switch( $error->getMessage() )
                {
                    case 'NO_MORE_CHANGES':
                        return array( 0 => $this->lang->words['name_change_no_more'] );
                    break;
                    case 'NO_USER':
                        return array( 0 => $this->lang->words['name_change_noload'] );
                    break;
                    case 'NO_PERMISSION':
                        return array( 0 => $this->lang->words['name_change_noperm'] );
                    case 'NO_NAME':
                        return array( 0 => sprintf( $this->lang->words['name_change_tooshort'], $this->settings['max_user_name_length'] ) );
                    break;
                    case 'TOO_LONG':
                        return array( 0 => sprintf( $this->lang->words['name_change_tooshort'], $this->settings['max_user_name_length'] ) );
                    break;
                    case 'ILLEGAL_CHARS':
                        return array( 0 => $this->lang->words['name_change_illegal'] );
                    break;
                    case 'USER_NAME_EXISTS':
                        return array( 0 => $this->lang->words['name_change_taken'] );
                    break;
                    default:
                        return array( 0 => $error->getMessage() );
                    break;
                }
            }

            return TRUE;
        }

        /**
         * UserCP Save Form: Email Address
         *
         * @return    mixed        Array of errors / boolean true
         */
        public function saveFormEmailPassword()
        {
            //-----------------------------------------
            // INIT
            //-----------------------------------------

            $_emailOne         = strtolower( trim($this->request['in_email_1']) );
            $_emailTwo         = strtolower( trim($this->request['in_email_2']) );
            $cur_pass = trim($this->request['current_pass']);
             $new_pass = trim($this->request['new_pass_1']);
             $chk_pass = trim($this->request['new_pass_2']);
            $isRemote = ( ! $this->memberData['bw_local_password_set'] AND $this->memberData['members_created_remote'] ) ? true : false;
            
            if ( $cur_pass OR $new_pass )
            {
                if( $this->memberData['g_access_cp'] )
                {
                    return array( 0 => $this->lang->words['admin_emailpassword'] );
                }
            
                if ( $isRemote === false AND ( ! $_POST['current_pass'] OR ( empty($new_pass) ) or ( empty($chk_pass) ) ) )
                {
                    return array( 0 => $this->lang->words['complete_entire_form'] );
                }
            
                //-----------------------------------------
                // Do the passwords actually match?
                //-----------------------------------------
            
                if ( $new_pass != $chk_pass )
                {
                    return array( 0 => $this->lang->words['passwords_not_matchy'] );
                }
            
                //-----------------------------------------
                // Check password...
                //-----------------------------------------
                    
                if ( $isRemote === false )
                {
                    if ( $this->_checkPassword( $cur_pass ) !== TRUE )
                    {
                        return array( 0 => $this->lang->words['current_pw_bad'] );
                    }
                }
                else
                {
                    /* This is INIT in _checkPassword */
                    $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/handlers/han_login.php', 'han_login' );
                    $this->han_login   = new $classToLoad( $this->registry );
                    $this->han_login->init();
                }
            
                //-----------------------------------------
                // Create new password...
                //-----------------------------------------
            
                $md5_pass = md5($new_pass);
            
                //-----------------------------------------
                // han_login was loaded during check_password
                //-----------------------------------------
            
                $this->han_login->changePass( $this->memberData['email'], $md5_pass, $new_pass, $this->memberData );
            
                if ( $this->han_login->return_code AND $this->han_login->return_code != 'METHOD_NOT_DEFINED' AND $this->han_login->return_code != 'SUCCESS' )
                {
                    return array( 0 => $this->lang->words['hanlogin_pw_failed'] );
                }
            
                //-----------------------------------------
                // Update the DB
                //-----------------------------------------
            
                IPSMember::updatePassword( $this->memberData['email'], $md5_pass );
            
                IPSLib::runMemberSync( 'onPassChange', $this->memberData['member_id'], $new_pass );
            
                //-----------------------------------------
                // Update members log in key...
                //-----------------------------------------
            
                $key  = IPSMember::generateAutoLoginKey();
            
                IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'member_login_key' => $key, 'bw_local_password_set' => 1 ) ) );
            
                $this->ok_message = $this->lang->words['pw_change_successful'];
            }
            
            if ( $_emailOne or $_emailTwo )
            {
                //-----------------------------------------
                // Do not allow validating members to change
                // email when admin validation is on
                // @see    http://community.invisionpower.com/tracker/issue-19964-loophole-in-registration-procedure/
                //-----------------------------------------
                
                if( $this->memberData['member_group_id'] == $this->settings['auth_group'] AND in_array( $this->settings['reg_auth_type'], array( 'admin', 'admin_user' ) ) )
                {
                    $this->registry->output->showError( $this->lang->words['admin_val_no_email_chg'], 10190 );
                }
                
                //-----------------------------------------
                // Check input
                //-----------------------------------------
        
                if( $this->memberData['g_access_cp'] )
                {
                    return array( 0 => $this->lang->words['admin_emailpassword'] );
                }
        
                if ( ! $_POST['in_email_1'] OR ! $_POST['in_email_2'] )
                {
                    return array( 0 => $this->lang->words['complete_entire_form'] );
                }
        
                //-----------------------------------------
                // Check password...
                //-----------------------------------------
        
                if ( ! $this->_isFBUser )
                {
                    if ( $this->_checkPassword( $this->request['password'] ) === FALSE )
                    {
                        return array( 0 => $this->lang->words['current_pw_bad'] );
                    }
                }
        
                //-----------------------------------------
                // Test email addresses
                //-----------------------------------------
        
                if ( $_emailOne != $_emailTwo )
                {
                    return array( 0 => $this->lang->words['emails_no_matchy'] );
                }
        
                if ( IPSText::checkEmailAddress( $_emailOne ) !== TRUE )
                {
                    return array( 0 => $this->lang->words['email_not_valid'] );
                }
        
                //-----------------------------------------
                // Is this email addy taken?
                //-----------------------------------------
        
                if ( IPSMember::checkByEmail( $_emailOne ) == TRUE )
                {
                    return array( 0 => $this->lang->words['email_is_taken'] );
                }
        
                //-----------------------------------------
                // Load ban filters
                //-----------------------------------------
                $banfilters = array();
                $this->DB->build( array( 'select' => '*', 'from' => 'banfilters' ) );
                $this->DB->execute();
        
                while( $r = $this->DB->fetch() )
                {
                    $banfilters[ $r['ban_type'] ][] = $r['ban_content'];
                }
        
                //-----------------------------------------
                // Check in banned list
                //-----------------------------------------
        
                if ( isset($banfilters['email']) AND is_array( $banfilters['email'] ) and count( $banfilters['email'] ) )
                {
                    foreach ( $banfilters['email'] as $email )
                    {
                        $email = str_replace( '\*', '.*' ,  preg_quote($email, "/") );
        
                        if ( preg_match( "/^{$email}$/i", $_emailOne ) )
                        {
                            return array( 0 => $this->lang->words['email_is_taken'] );
                        }
                    }
                }
        
                //-----------------------------------------
                // Load handler...
                //-----------------------------------------
        
                $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/handlers/han_login.php', 'han_login' );
                $this->han_login   = new $classToLoad( $this->registry );
                $this->han_login->init();
        
                if ( $this->han_login->emailExistsCheck( $_emailOne ) !== FALSE )
                {
                    return array( 0 => $this->lang->words['email_is_taken'] );
                }
        
                $this->han_login->changeEmail( $this->memberData['email'], $_emailOne, $this->memberData );
        
                if ( $this->han_login->return_code AND $this->han_login->return_code != 'METHOD_NOT_DEFINED' AND $this->han_login->return_code != 'SUCCESS' )
                {
                     return array( 0 => $this->lang->words['email_is_taken'] );
                }
        
                //-----------------------------------------
                // Want a new validation? NON ADMINS ONLY
                //-----------------------------------------
        
                if ( $this->settings['reg_auth_type'] AND !$this->memberData['g_access_cp'] )
                {
                    //-----------------------------------------
                    // Remove any existing entries
                    //-----------------------------------------
                    
                    $_previous    = $this->DB->buildAndFetch( array( 'select' => 'prev_email, real_group', 'from' => 'validating', 'where' => "member_id={$this->memberData['member_id']} AND email_chg=1" ) );
                    
                    if( $_previous['prev_email'] )
                    {
                        $this->DB->delete( 'validating', "member_id={$this->memberData['member_id']} AND email_chg=1" );
                        
                        $this->memberData['email']                = $_previous['prev_email'];
                        $this->memberData['member_group_id']    = $_previous['real_group'];
                    }
                    
                    $validate_key = md5( IPSMember::makePassword() . time() );
        
                    //-----------------------------------------
                    // Update the new email, but enter a validation key
                    // and put the member in "awaiting authorisation"
                    // and send an email..
                    //-----------------------------------------
        
                    $db_str = array(
                                    'vid'         => $validate_key,
                                    'member_id'   => $this->memberData['member_id'],
                                    'temp_group'  => $this->settings['auth_group'],
                                    'entry_date'  => time(),
                                    'coppa_user'  => 0,
                                    'email_chg'   => 1,
                                    'ip_address'  => $this->member->ip_address,
                                    'prev_email'  => $this->memberData['email'],
                                   );
        
                    if ( $this->memberData['member_group_id'] != $this->settings['auth_group'] )
                    {
                        $db_str['real_group'] = $this->memberData['member_group_id'];
                    }
        
                    $this->DB->insert( 'validating', $db_str );
                    
                    IPSLib::runMemberSync( 'onEmailChange', $this->memberData['member_id'], strtolower( $_emailOne ), $this->memberData['email'] );
        
                    IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'member_group_id' => $this->settings['auth_group'],
                                                                                                      'email'           => $_emailOne ) ) );
        
                    //-----------------------------------------
                    // Update their session with the new member group
                    //-----------------------------------------
        
                    if ( $this->member->session_id  )
                    {
                        $this->member->sessionClass()->convertMemberToGuest();
                    }
        
                    //-----------------------------------------
                    // Kill the cookies to stop auto log in
                    //-----------------------------------------
        
                    IPSCookie::set( 'pass_hash'  , '-1', 0 );
                    IPSCookie::set( 'member_id'  , '-1', 0 );
                    IPSCookie::set( 'session_id' , '-1', 0 );
        
                    //-----------------------------------------
                    // Dispatch the mail, and return to the activate form.
                    //-----------------------------------------
        
                    IPSText::getTextClass( 'email' )->getTemplate("newemail");
        
                    IPSText::getTextClass( 'email' )->buildMessage( array(
                                                        'NAME'         => $this->memberData['members_display_name'],
                                                        'THE_LINK'     => $this->settings['base_url']."app=core&module=global&section=register&do=auto_validate&type=newemail&uid=".$this->memberData['member_id']."&aid=".$validate_key,
                                                        'ID'           => $this->memberData['member_id'],
                                                        'MAN_LINK'     => $this->settings['base_url']."app=core&module=global&section=register&do=07",
                                                        'CODE'         => $validate_key,
                                                      ) );
        
                    IPSText::getTextClass( 'email' )->subject = $this->lang->words['lp_subject'].' '.$this->settings['board_name'];
                    IPSText::getTextClass( 'email' )->to      = $_emailOne;
        
                    IPSText::getTextClass( 'email' )->sendMail();
        
                    $this->registry->getClass('output')->silentRedirect( $this->settings['base_url'] . 'app=core&module=global&section=register&do=07' );
                }
                else
                {
                    //-----------------------------------------
                    // No authorisation needed, change email addy and return
                    //-----------------------------------------
                    
                    IPSLib::runMemberSync( 'onEmailChange', $this->memberData['member_id'], strtolower( $_emailOne ), $this->memberData['email'] );
        
                    IPSMember::save( $this->memberData['member_id'], array( 'core' => array( 'email' => $_emailOne ) ) );
        
                    //-----------------------------------------
                    // Add to OK message
                    //-----------------------------------------
        
                    $this->ok_message = $this->lang->words['ok_email_changed'];
                }
            }
            
            return TRUE;
        }

        /**
         * Password check
         *
         * @param    string        Plain Text Password
         * @return    boolean        Password matched or not
         */
        protected function _checkPassword( $password_check )
        {
            //-----------------------------------------
            // Ok, check password first
            //-----------------------------------------

            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/handlers/han_login.php', 'han_login' );
            $this->han_login   = new $classToLoad( $this->registry );
            $this->han_login->init();

            //-----------------------------------------
            // Is this a username or email address?
            //-----------------------------------------

            $this->han_login->loginPasswordCheck( $this->memberData['name'], $this->memberData['email'], $password_check );

            if ( $this->han_login->return_code == 'SUCCESS' )
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }
    }

    [/long]

  6. 4 linijki pod tym

            /* Set content in editor */
            $this->editor->setLegacyMode(false);
            $this->editor->setAllowBbcode( true );
            $this->editor->setAllowSmilies( true );
            $this->editor->setAllowHtml( $this->memberData['g_dohtml'] );
            $this->editor->setIsHtml( $this->memberData['bw_html_minecraft'] );
            $this->editor->setBbcodeSection('minecraft');
            $this->editor->setContent( $this->memberData['minecraft'] );
            
  7. Nie skopiowałem całego kodu.

        public function formMinecraft()
        {
            /* Load editor stuff */
            $classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );
            $this->editor = new $classToLoad();
            
            /* HTML checkbox language strings */
            $this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_post' ), 'forums' );
            
            //-----------------------------------------
            // Check to make sure that we can edit profiles..
            //-----------------------------------------
                    
            $minecraft_restrictions = explode( ':', $this->memberData['g_minecraft_limits'] );
            
            if ( ! $this->memberData['g_edit_profile'] OR ( $minecraft_restrictions[0] AND ! $this->memberData['g_minecraft_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
            
        
                
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
            }
    

     

    Klamr otwierających jest tyle co zamykających.

  8.         $minecraft_restrictions = explode( ':', $this->memberData['g_minecraft_limits'] );
            
            if ( ! $this->memberData['g_edit_profile'] OR ( $minecraft_restrictions[0] AND ! $this->memberData['g_minecraft_unit'] ) )
            {
                $this->registry->getClass('output')->showError( 'members_profile_disabled', 1024, null, null, 403 );
            }
            
        
                
                if( $form['_noPerm'] )
                {
                    return $this->registry->getClass('output')->getTemplate('ucp')->membersMinecraftFormError( $form );
                }
            }
    
             
            /* Set content in editor */
            $this->editor->setLegacyMode(false);

     

    od 1291 do 1308

  9. Sposoby:

    1. Przejdź do ACP :a: Manage Applications & Modules :a: Edytuj portal :a: zmień Application Public Title

    Zobacz czy się tytuł strony nie zmienił.

     

    Jeżeli nie no to próbuj sposób 2 i 3. (down)

     

    2. Wejdź do FTP :a: Admin :a: applications_addon :a: other :a: portal :a: modules_public :a: NAZWA_FOLDERU :a: edytuj nazwa_pliku.php i poszukaj tam $this->registry->output->setTitle('XXXXXXX');

    nazwa pliku jest taka jak nazwa folderu.

    tam gdzie XXXXXXX to tytuł strony np. Portal

     

    3. Poszukaj w langach (plikach językowych).

    • Lubię to 1
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.