Files
thetool/application/Contractconfig/hooks/Voicenumberblock.php
2023-03-01 17:01:49 +01:00

124 lines
3.7 KiB
PHP

<?php
class Contractconfig_Hook_Voicenumberblock extends Contractconfig_Hook {
protected $required_product_attributes = ["needs_number"];
private $voip_routing;
/*
* Checks to determine if class needs to work on contract.
*/
public function isResponsible() {
/*
* Test for standard checks
* (Only Producttech attributes for now)
*/
if(!parent::isResponsible()) {
return false;
}
// do additional checks
//$contract = $this->contract;
return true;
}
public function init() {
// get voip routing for number
if(is_array($this->contract->configvalues)) {
// look in contract config
if(array_key_exists("voip_routing",$this->contract->configvalues) && $this->contract->configvalues['voip_routing']->value->string) {
$this->voip_routing = $this->contract->configvalues['voip_routing']->value->string;
} else {
// else take first value (default)
$typedata = $this->voip_routing = $this->contract->configvalues['voip_routing']->getTypedataArray();
$this->voip_routing = $typedata[0];
}
}
}
public function beforeSave() {
}
public function afterSave() {
// check if number was saved
if(!array_key_exists("voicenumber", $this->configitems)) {
echo "configitem voicenumber does not exists\n";
return true;
}
echo "configitem voicenumber exists\n";
$item = $this->configitems['voicenumber'];
$number = $item->value->string;
if(!$number) {
echo "Keine nummer gespeichert\n";
return true;
}
echo "Nummer: $number\n";
// check if Voicenumber exists
$voicenumberblock = Voicenumberblock::findBlock($number);
if(!$voicenumberblock) {
$this->errors[] = "Ungültige Rufnummer: Kein aktiver Rufnummernblock gefunden";
echo "Voicenumberblock für $number nicht gefunden\n";
}
if(!$voicenumberblock->isNumberInBlock($number)) {
$this->errors[] = "Ungültige Rufnummer: Bitte Rufnummernlänge kontrollieren! Block erlaubt ".$voicenumberblock->first ." bis ".$voicenumberblock->last;
echo "Voicenumber $number not in Block ".$voicenumberblock->prefix."\n";
return false;
}
$voicenumber = VoicenumberModel::getFirst(['number' => $number]);
if($voicenumber) {
// check if number belongs to another contract
if($voicenumber->contract_id) {
if($voicenumber->contract_id == $this->contract->id) {
// belongs to our contract already => no changes needed
return true;
}
$this->errors[] = "Ungültige Rufnummer: Rufnummer gehört zu bestehendem contract ".$voicenumber->contract_id;
return false;
}
// check if number is locked
if($voicenumber->disabled) {
$this->errors[] = "Ungültige Rufnummer: Rufnummer ist gesperrt ".$voicenumber->contract_id;
return false;
}
// check if number was ported out
if($voicenumber->ported_out) {
$this->errors[] = "Ungültige Rufnummer: Rufnummer wurde rausportiert ".$voicenumber->contract_id;
return false;
}
} else {
echo "creating voicenumber $number in block ".$voicenumberblock->prefix."\n";
$voicenumber = VoicenumberModel::create([
'voicenumberblock_id' => $voicenumberblock->id,
"contract_id" => $this->contract->id,
'active' => 1,
'activated_date' => date('U'),
'routing' => $this->voip_routing,
'number' => $number,
'disabled' => 0
]);
if(!$voicenumber->save()) {
echo "Error saving new number\n";
}
return true;
}
}
public function beforeDelete() {
}
public function afterDelete() {
}
}