Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/extensions/core/MemberACPProfileBlocks/ProfileData.php
<?php
/**
 * @brief        ACP Member Profile: Profile Data Block
 * @author        <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
 * @copyright    (c) Invision Power Services, Inc.
 * @license        https://www.invisioncommunity.com/legal/standards/
 * @package        Invision Community
 * @since        20 Nov 2017
 */

namespace IPS\core\extensions\core\MemberACPProfileBlocks;

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

/**
 * @brief    ACP Member Profile: Profile Data Block
 */
class _ProfileData extends \IPS\core\MemberACPProfile\TabbedBlock
{
   
/**
     * @brief    Fields
     */
   
protected $fields = array();
   
   
/**
     * @brief    Clubs
     */
   
protected $clubs = NULL;
   
   
/**
     * Constructor
     *
     * @param    \IPS\Member    $member    Member
     * @return    void
     */
   
public function __construct( \IPS\Member $member )
    {
       
parent::__construct( $member );
       
       
$this->fields = $this->member->profileFields( \IPS\core\ProfileFields\Field::STAFF );
       
$this->clubs = \IPS\Settings::i()->clubs ? \IPS\Member\Club::clubs( NULL, NULL, 'last_activity', array( 'member' => $this->member, 'statuses' => array( \IPS\Member\Club::STATUS_MODERATOR, \IPS\Member\Club::STATUS_EXPIRED_MODERATOR, \IPS\Member\Club::STATUS_LEADER ) ) ) : array();
    }
   
   
/**
     * Get Block Title
     *
     * @return    string
     */
   
public function blockTitle()
    {
        return
'profile_data';
    }
   
   
/**
     * Get Tab Names
     *
     * @return    string
     */
   
public function tabs()
    {
       
$return = array();
        if (
count( $this->fields ) || $this->member->member_title || $this->member->rank['title'] || $this->member->rank['image'] || \IPS\Settings::i()->profile_birthday_type != 'none' || \IPS\Settings::i()->signatures_enabled )
        {
           
$return['fields'] = 'profile_fields';
        }        
        if (
count( $this->clubs ) )
        {
           
$return['clubs'] = 'club_ownership';
        }
       
        return
$return;
    }
   
   
/**
     * Show Edit Link?
     *
     * @return    bool
     */
   
protected function showEditLink()
    {
        return
true;
    }

   
/**
     * Get output
     *
     * @return    string
     */
   
public function tabOutput( $tab )
    {
        if (
$tab == 'fields' )
        {
            return \
IPS\Theme::i()->getTemplate('memberprofile')->profileData( $this->member, $this->fields );
        }
        elseif (
$tab == 'clubs' )
        {            
            return \
IPS\Theme::i()->getTemplate('memberprofile')->clubs( $this->member, $this->clubs );
        }
    }
   
   
/**
     * Edit Window
     *
     * @return    string
     */
   
public function edit()
    {
       
/* Build basic form */
       
$form = new \IPS\Helpers\Form;
       
$form->addHeader('profile_data');
       
$form->add( new \IPS\Helpers\Form\Text( 'member_title', $this->member->member_title, FALSE, array( 'maxLength' => 64 ) ) );
        if ( \
IPS\Settings::i()->profile_birthday_type !== 'none' )
        {
           
$form->add( new \IPS\Helpers\Form\Custom( 'bday', array( 'year' => $this->member->bday_year, 'month' => $this->member->bday_month, 'day' => $this->member->bday_day ), FALSE, array( 'getHtml' => function( $element )
            {
                return
strtr( \IPS\Member::loggedIn()->language()->preferredDateFormat(), array(
                   
'DD'    => \IPS\Theme::i()->getTemplate( 'members', 'core', 'global' )->bdayForm_day( $element->name, $element->value, $element->error ),
                   
'MM'    => \IPS\Theme::i()->getTemplate( 'members', 'core', 'global' )->bdayForm_month( $element->name, $element->value, $element->error ),
                   
'YY'    => \IPS\Theme::i()->getTemplate( 'members', 'core', 'global' )->bdayForm_year( $element->name, $element->value, $element->error ),
                   
'YYYY'    => \IPS\Theme::i()->getTemplate( 'members', 'core', 'global' )->bdayForm_year( $element->name, $element->value, $element->error ),
                ) );
            } ) ) );
        }
        if ( \
IPS\Settings::i()->signatures_enabled )
        {
           
$form->add( new \IPS\Helpers\Form\Editor( 'signature', $this->member->signature, FALSE, array( 'app' => 'core', 'key' => 'Signatures', 'autoSaveKey' => "sig-{$this->member->member_id}", 'attachIds' => array( $this->member->member_id ) ) ) );
        }
   
       
/* Profile Fields */
       
try
        {
           
$values = \IPS\Db::i()->select( '*', 'core_pfields_content', array( 'member_id=?', $this->member->member_id ) )->first();
        }
        catch( \
UnderflowException $e )
        {
           
$values    = array();
        }
        if(
count( $values ) )
        {
            foreach ( \
IPS\core\ProfileFields\Field::fields( $values, \IPS\core\ProfileFields\Field::STAFF ) as $group => $fields )
            {
               
$form->addHeader( "core_pfieldgroups_{$group}" );
                foreach (
$fields as $field )
                {
                   
$form->add( $field );
                }
            }
        }
       
       
/* Handle submissions */
       
if ( $values = $form->values() )
        {
           
/* Profile Fields */
           
try
            {
               
$profileFields = \IPS\Db::i()->select( '*', 'core_pfields_content', array( 'member_id=?', $this->member->member_id ) )->first();
               
                if ( !
is_array( $profileFields ) ) // If \IPS\Db::i()->select()->first() has only one column, then the contents of that column is returned. We do not want this here
               
{
                   
$profileFields = array();
                }
            }
            catch( \
UnderflowException $e )
            {
               
$profileFields    = array();
            }            
           
$profileFields['member_id'] = $this->member->member_id;
            foreach ( \
IPS\core\ProfileFields\Field::fields( $profileFields, \IPS\core\ProfileFields\Field::STAFF ) as $group => $fields )
            {
                foreach (
$fields as $id => $field )
                {
                   
$profileFields[ "field_{$id}" ] = $field::stringValue( !empty( $values[ $field->name ] ) ? $values[ $field->name ] : NULL );
                }
            }
           
$this->member->changedCustomFields = $profileFields;
            \
IPS\Db::i()->replace( 'core_pfields_content', $profileFields );

           
/* Profile Preferences */
           
$this->member->member_title        = $values['member_title'];
            if (
$values['bday'] )
            {
               
$this->member->bday_day    = $values['bday']['day'];
               
$this->member->bday_month    = $values['bday']['month'];
               
$this->member->bday_year    = $values['bday']['year'];
            }
            else
            {
               
$this->member->bday_day = NULL;
               
$this->member->bday_month = NULL;
               
$this->member->bday_year = NULL;
            }
            if ( \
IPS\Settings::i()->signatures_enabled )
            {
               
$this->member->signature = $values['signature'];
            }
           
$this->member->save();
                                           
           
/* Log and Redirect */
           
\IPS\Session::i()->log( 'acplog__members_edited_profile', array( $this->member->name => FALSE ) );
            \
IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=core&module=members&controller=members&do=view&id={$this->member->member_id}" ), 'saved' );
        }
       
       
/* Display */
       
return $form;
    }
}