Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/table_user_data.php
<?php
/******************************************************************************
 * Klasse fuer den Zugriff auf die Datenbanktabelle adm_user_data
 *
 * Copyright    : (c) 2004 - 2011 The Admidio Team
 * Homepage     : http://www.admidio.org
 * License      : GNU Public License 2 http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Diese Klasse dient dazu einen Userdatenobjekt zu erstellen.
 * Userdaten koennen ueber diese Klasse in der Datenbank verwaltet werden.
 * Dazu werden die Userdaten sowie der zugehoerige Feldkonfigurationen
 * ausgelesen. Geschrieben werden aber nur die Userdaten
 *
 * Neben den Methoden der Elternklasse TableAccess, stehen noch zusaetzlich
 * folgende Methoden zur Verfuegung:
 *
 * clearFieldData() - es werden nur die Daten der Tabelle adm_user_data entfernt
 *                    die Kategorie und adm_user_field bleiben erhalten
 *
 *****************************************************************************/

require_once(SERVER_PATH. '/adm_program/system/classes/table_access.php');

class TableUserData extends TableAccess
{
    protected $noValueCheck;    // = true, dann werden bei setValue die Werte nicht auf Gueltigkeit geprueft
    
    // Konstruktor
    public function __construct(&$db)
    {
        $this->noValueCheck = false;
        parent::__construct($db, TBL_USER_DATA, 'usd');
    }
    
    // Userdaten mit den Profilfeldinformationen aus der Datenbank auslesen
    // ids : Array mit den Schlüsseln usr_id und usf_id
    // sql_where_condition : optional eine individuelle WHERE-Bedinugung fuer das SQL-Statement
    // sql_additioinal_tables : wird nicht verwendet (benötigt wegen Vererbung)
    public function readData($ids, $sql_where_condition = '', $sql_additional_tables = '')
    {
        $returnCode = false;

        if(is_array($ids) && is_numeric($ids['usr_id']) && is_numeric($ids['usf_id']))
        {
            $tables = TBL_USER_FIELDS;
            if(strlen($sql_where_condition) > 0)
            {
                $sql_where_condition = $sql_where_condition . ' AND ';
            }
            $sql_where_condition .= ' AND usd_usr_id = '. $ids['usr_id']. '
                                       AND usd_usf_id = '. $ids['usf_id']. '
                                       AND usd_usf_id = usf_id ';
            $returnCode = parent::readData(0, $sql_where_condition, $tables);
            
            $this->setValue('usd_usr_id', $ids['usr_id']);
            $this->setValue('usd_usf_id', $ids['usf_id']);
        }
        $this->noValueCheck = false;
        return $returnCode;
    }
    
    // es werden nur die Daten der Tabelle adm_user_data entfernt
    // die Kategorie und adm_user_field bleiben erhalten
    public function clearFieldData()
    {
        foreach($this->dbColumns as $name => $value)
        {
            if(strpos($name, 'usd') !== false)
            {
                $this->dbColumns[$name] = '';
                $this->columnsInfos[$name]['changed'] = false;
                $this->new_record = false;
            }
        }
    }
    
    // Methode formatiert bei Datumsfeldern in das eingestellte Datumsformat
    public function getValue($field_name, $format = '')
    {
        $value = parent::getValue($field_name, $format);

        if($field_name == 'usd_value')
        {
            if($this->dbColumns['usf_type'] == 'DATE' && strlen($format) > 0 && strlen($value) > 0)
            {
                // ist das Feld ein Datumsfeld, dann das Datum formatieren
                $date = new DateTimeExtended($value, 'Y-m-d', 'date');
                if($date->valid() == false)
                {
                    return $value;
                }
                $value = $date->format($format);
            }
            elseif($this->dbColumns['usf_name_intern'] == 'COUNTRY' && strlen($value) > 0)
            {
                // beim Land die sprachabhaengige Bezeichnung auslesen
                global $g_l10n;
                $value = $g_l10n->getCountryByCode($value);
            }
        }
        return $value;
    }

    // bei setValue werden die Werte nicht auf Gueltigkeit geprueft
    public function noValueCheck()
    {
        $this->noValueCheck = true;
    }

    // prueft die Gueltigkeit der uebergebenen Werte und nimmt ggf. Anpassungen vor
    public function setValue($field_name, $field_value)
    {
        global $g_preferences;

        if($field_name == 'usd_value' && strlen($field_value) > 0)
        {
            if($this->dbColumns['usf_type'] == 'CHECKBOX')
            {
                // Checkbox darf nur 1 oder 0 haben
                if($field_value != 0 && $field_value != 1 && $this->noValueCheck != true)
                {
                    return false;
                }
            }
            elseif($this->dbColumns['usf_type'] == 'DATE')
            {
                // Datum muss gueltig sein und formatiert werden
                $date = new DateTimeExtended($field_value, $g_preferences['system_date'], 'date');
                if($date->valid() == false)
                {
                    if($this->noValueCheck != true)
                    {                        
                        return false;
                    }
                }
                else
                {
                    $field_value = $date->format('Y-m-d');
                }
            }
            elseif($this->dbColumns['usf_type'] == 'EMAIL')
            {
                // Email darf nur gueltige Zeichen enthalten und muss einem festen Schema entsprechen
                $field_value = admStrToLower($field_value);
                if (!strValidCharacters($field_value, 'email') && $this->noValueCheck != true)
                {
                    return false;
                }
            }
            elseif($this->dbColumns['usf_type'] == 'NUMERIC')
            {
                // Zahl muss numerisch sein
                if(is_numeric(strtr($field_value, ',.', '00')) == false && $this->noValueCheck != true)
                {
                    return false;
                }
            }
            elseif($this->dbColumns['usf_type'] == 'URL')
            {
                // Homepage darf nur gueltige Zeichen enthalten
                if (!strValidCharacters($field_value, 'url') && $this->noValueCheck != true)
                {
                    return false;
                }
                // Homepage noch mit http vorbelegen
                if(strpos(admStrToLower($field_value), 'http://')  === false
                && strpos(admStrToLower($field_value), 'https://') === false )
                {
                    $field_value = 'http://'. $field_value;
                }
            }

        }
        return parent::setValue($field_name, $field_value);
    } 
}
?>
Return current item: Admidio