169 lines
5.3 KiB
PHP
169 lines
5.3 KiB
PHP
<?php
|
|
|
|
require_once __DIR__."/Contractconfig_Hook.php";
|
|
|
|
class Contractconfig_Hook_Voicenumberblock extends Contractconfig_Hook {
|
|
protected $required_product_attributes = ["needs_number"];
|
|
private $voip_routing;
|
|
|
|
private $create_numbers = [];
|
|
/*
|
|
* 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() {
|
|
$this->errors["voicenumberblock_voicenumber"] = [];
|
|
|
|
|
|
// 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() {
|
|
return $this->checkNewNumbers();
|
|
}
|
|
|
|
public function afterSave() {
|
|
$this->checkNewNumbers();
|
|
|
|
if(count($this->errors["voicenumberblock_voicenumber"])) {
|
|
return false;
|
|
}
|
|
|
|
foreach($this->create_numbers as $voicenumberblock_id => $numbers) {
|
|
foreach($numbers as $number){
|
|
$voicenumber = VoicenumberModel::getFirst(['number' => $number]);
|
|
|
|
if(!$voicenumber) {
|
|
$this->log->debug("creating voicenumber $number in block ".$voicenumberblock->prefix);
|
|
$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()) {
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Error saving new number $number";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(count($this->errors["voicenumberblock_voicenumber"])) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* TODO: Check if contract was canceled, then set lock and lock_reason to reserved
|
|
* => should go into beforeCancel event
|
|
*/
|
|
public function checkNewNumbers() {
|
|
$this->log->debug(":: In Contractconfig_Hook_Voicenumberblock->afterSave()");
|
|
// check if number was saved
|
|
if(!array_key_exists("voicenumber", $this->configitems)) {
|
|
$this->log->debug("configitem voicenumber does not exists");
|
|
return true;
|
|
}
|
|
|
|
$item = $this->configitems['voicenumber'];
|
|
//var_dump($item);exit;
|
|
if($item->value->json) {
|
|
$numbers = json_decode($item->value->json);
|
|
}
|
|
|
|
if(!is_array($numbers) || !count($numbers)) {
|
|
return true;
|
|
}
|
|
foreach($numbers as $number) {
|
|
if(!$number) {
|
|
$this->log->debug("Keine nummer gespeichert");
|
|
continue;
|
|
}
|
|
$this->log->debug("Nummer: $number");
|
|
|
|
// check if Voicenumber exists
|
|
$voicenumberblock = Voicenumberblock::findBlock($number);
|
|
if(!$voicenumberblock) {
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Ungültige Rufnummer $number: Kein aktiver Rufnummernblock gefunden";
|
|
continue;
|
|
}
|
|
|
|
if(!$voicenumberblock->isNumberInBlock($number)) {
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Ungültige Rufnummer $number: Bitte Rufnummernlänge kontrollieren! Block erlaubt ".$voicenumberblock->first ." bis ".$voicenumberblock->last;
|
|
continue;
|
|
}
|
|
|
|
$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
|
|
continue;
|
|
}
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Ungültige Rufnummer $number: Rufnummer gehört zu bestehendem contract ".$voicenumber->contract_id;
|
|
continue;
|
|
}
|
|
// check if number is locked
|
|
if($voicenumber->disabled) {
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Ungültige Rufnummer $number: Rufnummer ist gesperrt ".$voicenumber->contract_id;
|
|
continue;
|
|
}
|
|
// check if number was ported out
|
|
if($voicenumber->ported_out) {
|
|
$this->errors["voicenumberblock_voicenumber"][] = "Ungültige Rufnummer $number: Rufnummer wurde rausportiert ".$voicenumber->contract_id;
|
|
continue;
|
|
}
|
|
} else {
|
|
if(!array_key_exists($voicenumberblock->id, $this->create_numbers)) {
|
|
$this->create_numbers[$voicenumberblock->id] = [];
|
|
}
|
|
$this->create_numbers[$voicenumberblock->id][] = $number;
|
|
}
|
|
}
|
|
|
|
if(count($this->errors["voicenumberblock_voicenumber"])) {
|
|
return false;
|
|
}
|
|
return true;
|
|
|
|
}
|
|
|
|
public function beforeCancel() {
|
|
|
|
}
|
|
|
|
public function afterCancel() {
|
|
|
|
}
|
|
} |