Select Git revision
class.Person.php
Leif Andersson authored
class.Person.php 5.36 KiB
<?php
class Person {
private static $queryPersons = <<<EOT
select distinct Adresser.ID, concat(Fornamn, ' ', Efternamn) as Namn,
case when SkolaForetag is not null then SkolaForetag
when Adress is not null then Adress else Hem end as ForetagAdress,
Avdelning from Adresser,GruppAdress where
EOT;
private static $queryOne = <<<EOT
select * from Adresser where ID=?
EOT;
private static $queryGroups = <<<EOT
SELECT Grupper.ID,Gruppnamn FROM `Grupper`, GruppAdress WHERE
Grupper.ID=GruppID and AdressID = ?
EOT;
/* private static $queryUpdate = <<<EOT */
/* update Adresser set */
/* EOT; */
public static $firstFields = array(
'ID','fornamn', 'efternamn', 'foretag','avdelning', 'adress', 'Grupp');
private static $personFields = array(
'ID', 'Fornamn', 'Efternamn', 'Titel', 'Personnummer', 'SkolaForetag',
'Avdelning', 'Adress', 'Besok', 'Hem', 'Epost', 'Telefon', 'TelefonMobil',
'TelefonHem', 'URL', 'AnknytningTillInst', 'DiverseInfo', 'Andrad');
public function __construct($param = NULL) {
global $gCms;
if (!isset($gCms)) exit;
foreach(self::$personFields as $field) {
$this->$field = '';
}
$this->Namn = ''; $this->ForetagAdress = '';
$this->Grupper = array();
if (is_null($param)) return;
if (is_array($param)) {
if (isset($param['ID'])) $this->fromDB($param['ID']);
foreach (self::$personFields as $field) {
if ($field == 'ID') continue;
if (isset($param[$field])) $this->$field = $param[$field];
}
return;
}
$this->fromDB($param);
}
private function fromDB($adressID) {
global $gCms; if (!isset($gCms)) exit;
$db = AddressDB::getDB();
$values = array($adressID);
$result = $db->Execute(self::$queryOne,$values);
if ($result === false) { die("Database error!<br>" . $db->ErrorMsg()); }
$count = $result->RecordCount();
switch ($count) {
case 0:
die(sprintf('Bad address ID %s'.PHP_EOL,$adressID));
break;
case 1:
$row = $result->FetchRow();
$nn = self::$personFields;
foreach ($nn as $field) {
if (isset($row[$field])) $this->$field = $row[$field];
}
break;
default:
die(sprintf(
'Strange error. Exactly one address record expected for key %s',
$authkey));
}
$this->getGroups($adressID);
}
private function getGroups($adressID) {
global $gCms; if (!isset($gCms)) exit;
$db = AddressDB::getDB();
$values = array($adressID);
$result = $db->Execute(self::$queryGroups,$values);
if (!$result) { die("Database error!<br>" . $db->ErrorMsg()); }
while($row = $result->FetchRow()) {
$this->Grupper[$row['Gruppnamn']] = $row['ID'];
}
}
private function createRecord() {
$db = AddressDB::getDB();
$query = 'insert into Adresser set Fornamn=?';
$values = array('Förnamn');
$result = $db->Execute($query,$values);
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();
$query = 'update Adresser set ';
$qfields = array(); $values = array();
if ($this->ID == '') { $this->createRecord(); }
foreach (self::$personFields as $field) {
if ($field == 'ID') continue;
if (!isset($this->$field)) $this->field = 'null';
$val = trim($this->$field);
if (strlen($val) == 0) $val = null;
$qfields[] = sprintf('%s = ?',$field);
$values[] = $val;
}
$values[] = $this->ID;
$query .= join(', ',$qfields) . ' where ID=?';
// echo '<pre>'; print_r($query); echo '</pre>';
// echo '<pre>'; print_r($values); echo '</pre>';
$result = $db->Execute($query,$values);
if ($result === false) {die("Database error!<br>" . $db->ErrorMsg());}
}
public static function searchPersons($formValues) {
global $gCms; if (!isset($gCms)) exit;
$andQuery = array(); $orQuery = '';
$andValues = array(); $orValues = array();
foreach ($formValues as $key => $value) {
switch ($key) {
case 'fornamn' :
$andQuery[] = 'Fornamn like ?';
$andValues[] = '%'.$value.'%';
break;
case 'efternamn':
$andQuery[] = 'Efternamn like ?';
$andValues[] = '%'.$value.'%';
break;
case 'foretag':
$andQuery[] = 'SkolaForetag like ?';
$andValues[] = '%'.$value.'%';
break;
case 'avdelning':
$andQuery[] = 'Avdelning like ?';
$andValues[] = '%'.$value.'%';
break;
case 'adress':
$andQuery[] = '(Adress like ? or Hem like ?)';
$andValues[] = '%'.$value.'%';
$andValues[] = '%'.$value.'%';
break;
case 'Grupp':
$andQuery[] = 'AdressID=Adresser.ID and GruppID = ?';
$andValues[] = $value;
break;
default:
}
$query = self::$queryPersons .' ' . join(' and ', $andQuery);
$values = $andValues;
}
// echo '<pre>'; echo $query; echo '</pre>';
// echo '<pre>'; print_r($values); echo '</pre>';
// return array();
$db = AddressDB::getDB();
$class = __CLASS__;
$records = array();
$result = $db->Execute($query,$values);
if (!$result) { die("Database error!<br>" . $db->ErrorMsg()); }
while ($row = $result->FetchRow()) {
$person = new $class();
foreach ($row as $key => $value) {
$person->$key = $value;
}
$records[] = $person;
}
return $records;
}
}
?>