Select Git revision
class.Groups.php
Leif Andersson authored
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()); }
}
}
?>