Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/extensions/core/MemberExportPersonalInformation/Main.php
<?php
/**
 * @brief        ACP Export Personal Information
 * @author        <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
 * @copyright    (c) Invision Power Services, Inc.
 * @license        https://www.invisioncommunity.com/legal/standards/
 * @package        Invision Community
 * @since        15 May 2018
 */

namespace IPS\core\extensions\core\MemberExportPersonalInformation;

/* 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 Export Personal Information
 */
class _Main
{
   
/**
     * Return data
     * @param    \IPS\Member        $member        The member
     *
     * @return    array
     */
   
public function getData( \IPS\Member $member )
    {
       
$return = array();
       
       
/* Basic Data */
       
$columns = array(
           
'name',
           
'email',
           
'joined',
           
'ip_address',
           
'timezone',
           
'last_visit',
           
'last_post',
           
'birthday',
           
'allow_admin_mails',
           
'member_title'
       
);
       
        foreach(
$columns as $col )
        {
           
$val = NULL;
            switch(
$col )
            {
                case
'last_visit':
                case
'last_post':
                   
$val = ( ! empty( $member->$col ) ) ? \IPS\DateTime::ts( $member->$col )->rfc3339() : NULL;
                break;
                case
'joined':
                   
$val = $member->joined->rfc3339();
                break;
                default:
                   
$val = (string) $member->$col;
                break;
            }
           
           
$return['core'][ $col ] = $val;
        }
       
       
/* Known IP addresses stored */
       
$return['known_ip_addresses'] = array_keys( $member->ipAddresses() );
       
       
/* Devices used */
       
$devices = new \IPS\Patterns\ActiveRecordIterator( \IPS\Db::i()->select( '*', 'core_members_known_devices', array( 'member_id=? AND last_seen>?', $member->member_id, ( new \DateTime )->sub( new \DateInterval( \IPS\Member\Device::LOGIN_KEY_VALIDITY ) )->getTimestamp() ), 'last_seen DESC' ), 'IPS\Member\Device' );

        foreach (
$devices as $device )
        {
            try
            {
               
$log = \IPS\Db::i()->select( '*', 'core_members_known_ip_addresses', array( 'member_id=? AND device_key=?', \IPS\Member::loggedIn()->member_id, $device->device_key ), 'last_seen DESC' )->first();
            }
            catch ( \
UnderflowException $e )
            {
                continue;
            }
           
           
$return['known_browsers'][] = array(
               
'useragent' => $device->userAgent()->browser . ' ' . $device->userAgent()->browserVersion,
               
'last_seen' => \IPS\DateTime::ts( $log['last_seen'] )->rfc3339()
            );
        }
       
       
/* Accepted T&S */
       
foreach( \IPS\Db::i()->select( '*', 'core_member_history', array( 'log_app=? and log_member=? and log_type=?', 'core', $member->member_id, 'terms_acceptance' ) ) as $row  )
        {
           
$data = json_decode( $row['log_data'], TRUE );
            if ( ! empty(
$data['type'] ) )
            {
               
$return['terms_accepted'][ $data['type'] ][] = \IPS\DateTime::ts( $row['log_date'] )->rfc3339();
            }
        }
       
       
/* Accepted Bulk Email */
       
foreach( \IPS\Db::i()->select( '*', 'core_member_history', array( 'log_app=? and log_member=? and log_type=?', 'core', $member->member_id, 'admin_mails' ) ) as $row  )
        {
           
$data = json_decode( $row['log_data'], TRUE );
           
$return['bulk_mail_optins'][] = array(
               
'enabled' => (boolean) $data['enabled'],
               
'date'    => \IPS\DateTime::ts( $row['log_date'] )->rfc3339()
            );
        }
       
        return
$return;
    }
   
}