Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/table_members.php
<?php
/******************************************************************************
 * Klasse fuer den Zugriff auf die Datenbanktabelle adm_members
 *
 * 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 ein Memberobjekt zu erstellen. 
 * Eine Mitgliedschaft kann ueber diese Klasse in der Datenbank verwaltet werden
 *
 * Neben den Methoden der Elternklasse TableAccess, stehen noch zusaetzlich
 * folgende Methoden zur Verfuegung:
 *
 * startMembership($rol_id, $usr_id, $leader = "")
 *                      - Methode setzt alle notwendigen Daten um eine 
 *                        Mitgliedschaft zu beginnen bzw. zu aktualisieren
 * stopMembership($rol_id, $usr_id)
 *                      - Methode setzt alle notwendigen Daten um eine 
 *                        Mitgliedschaft zu beginnen
 *
 *****************************************************************************/

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

class TableMembers extends TableAccess
{
    // Konstruktor
    public function __construct(&$db)
    {
        parent::__construct($db, TBL_MEMBERS, 'mem');
    }
    

    // liest den Datensatz mit den ids rol_id und usr_id ein
    // die Methode gibt true zurueck, wenn ein DS gefunden wurde, andernfalls false
    // ids : Array mit den Schl�sseln rol_id und usr_id  Bsp.: array('rol_id'=>xy, 'usr_id'=>yx)
    // 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['rol_id']) && is_numeric($ids['usr_id']))
        {
            if(strlen($sql_where_condition) > 0)
            {
                $sql_where_condition .= ' AND ';
            }
            $sql_where_condition .= '    mem_rol_id = '.$ids['rol_id'].'
                                     AND mem_usr_id = '.$ids['usr_id'];
            $returnCode = parent::readData(0, $sql_where_condition);

            $this->setValue('mem_rol_id', $ids['rol_id']);
            $this->setValue('mem_usr_id', $ids['usr_id']);
        }
        return $returnCode;
    }       

    // Speichert die Mitgliedschaft und aktualisiert das
    public function save($updateFingerPrint = true)
    {
        global $g_current_session;
        $fields_changed = $this->columnsValueChanged;
        
        parent::save($updateFingerPrint);
        
        if($fields_changed && is_object($g_current_session))
        {
            // einlesen des entsprechenden Userobjekts, da Aenderungen 
            // bei den Rollen vorgenommen wurden 
            $g_current_session->renewUserObject($this->getValue('mem_usr_id'));
        }
    } 
    
    // Methode setzt alle notwendigen Daten um eine Mitgliedschaft zu beginnen bzw. zu aktualisieren
    public function startMembership($rol_id, $usr_id, $leader = '')
    {
        if($this->getValue('mem_rol_id') != $rol_id
        || $this->getValue('mem_usr_id') != $usr_id)
        {
            $this->readData(array('rol_id' => $rol_id, 'usr_id' => $usr_id));
        }

        // Beginn nicht ueberschreiben, wenn schon existiert
        if(strlen($this->getValue('mem_begin')) == 0)
        {
            $this->setValue('mem_begin', DATE_NOW);
        }
        // Leiter sollte nicht ueberschrieben werden, wenn nicht uebergeben wird
        if(strlen($leader) == 0)
        {
            if($this->new_record == true)
            {
                $this->setValue('mem_leader', 0);
            }
        }
        else
        {
            $this->setValue('mem_leader', $leader);
        }

        $this->setValue('mem_end', '9999-12-31');
        $this->save();
    }

    // Methode setzt alle notwendigen Daten um eine Mitgliedschaft zu beenden
    public function stopMembership($rol_id, $usr_id)
    {
        if($this->getValue('mem_rol_id') != $rol_id
        || $this->getValue('mem_usr_id') != $usr_id)
        {
            $this->readData(array('rol_id' => $rol_id, 'usr_id' => $usr_id));
        }

        if($this->new_record == false)
        {
            // einen Tag abziehen, damit User direkt aus der Rolle entfernt werden
            $newEndDate = date('Y-m-d', time() - (24 * 60 * 60));
            $this->setValue('mem_end', $newEndDate);
            
            //ggf. Leiterschaftbeenden
            if($this->getValue('mem_leader')==1)
            {
            	$this->setValue('mem_leader', 0);
            }
            
            //speichern
            $this->save();
        }
    }
}
?>
Return current item: Admidio