Skip to content
Snippets Groups Projects
Select Git revision
  • 3b99f0ebacd4601cffbcc66be56d0df2dff28c93
  • master default
  • devel
3 results

class.Groups.php

Blame
  • class.Groups.php 7.03 KiB
    <?php
    
    class Groups {
    
      private static $queryList = <<<EOS
        select ID, Gruppnamn, GruppInfo from Grupper order by Gruppnamn
    EOS;
    
      private static $queryOne = <<<EOS
        select * from Grupper where ID = ?
    EOS;
    
      private static $queryMembership = <<<EOS
        select Grupper.ID, Gruppnamn from Grupper,GruppAdress where 
        GruppID = Grupper.ID and Adressid = ? order by Gruppnamn
    EOS;
    
      private static $querySetGroup = <<<EOS
        replace into GruppAdress set AdressID = ?, GruppID = ?
    EOS;
    
      private static $queryUnsetGroup = <<<EOS
        delete from GruppAdress where AdressID = ? and GruppID = ?
    EOS;
    
      private static $queryMail = <<<EOS
        select Epost from Adresser, GruppAdress where
        Adresser.ID = AdressID and GruppID = ?
    EOS;
    
    /*   private static $queryUpdate = <<<EOS */
    /*     update Grupper set where ID = ? */
    /* EOS; */
    
      private static $queryRemoveGruppadress = <<<EOS
        delete from GruppAdress where AdressID = ?
    EOS;
        
      //public static $groupFields = array('ID', 'Gruppnamn', 'GruppInfo');
      public static $groupFields;
      private static $buttonFields = array('change','print','ICE');
    
      private static $instance;
    
      private static $list = array();
    
      public function __construct($param = NULL) {
        //   global $gCms; if (!isset($gCms)) exit;
        if (!isset(self::$groupFields)) {
          self::$groupFields = AddressDB::getFields('Grupper');
        }
        foreach (self::$groupFields as $field) {$this->$field = '';}
        foreach (self::$buttonFields as $field) {$this->$field = '';}
        if (is_null($param)) return;
        if (is_array($param)) {
          foreach (self::$groupFields as $field) {
    	$this->$field = $param[$field];
          }
          return;
        }
        $db = AddressDB::getDB();
        $result = $db->Execute(self::$queryOne,array($param));
        if ($result === false) { die("Database error!<br>" . $db->ErrorMsg());}
        $count = $result->RecordCount();
        switch ($count) {
        case 0:
          die(sprintf('Bad group ID %s'.PHP_EOL,$param[0]));
          break;
        case 1:
          $row = $result->FetchRow();
          foreach (self::$groupFields as $field) {
    	if (isset($row[$field])) $this->$field = $row[$field];
          }
          break;
        default:
          die(sprintf(
             'Strange error. Exactly one group record expected for key %s',
             $ID));
        }
      }
    
      private function createRecord() {
        $db = AddressDB::getDB();
        $query = 'insert into Grupper set Gruppnamn = ""';
        $result = $db->Execute($query,array());
        if ($result === false) {die("Database error!<br>" . $publDB->ErrorMsg()); }
        $this->ID = $db->Insert_ID();
      }
     
      public function updateRecord() {
        //global $gCms; if (!isset($gCms)) exit;
        $db = AddressDB::getDB();
        if ($this->ID == '') { $this->createRecord(); }
    
        $query = 'update Grupper set ';
        $qfields = array(); $values = array();
        foreach (self::$groupFields as $field) {
          if ($field == 'ID') continue;
          $val = trim($this->$field);
          if (strlen($val) == 0) $val = null;
          $qfields[] = sprintf('%s = ?',$field);
          $values[] = $val;
        }
        $values[] = $this->ID;
        $query .= join(', ',$qfields) . ' where ID=?';
        $result = $db->Execute($query,$values);
        if ($result === false) {die("Database error!<br>" . $db->ErrorMsg());}
      }
     
      public static function getGroupList() {
        if (count(self::$list) > 0) return self::$list;
        //    global $gCms; if (!isset($gCms)) exit;
        $c = __CLASS__;
        $db = AddressDB::getDB();
        //    echo '<pre>'; print_r($db); echo '</pre>'; 
        $result = $db->Execute(self::$queryList,array());
        //echo '<pre>'; print_r($result); echo '</pre>'; 
        if ($result === false) { die("Database error!<br>" . $db->ErrorMsg());}
        while ($row = $result->FetchRow()) {
          //    echo '<pre>'; print_r($row); echo '</pre>'; 
          self::$list[] = new $c($row);
        }
        //echo '<pre>'; print_r(self::$list); echo '</pre>'; 
    
        return self::$list;
      }
    	
      /*   global $gCms; */
      /*   if (!isset($gCms)) exit; */
      /*   $ADB = AddressDB::getDB(); */
      /*   $result = $ADB->Execute(self::$queryList,array()); */
      /*   while ($row = $result->FetchRow()) { */
      /*     $this->list[$row['Gruppnamn']] = $row['ID']; */
      /*   } */
      /* } */
      
      public static function getMembers($GruppID) {
        //global $gCms; if (!isset($gCms)) exit;
        $db = AddressDB::getDB();
        $result = $db->Execute(self::$queryMembership,array($GruppID));
        if ($result === false) { die("Database error!<br>" . $db->ErrorMsg()); }
        $list = array();
        while ($row = $result->FetchRow()) {
          $list[$row['Gruppnamn']] = $row['ID'];
        }
        return $list;
      }
    
      public static function getNonMembers($GruppID) {
        $members = self::getMembers($GruppID);
        $allgroups = array();
        self::getGroupList();
        foreach (self::$list as $group) {
          $allgroups[$group->Gruppnamn] = $group->ID;
        }
        $nonmembers = array_diff_assoc($allgroups,$members);
        return $nonmembers;
      }
        
      public static function setMember($ID,$GroupID) {
        //global $gCms; if (!isset($gCms)) exit;
        $db = AddressDB::getDB();
        $values = array($ID, $GroupID);
        $result = $db->Execute(self::$querySetGroup,$values);
        if ($result === false) {die("Database error!<br>" . $db->ErrorMsg()); }
      }  
    
      public static function unsetMember($ID,$GroupID) {
        //global $gCms; if (!isset($gCms)) exit;
        $db = AddressDB::getDB();
        $values = array($ID, $GroupID);
        //   echo '<pre>'; print_r($queryUnsetGroup); print_r($values); echo '</pre>';exit;
        
        $result = $db->Execute(self::$queryUnsetGroup,$values);
        if ($result === false) {die("Database error!<br>" . $db->ErrorMsg()); }
      }  
    
      public static function setMailLists() {
        // This function should be inactivated.
        return;
        //global $gCms; if (!isset($gCms)) exit;
        $config =& $gCms->GetConfig();
        $maildir = $config['root_path'] . '/uploads/mailinglists';
        $db = AddressDB::getDB();
        $groups = self::getGroupList();
        //if(!is_dir(self::$maildir)) mkdir(self::$maildir,'0755',true);
        foreach ($groups as $group) {
          $pos = strrpos($group->Gruppnamn, '.dis');
          if ($pos === false) continue;
          $epost = array();
          $values = array($group->ID);
          $result = $db->Execute(self::$queryMail,$values);
          if ($result === false) { die("Database error!<br>" . $db->ErrorMsg()); }
          while ($row = $result->FetchRow()) {
            if (!$row['Epost']) continue;
            $epost[] = $row['Epost'];
          }
          if (count($epost) > 0) {
            //	echo '<pre>'; print_r($epost); echo '</pre>';
            $filename  = $maildir . '/' . $group->Gruppnamn;
            $file = fopen($filename,'w');
            if ($file === false) die('Cannot write '.$filename);
            foreach ($epost as $line) fwrite($file,$line.PHP_EOL);
            fclose($file);
          }
        }
      }
      
      public static function removeAddress($AdressID = null) {
        //global $gCms; if (!isset($gCms)) exit;
        $db = AddressDB::getDB();
        if (is_null($AdressID))
          die('Strange error in removeAddress. No ID.'.PHP_EOL);
        $values = array($AdressID);
        $result = $db->Execute(self::$queryRemoveGruppadress,$values);
        if (!$result) { die("Database error!<br>" . $db->ErrorMsg()); }
      }
    }
    ?>