Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/organization.php
<?php 
/******************************************************************************
 * Klasse fuer Datenbanktabelle adm_organizations
 *
 * 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 Objekt einer Organisation zu erstellen. 
 * Eine Organisation kann ueber diese Klasse in der Datenbank verwaltet werden
 *
 * Folgende Methoden stehen neben den Standardmethoden aus der table_access_class zur Verfuegung:
 *
 * getPreferences()       - gibt ein Array mit allen organisationsspezifischen Einstellungen
 *                          aus adm_preferences zurueck
 * setPreferences($preferences, $update = true)
 *                        - schreibt alle Parameter aus dem uebergebenen Array
 *                          zurueck in die Datenbank, dabei werden nur die veraenderten oder
 *                          neuen Parameter geschrieben
 * getReferenceOrganizations($child = true, $parent = true)
 *                        - Gibt ein Array mit allen Kinder- bzw. Elternorganisationen zurueck
 * isChildOrganization($organization)
 *                        - prueft ob die uebergebene Orga Kind der aktuellen Orga ist
 * hasChildOrganizations()- prueft, ob die Orga Kinderorganisationen besitzt
 *
 *****************************************************************************/

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

class Organization extends TableOrganizations
{
    protected $b_check_childs;        // Flag, ob schon nach Kinderorganisationen gesucht wurde
    protected $child_orgas = array(); // Array mit allen Kinderorganisationen
    
    // Konstruktor
    public function __construct(&$db, $organization = '')
    {
        parent::__construct($db, $organization);
    }
    
    // interne Funktion, die spezielle Daten des Organizationobjekts loescht
    public function clear()
    {
        parent::clear();

        $this->b_check_childs = false;
        $this->child_orgas    = array();
    }
        
    // gibt ein Array mit allen organisationsspezifischen Einstellungen
    // aus adm_preferences zurueck
    public function getPreferences()
    {
        $sql    = 'SELECT * FROM '. TBL_PREFERENCES. '
                    WHERE prf_org_id = '. $this->getValue('org_id');
        $result = $this->db->query($sql);

        $preferences = array();
        while($prf_row = $this->db->fetch_array($result))
        {
            $preferences[$prf_row['prf_name']] = $prf_row['prf_value'];
        }
        
        return $preferences;
    }
    
    // die Methode schreibt alle Parameter aus dem uebergebenen Array
    // zurueck in die Datenbank, dabei werden nur die veraenderten oder
    // neuen Parameter geschrieben
    // $update : bestimmt, ob vorhandene Werte aktualisiert werden
    public function setPreferences($preferences, $update = true)
    {
        $db_preferences = $this->getPreferences();

        foreach($preferences as $key => $value)
        {
            if(array_key_exists($key, $db_preferences))
            {
                if($update == true
                && $value  != $db_preferences[$key])
                {
                    // Pref existiert in DB, aber Wert hat sich geaendert
                    $sql = 'UPDATE '. TBL_PREFERENCES. ' SET prf_value = "'.$value.'"
                             WHERE prf_org_id = '. $this->getValue('org_id'). '
                               AND prf_name   = "'.$key.'" ';
                    $this->db->query($sql);
                }
            }
            else
            {
                // Parameter existiert noch nicht in DB
                $sql = 'INSERT INTO '. TBL_PREFERENCES. ' (prf_org_id, prf_name, prf_value)
                        VALUES   ('. $this->getValue('org_id'). ', "'.$key.'", "'.$value.'") ';
                $this->db->query($sql);
            }
        }
    }
    
    // gibt ein Array mit allen Kinder- bzw. Elternorganisationen zurueck
    // Ueber die Variablen $child und $parent kann die ermittlen der 
    // Eltern bzw. Kinderorgas deaktiviert werden
    //
    // org_id ist der Schluessel und org_shortname der Wert des Arrays
    // falls $longname = true gesetzt ist, ist org_longname der Wert des Arrays
    public function getReferenceOrganizations($child = true, $parent = true, $longname = false)
    {
        $arr_child_orgas = array();
    
        $sql = 'SELECT * FROM '. TBL_ORGANIZATIONS. '
                 WHERE ';
        if($child == true)
        {
            $sql .= ' org_org_id_parent = '. $this->getValue('org_id');
        }
        if($parent == true
        && $this->getValue('org_org_id_parent') > 0)
        {
            if($child == true)
            {
                $sql .= ' OR ';
            }
            $sql .= ' org_id = '. $this->getValue('org_org_id_parent');
        }
        $this->db->query($sql);
        
        while($row = $this->db->fetch_array())
        {
            if($longname == true)
            {
                $arr_child_orgas[$row['org_id']] = $row['org_longname'];
            }
            else
            {
                $arr_child_orgas[$row['org_id']] = $row['org_shortname'];
            }
        }
        return $arr_child_orgas;
    }
    
    // prueft, ob die uebergebene Orga (ID oder Shortname) ein Kind
    // der aktuellen Orga ist
    public function isChildOrganization($organization)
    {
        if($this->b_check_childs == false)
        {
            // Daten erst einmal aus DB einlesen
            $this->child_orgas = $this->getReferenceOrganizations(true, false);
            $this->b_check_childs = true;
        }
        
        if(is_numeric($organization))
        {
            // org_id wurde uebergeben
            $ret_code = array_key_exists($organization, $this->child_orgas);
        }
        else
        {
            // org_shortname wurde uebergeben
            $ret_code = in_array($organization, $this->child_orgas);
        }
        return $ret_code;
    }
    
    // prueft, ob die Orga Kinderorganisationen besitzt
    public function hasChildOrganizations()
    {
        if($this->b_check_childs == false)
        {
            // Daten erst einmal aus DB einlesen
            $this->child_orgas = $this->getReferenceOrganizations(true, false);
            $this->b_check_childs = true;
        }

        if(count($this->child_orgas) > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
?>
Return current item: Admidio