e107inc/e107

View on GitHub
e107_plugins/import/import_user_class.php

Summary

Maintainability
A
1 hr
Test Coverage
F
0%
<?php
/*
 * e107 website system
 *
 * Copyright (C) 2008-2009 e107 Inc (e107.org)
 * Released under the terms and conditions of the
 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 *
 *
 *
 * $Source: /cvs_backup/e107_0.8/e107_plugins/import/import_user_class.php,v $
 * $Revision$
 * $Date$
 * $Author$
 */

/*
Class intended to simplify importing of user information from outside.
It ensures that each user record has appropriate defaults

To use:
    1. Create one instance of the class
    2. Call emptyUserDB() to delete existing users
    3. If necessary, call overrideDefault() as necessary to modify the defaults
    4. For each record:
        a) Call getDefaults() to get a record with all the defaults filled in
        b) Update the record from the source database
        c) Call saveUser($userRecord) to write the record to the DB
*/

class user_import
{
    var $userDB = NULL;
    var $blockMainAdmin = TRUE;
    var $error;

// Every field must be in exactly one of the arrays $userDefaults, $userSpecial, $userMandatory  
    var $userDefaults = array(
        'user_id'             => 0,
        'user_name'         => '',
        'user_loginname'    => '',
        'user_password'        => '',
        'user_customtitle'     => '',
        'user_sess'         => '',            // Photo
        'user_email'         => '',
        'user_signature'     => '',
        'user_image'         => '',            // Avatar
        'user_hideemail'     => 1,
        'user_join'            => 0,
        'user_realm'        => 0,
        'user_pwchange'        => 0,
        'user_lastvisit'     => 0,
        'user_currentvisit' => 0,
        'user_lastpost'     => 0,
        'user_chats'         => 0,
        'user_comments'     => 0,
        'user_ip'             => '',
        'user_ban'             => 0,
        'user_prefs'         => '',
     //    'user_viewed' => '',
        'user_visits'         => 0,
        'user_admin'         => 0,
        'user_login'        => '',            // User real name
        'user_class'         => '',
        'user_perms'         => '',
        'user_xup'             =>  ''
    );


  // Fields which are defaulted at save-time if not previously set
    var $userSpecial = array('user_join', 'user_realm', 'user_pwchange');

  // Fields which must be set up by the caller.  
    var $userMandatory = array(
        'user_name', 'user_loginname', 'user_password'
    );
      
    // Array is set up with the predefined extended fields which are actually in use
    var $actualExtended = array();


  // Constructor
    function __construct()
    {
        $this->userDB = new db;            // Have our own database object to write to the user table
        $this->actualExtended = e107::getUserExt()->getFieldNames(); // Create list of predefined extended user fields which are present
    }


  // Empty the user DB - by default leaving only the main admin.
    function emptyTargetDB($inc_admin = FALSE)
    {
        
        if ($inc_admin === TRUE)
        {
            $this->blockMainAdmin = FALSE;
            $delClause = '';
            $extClause = '';
        }
        else
        {
            $this->blockMainAdmin = TRUE;
            $delClause = 'user_id != 1 AND user_perms != "0" ';
            $extClause = 'user_extended_id != 1';
        }

        if($this->userDB->delete('user',$delClause))
        {
            e107::getMessage()->addDebug("Emptied User table");    
        }
        
        if($this->userDB->delete('user_extended',$extClause))
        {
            e107::getMessage()->addDebug("Emptied User-extended table");    
        }
    }
  
  
  // Set a new default for a particular field
    function overrideDefault($key, $value)
    {
        //    echo "Override: {$key} => {$value}<br />";
        if (!isset($this->userDefaults[$key])) return FALSE;
        $this->userDefaults[$key] = $value;
    }

  
  // Returns an array with all relevant fields set to the current default
    function getDefaults()
    {
        return $this->userDefaults;
    }


    // Vet a user or login name. If OK, always returns the name.
    // On error, if $just_strip true, returns 'processed' name; otherwise returns FALSE
    function vetUserName($name, $just_strip = FALSE)
    {
        $temp_name = trim(preg_replace('/&nbsp;|\#|\=|\$/', "", strip_tags($name)));
        if (($temp_name == $name) || $just_strip) return $temp_name;
        return FALSE;
    }


    // Add a user record to the DB - pass array as parameter. 
    // Returns an error code on failure. TRUE on success
    function saveData($userRecord)
    {
        if ($this->blockMainAdmin && isset($userRecord['user_id']) && ($userRecord['user_id'] == 1))
        {
            e107::getMessage()->addDebug("Skipping user record of main-admin");
            return true;
            // return 1;
        }
        
        $extendedFields = array();
        $userFields     = array_keys($this->userDefaults);
        
        foreach ($userRecord as $k => $v)
        {
            if (!in_array($k, $userFields)) // Not present in e107_user table. 
            {
                if (in_array($k,$this->actualExtended)) // Present in e107_user_extended table. 
                {
                     $extendedFields[$k] = $v;        // Pull out any extended field values which are needed
                }
                else 
                {
                    e107::getMessage()->addDebug("Removing user-field due to missing user-extended field {$k} ");    
                }            
                
                unset($userRecord[$k]);            // And always delete from the original data record
            }
        }
                
        foreach ($userRecord as $k => $v) // Check only valid fields being passed
        {    
              if (!array_key_exists($k,$this->userDefaults) && !in_array($k,$this->userSpecial) && !in_array($k,$this->userMandatory)   )         //
            {
                e107::getMessage()->addDebug("Failed on {$k} => {$v} ");
                  return 2;
            }
        }
        // Check user names for invalid characters
        $userRecord['user_name'] = $this->vetUserName($userRecord['user_name'],FALSE);
        $userRecord['user_loginname'] = $this->vetUserName($userRecord['user_loginname'],FALSE);
        
        if (($userRecord['user_name'] === FALSE) || ($userRecord['user_name'] === FALSE))
        {
            e107::getMessage()->addDebug("user_name was empty");
            return 5;
        }
        
        if (trim($userRecord['user_name']) == '') $userRecord['user_name'] = trim($userRecord['user_loginname']);
        if (trim($userRecord['user_loginname']) == '') $userRecord['user_loginname'] = trim($userRecord['user_name']);
        
        foreach ($this->userMandatory as $k)
        {
            if (!isset($userRecord[$k]))
            {
                e107::getMessage()->addDebug("Failed userMandatory on {$k}");
                return 3;
            }
            
            //if (strlen($userRecord[$k]) < 3)
        //    {
            //    e107::getMessage()->addDebug("Failed userMandatory length on {$k}");
                // return 3;
        //    }
        }
        
        if (!isset($userRecord['user_join'])) $userRecord['user_join'] = time();
        
        $userRecord['user_realm']         = '';        // Never carry across these fields
        $userRecord['user_pwchange']     = 0;
    
        if(!$result = $this->userDB->replace('user',$userRecord))
        {
             return 4;
        }
    
        if (count($extendedFields))
        {
            $extendedFields['user_extended_id'] = varset($userRecord['user_id'],0) ? $userRecord['user_id'] : $result;
            
            if($this->userDB->replace('user_extended',$extendedFields) === false)
            {
                e107::getMessage()->addDebug("Failed to insert extended fields: ".print_a($extendedFields));
                return 6;
            }

        }
        return TRUE;
    }
 

 
    function getErrorText($errnum)    // these errors are presumptuous and misleading. especially '4' .
    {
        $errorTexts = array(
            0 => LAN_CONVERT_57, 
            1 => LAN_CONVERT_58, 
            2 => LAN_CONVERT_59,
            3 => LAN_CONVERT_60, 
            4 => LAN_CONVERT_61, 
            5 => LAN_CONVERT_62,
            6 => LAN_CONVERT_63
        );
        
        if (isset($errorTexts[$errnum])) return $errorTexts[$errnum];
        return 'Unknown: '.$errnum;
    }
}




class userclass_import
{
    var $ucdb = null;
    var $blockMainAdmin = true;
    var $error;

    var $defaults = array(
        'userclass_id'              => 0,
        'userclass_name'            => 0,
        'userclass_description'     => 0,
        'userclass_editclass'       => 0,
        'userclass_parent'          => 0,
        'userclass_accum'           => 0,
        'userclass_visibility'      => 0,
        'userclass_type'            => 0,
        'userclass_icon'            => 0,
        'userclass_perms'           => 0,

    );

    // Fields which must be set up by the caller.
    var $mandatory = array(
        'userclass_name'
    );

    // Constructor
    function __construct()
    {
        $this->ucdb = e107::getDb('pagechapter');    // Have our own database object to write to the table
    }


    // Empty the  DB
    function emptyTargetDB($inc_admin = FALSE)
    {
        $this->ucdb->truncate('userclass_classes');

    }


    // Set a new default for a particular field
    function overrideDefault($key, $value)
    {
//    echo "Override: {$key} => {$value}<br />";
        if (!isset($this->defaults[$key])) return FALSE;
        $this->defaults[$key] = $value;
    }


  // Returns an array with all relevant fields set to the current default
    function getDefaults()
    {
        return $this->defaults;
    }

    /**
     * Insert data into e107 DB
     * @param row - array of table data
     * @return integer, boolean - error code on failure, TRUE on success
     */
    function saveData($row)
    {

        if(empty($row['userclass_name']))
        {
            return 3;
        }


        if(!$result = $this->ucdb->insert('userclass_classes',$row))
        {
             return 4;
        }

        //if ($result === FALSE) return 6;

        return true;
    }



    function getErrorText($errnum)    // these errors are presumptuous and misleading. especially '4' .
    {
        $errorTexts = array(
            0 => LAN_CONVERT_57, 
            1 => LAN_CONVERT_58, 
            2 => LAN_CONVERT_59,
            3 => LAN_CONVERT_60, 
            4 => LAN_CONVERT_61, 
            5 => LAN_CONVERT_62,
            6 => LAN_CONVERT_63
        );

        if (isset($errorTexts[$errnum])) return $errorTexts[$errnum];

        return $this->ucdb->getLastErrorText();

    }



}