WIP AddressDB + api
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
class ADBGemeinde extends mfBaseModel {
|
||||
public $plz = [];
|
||||
|
||||
|
||||
protected function init() {
|
||||
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
|
||||
public function loadByGemeindeCode($code) {
|
||||
$res = $this->db->select("Gemeinde","*","code=$code");
|
||||
if($this->db->num_rows($res)) {
|
||||
$data = $this->db->fetch_object($res);
|
||||
$this->load($data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function find($search) {
|
||||
$seach = $this->db->escape($search);
|
||||
if(!$search) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$results = [];
|
||||
|
||||
$res = $this->db->select("Gemeinde", "*", "name like '%$search%'");
|
||||
if($this->db->num_rows($res)) {
|
||||
while($data = $this->db->fetch_object($res)) {
|
||||
$results[] = new ADBGemeinde($data);
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
public function afterLoad() {
|
||||
$this->loadPlz();
|
||||
}
|
||||
|
||||
public function loadPlz() {
|
||||
if(!$this->id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$plz = [];
|
||||
|
||||
$res = $this->db->select("Plz","*","gemeinde_id=".$this->id);
|
||||
if($this->db->num_rows($res)) {
|
||||
while($data = $this->db->fetch_object($res)) {
|
||||
$this->plz[] = new ADBPlz($data);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getPlzList() {
|
||||
$list = [];
|
||||
foreach($this->plz as $plz) {
|
||||
$list[$plz->id] = $plz->plz;
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
class ADBGemeindeController extends mfBaseController {
|
||||
|
||||
protected function init() {
|
||||
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function getGemeinden() {
|
||||
$gemeinden = array();
|
||||
|
||||
$res = $this->db()->select("Gemeinde","*","1=1 ORDER BY name");
|
||||
if($this->db()->num_rows($res)) {
|
||||
while($data = $this->db()->fetch_object($res)) {
|
||||
$gemeinden[] = new ADBOrtschaft($data);
|
||||
}
|
||||
}
|
||||
|
||||
return $gemeinden;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
class ADBHausnummer extends mfBaseModel {
|
||||
public $strasse;
|
||||
public $status;
|
||||
public $providers = [];
|
||||
public $providerlist = [];
|
||||
|
||||
protected function init() {
|
||||
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function afterLoad() {
|
||||
$this->strasse = new ADBStrasse($this->strasse_id);
|
||||
//$this->loadStatus();
|
||||
//$this->loadProvider();
|
||||
}
|
||||
/*
|
||||
public function loadStatus() {
|
||||
if(!$this->id) {
|
||||
return false;
|
||||
}
|
||||
$status = HausnummerStatus::singleton();
|
||||
$this->status = $status->getObject($this->status_id);
|
||||
}
|
||||
|
||||
public function loadProvider() {
|
||||
if(!$this->id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$res = $this->db->select("HausnummerProvider", "*", "hausnummer_id=".$this->id);
|
||||
if($this->db->num_rows($res)) {
|
||||
while($data = $this->db->fetch_object($res)) {
|
||||
$provider = new Provider($data->provider_id);
|
||||
$this->providerlist[$provider->id] = $provider->name;
|
||||
$this->providers[] = $provider;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}*/
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
class ADBOrtschaft extends mfBaseModel {
|
||||
|
||||
protected function init() {
|
||||
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function find($search) {
|
||||
$seach = $this->db->escape($search);
|
||||
if(!$search) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$results = [];
|
||||
|
||||
$res = $this->db->select("Ortschaft", "*", "name like '%$search%'");
|
||||
if($this->db->num_rows($res)) {
|
||||
while($data = $this->db->fetch_object($res)) {
|
||||
$results[] = new ADBOrtschaft($data);
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
class ADBOrtschaftController extends mfBaseController {
|
||||
|
||||
protected function init() {
|
||||
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function getOrte() {
|
||||
$orte = array();
|
||||
|
||||
$res = $this->db()->query("SELECT ortschaft_id AS id FROM view_ort ORDER BY gemeinde_kennziffer,gemeinde,ort");
|
||||
if($this->db()->num_rows($res)) {
|
||||
while($data = $this->db()->fetch_object($res)) {
|
||||
$orte[] = new ADBOrtschaft($data->id);
|
||||
}
|
||||
}
|
||||
|
||||
return $orte;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
class ADBPlz extends mfBaseModel {
|
||||
|
||||
protected function init() {
|
||||
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
class Strasse extends mfBaseModel {
|
||||
public $gemeinde = [];
|
||||
|
||||
protected function init() {
|
||||
$this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function afterLoad() {
|
||||
$this->gemeinde = new ADBGemeinde($this->gemeinde_id);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
class StrasseController extends mfBaseController {
|
||||
|
||||
protected function init() {
|
||||
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
||||
}
|
||||
|
||||
public function getStrassen() {
|
||||
$strassen = array();
|
||||
|
||||
$res = $this->db()->query("SELECT strasse_id AS id FROM view_strasse ORDER BY gemeinde_kennziffer,gemeinde,ort,strasse");
|
||||
if($this->db()->num_rows($res)) {
|
||||
while($data = $this->db()->fetch_object($res)) {
|
||||
$strassen[] = new ADBStrasse($data->id);
|
||||
}
|
||||
}
|
||||
|
||||
return $strassen;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
class AddressDB {
|
||||
private $log;
|
||||
private $db;
|
||||
|
||||
public $data;
|
||||
|
||||
public function __contruct() {
|
||||
|
||||
}
|
||||
|
||||
public function findAddress($search) {
|
||||
if(!is_array($search)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$gemeinde_name = $search['gemeinde_name'];
|
||||
$ort_name = $search['ort_name'];
|
||||
$plz = $search['plz'];
|
||||
$strasse_name = $search['strasse_name'];
|
||||
$hausnummer = $search['hausnummer'];
|
||||
$block = $search['block'];
|
||||
$stiege = $search['stiege'];
|
||||
$stock = $search['stock'];
|
||||
$tuer = $search['tuee'];
|
||||
|
||||
/*
|
||||
if($gemeinde_id < 1 || $strasse_id < 1 || !$hausnummer
|
||||
|| $gemeinde_id > pow(2, 30) || $strasse_id > pow(2, 30) || strlen($hausnummer) > 32) {
|
||||
$this->redirect('Check','',['status' => 'error']);
|
||||
}*/
|
||||
|
||||
$hausnummerMatch = true;
|
||||
|
||||
$gemeinde = new Gemeinde($gemeinde_id);
|
||||
$strasse = new Strasse($strasse_id);
|
||||
|
||||
// try exact hausnummer
|
||||
$res = $this->db()->select("view_adresseProvider", "*", "gemeinde = '".$gemeinde->name."' AND strasse = '".$strasse->name."' AND hausnummer = '$hausnummer'");
|
||||
if(!$this->db()->num_rows($res)) {
|
||||
$hausnummerMatch = false;
|
||||
// check for anschlüsse in the same street
|
||||
$res = $this->db()->select("view_adresseProvider", "*", "gemeinde = '".$gemeinde->name."' AND strasse = '".$strasse->name."'");
|
||||
if(!$this->db()->num_rows($res)) {
|
||||
// XXX: if breitband stmk
|
||||
$this->layout()->setTemplate("Check/Result/Fail");
|
||||
|
||||
// xdsl anzeigen
|
||||
return $this->checkVull($request);
|
||||
}
|
||||
}
|
||||
|
||||
// if multiple hausnummern, anschluss in street available, or multiple providers
|
||||
if($this->db()->num_rows($res)) {
|
||||
$addresses = [];
|
||||
$providers = [];
|
||||
$homeProvider = false;
|
||||
$multipleAddress = false;
|
||||
|
||||
while($data = $this->db()->fetch_object($res)) {
|
||||
$addresses[] = new Hausnummer($data->id);
|
||||
if($data->provider_id == HOME_PROVIDER_ID) {
|
||||
$homeProvider = true;
|
||||
}
|
||||
if(!in_array($data->provider, $providers)) {
|
||||
$providers[$data->provider_id] = $data->provider;
|
||||
}
|
||||
if($data->hausnummer != $hausnummer) {
|
||||
$multipleAddress = true;
|
||||
}
|
||||
}
|
||||
|
||||
$pc = new ProductController();
|
||||
|
||||
if($homeProvider && $multipleAddress) {
|
||||
$this->layout()->set("debug", "multi hausnummern, homeprovider");
|
||||
$this->layout()->setTemplate("Check/Result/Street");
|
||||
return true;
|
||||
}
|
||||
if($homeProvider) {
|
||||
$this->layout()->set("debug", "single hausnummer, homeprovider");
|
||||
$this->layout()->setTemplate("Check/Result/Success");
|
||||
$this->layout()->set("productsPrivate", $pc->getProducts(1, "fiber", "privat"));
|
||||
$this->layout()->set("productsBusiness", $pc->getProducts(1, "fiber", "business"));
|
||||
if($data->status == 1) {
|
||||
$this->layout()->set("debug", "single hausnummer, homeprovider, rohr am grundstück");
|
||||
$this->layout()->setTemplate("Check/Result/Street");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if(!$homeProvider) {
|
||||
$this->layout()->set("providers", $providers);
|
||||
$this->layout()->set("debug", "single hausnummer, partner provider");
|
||||
$this->layout()->setTemplate("Check/Result/SuccessPartner");
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
} /*elseif($this->db()->num_rows($res) == 1 && $hausnummerMatch) {
|
||||
// exactly 1 match
|
||||
$data = $this->db()->fetch_object($res);
|
||||
$address = new Hausnummer($data->id);
|
||||
$this->layout()->set("adresse", $address);
|
||||
$this->layout()->set("debug", "single address, only homeprovider");
|
||||
$this->layout()->setTemplate("Check/Result/Success");
|
||||
return true;
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
class AddressDBController extends mfBaseController {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
class OrtApicontroller extends mfBaseApicontroller {
|
||||
|
||||
protected function init() {
|
||||
//$this->addRoute("/home/getAll", "getHomes", "GET");
|
||||
$this->addRoute("/ort/find", "findOrt", "POST");
|
||||
//$this->addRoute("/home/:oanid/products", "getHomeProducts", "GET");
|
||||
}
|
||||
|
||||
protected function findOrt() {
|
||||
$search = $this->post['search'];
|
||||
|
||||
if(!$search) {
|
||||
return mfResponse::BadRequest(['message' => "Suchbegriff darf nicht leer sein!"]);
|
||||
}
|
||||
|
||||
$orte = [];
|
||||
|
||||
$ag = new ADBGemeinde();
|
||||
$results = $ag->find($search);
|
||||
//var_dump($results);exit;
|
||||
foreach($results as $result) {
|
||||
if(is_array($result->plz) && count($result->plz)) {
|
||||
foreach($result->plz as $plz) {
|
||||
$orte[] = ['plz' => $plz->plzstring, 'ort' => $result->name];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return mfResponse::Ok(['orte' => $orte]);
|
||||
}
|
||||
|
||||
/*
|
||||
protected function getHomes() {
|
||||
$homes = [];
|
||||
|
||||
foreach(HomeModel::search(['operationalstate_id' => [5,3]]) as $home) {
|
||||
$homes[] = $home->getApiArray();
|
||||
}
|
||||
|
||||
return mfResponse::Ok(['homes' => $homes]);
|
||||
}*/
|
||||
/*
|
||||
protected function validateOan($oan_id) {
|
||||
$home = new Home();
|
||||
$home->loadByOan($oan_id);
|
||||
if(!$home->id) {
|
||||
return mfResponse::NotFound(['oan_d' => $oan_id, 'isValid' => false]);
|
||||
}
|
||||
|
||||
return mfResponse::Ok(['oan_d' => $oan_id, 'isValid' => true]);
|
||||
}*/
|
||||
/*
|
||||
protected function getHomeProducts($oanid) {
|
||||
$home = new Home();
|
||||
$home->loadByOan($oanid);
|
||||
if(!$home->id) {
|
||||
return mfResponse::NotFound(['message' => "Home not found"]);
|
||||
}
|
||||
|
||||
$products = [];
|
||||
foreach(ProductModel::search(['provider_id' => $this->me->provider_id]) as $product) {
|
||||
$products[] = $product->getApiArray();
|
||||
}
|
||||
|
||||
return mfResponse::Ok(["products" => $products]);
|
||||
|
||||
}*/
|
||||
}
|
||||
@@ -43,6 +43,65 @@ class User extends mfBaseModel {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function loadByUsername($username) {
|
||||
$username = $this->db->escape($username);
|
||||
if(!$username) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$res = $this->db->select($this->table, "*", "username='$username' LIMIT 1");
|
||||
if($this->db->num_rows($res)) {
|
||||
$data = $this->db->fetch_object($res);
|
||||
$this->load($data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function loadByApikey($key) {
|
||||
$key = $this->db->escape($key);
|
||||
if(!$key) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$res = $this->db->select($this->table, "*", "apikey='$key'");
|
||||
if($this->db->num_rows($res) === 1) {
|
||||
$data = $this->db->fetch_object($res);
|
||||
$this->load($data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function createApiKey() {
|
||||
$tries = 3;
|
||||
$key = false;
|
||||
|
||||
while(!$key) {
|
||||
$source = random_bytes(128);
|
||||
$key = base64_encode($source);
|
||||
$key = str_replace(["/","=","+"], "", $key);
|
||||
$key = substr($key, 0, 32);
|
||||
|
||||
$res = $this->db->select($this->table, "id", "apikey='$key'");
|
||||
if($this->db->num_rows($res) || strlen($key) < 32) {
|
||||
$key = false;
|
||||
$tries--;
|
||||
$this->log->error("new api key not unique ($tries)");
|
||||
if($tries < 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$key) {
|
||||
$this->log->error("unable to create unique api key");
|
||||
return null;
|
||||
}
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
public function getAbbrName() {
|
||||
if(strpos($this->name, " ") === false) {
|
||||
return $this->name;
|
||||
|
||||
@@ -73,6 +73,30 @@ class UserController extends mfBaseController {
|
||||
$this->layout()->set("addresses", $addresses);
|
||||
}
|
||||
|
||||
protected function generateApikey($request) {
|
||||
if(!$this->isAdmin()) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
$id = $request['id'];
|
||||
if(!is_numeric($id) || $id < 1) {
|
||||
$this->layout()->setFlash("User nicht gefunden.", "error");
|
||||
$this->redirect("User");
|
||||
}
|
||||
|
||||
$user = new User($id);
|
||||
if(!$user->id) {
|
||||
$this->layout()->setFlash("User nicht gefunden.", "error");
|
||||
$this->redirect("User");
|
||||
}
|
||||
|
||||
$user->apikey = $user->createApiKey();
|
||||
$user->save();
|
||||
|
||||
$this->layout()->setFlash("API Key erfolgreich generiert.", "success");
|
||||
$this->redirect("User", "edit", ['id' => $id]);
|
||||
|
||||
}
|
||||
|
||||
protected function profileAction($request) {
|
||||
|
||||
}
|
||||
@@ -92,6 +116,17 @@ class UserController extends mfBaseController {
|
||||
}
|
||||
|
||||
$user = new User($id);
|
||||
|
||||
// check if new user already exits
|
||||
if($this->isAdmin() && !$r->id) {
|
||||
$tu = new User();
|
||||
$tu->loadByUsername($r->username);
|
||||
if($tu->id) {
|
||||
$this->layout()->setFlash("Benutzer mit diesem Benutzername bereits vorhanden!", "error");
|
||||
$this->redirect("User");
|
||||
}
|
||||
}
|
||||
|
||||
if(!$user->permissions) {
|
||||
$user->permissions = new WorkerPermission();
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ class UserModel {
|
||||
public $password = null;
|
||||
public $name = null;
|
||||
public $email = null;
|
||||
public $apikey = null;
|
||||
public $ip = null;
|
||||
public $sessionid = null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user