format("Y-m-d");
}
/*
* Gegenstück zu formularGeburtsdatum(): "" wenn kein Geburtstag hinterlegt
* ist, "24.12." wenn nur Tag und Monat bekannt sind, sonst das volle Datum.
*/
function geburtstagAnzeigen($datum)
{
if(!$datum || $datum == "01.01.2100" || $datum == "00.00.0000")
return "";
if(substr($datum, 6, 4) == "2099")
return substr($datum, 0, 5);
return $datum;
}
/* ---------------------------------------------------------------------
* Änderungsprotokoll
* ------------------------------------------------------------------ */
/*
* $qrystr und $undoqry sind reiner Text zur Nachvollziehbarkeit (siehe
* db_sql_text()), sie werden nie ausgeführt. $type ist ein Eintrag aus
* accesstype ("anlegen", "ändern", "löschen").
*/
function saveLog($dbconn,$qrystr,$undoqry,$type)
{
$err = 0;
$typId = db_wert($dbconn, "SELECT id FROM accesstype WHERE typ = ?", array($type));
if($typId === false)
return error("Fehler beim Eintragen der Aktion in die LOG:
".mysqli_error($dbconn));
db_abfrage($dbconn, "INSERT INTO log SET typ_id = ?, datetime = NOW(), qry = ?, undo_qry = ?, user_id = ?",
array((int)$typId, $qrystr, $undoqry, $_SESSION["user"]))
or $err = error("Fehler beim LOGGEN der Aktion:
".mysqli_error($dbconn));
return $err;
}
/* ---------------------------------------------------------------------
* Transaktionen
*
* Die Speicherfunktionen rufen sich gegenseitig auf (savePart ->
* saveAdress -> updateKunde -> saveAdress), MariaDB kennt aber keine
* geschachtelten Transaktionen. Deshalb zählt ein Zähler die Verschachtelung
* mit: nur der äußerste Aufruf öffnet und schließt wirklich.
* ------------------------------------------------------------------ */
function transaktionsTiefe($aenderung = 0)
{
static $tiefe = 0;
$tiefe += $aenderung;
return $tiefe;
}
function beginneSpeichern($dbconn)
{
if(transaktionsTiefe() == 0)
mysqli_begin_transaction($dbconn);
transaktionsTiefe(1);
}
/* Gibt $err unverändert zurück, damit sich der Aufruf ans return anhängen lässt */
function beendeSpeichern($dbconn, $err)
{
transaktionsTiefe(-1);
if(transaktionsTiefe() > 0)
return $err;
if($err)
mysqli_rollback($dbconn);
else
mysqli_commit($dbconn);
return $err;
}
/* ---------------------------------------------------------------------
* Stammdaten: Land, Ort, Straße, Bank
*
* Diese Tabellen wachsen beim Erfassen mit. Gibt es den Eintrag schon, wird
* er wiederverwendet, sonst angelegt und protokolliert.
* ------------------------------------------------------------------ */
/*
* $spalten sind die Werte, die den Eintrag eindeutig machen. $kontext
* landet im Protokolltext ("beim adresse anlegen"). Rückgabe ist die id
* oder false bei Fehlern.
*/
function findeOderLege($dbconn, $tabelle, $spalten, $kontext)
{
$bedingung = array();
$zuweisung = array();
foreach(array_keys($spalten) as $spalte)
{
$bedingung[] = "`$spalte` = ?";
$zuweisung[] = "`$spalte` = ?";
}
$werte = array_values($spalten);
$id = db_wert($dbconn, "SELECT id FROM `$tabelle` WHERE ".implode(" AND ", $bedingung), $werte);
if($id === false)
{
error("Fehler beim suchen in $tabelle:
".mysqli_error($dbconn));
return false;
}
if($id !== null)
return $id;
$sql = "INSERT INTO `$tabelle` SET ".implode(", ", $zuweisung);
if(!db_abfrage($dbconn, $sql, $werte))
{
error("Fehler beim anlegen in $tabelle:
".mysqli_error($dbconn));
return false;
}
$id = mysqli_insert_id($dbconn);
if(saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [hat ID $id ($kontext)]", "DELETE FROM `$tabelle` WHERE id = $id", "anlegen"))
return false;
return $id;
}
function landId($dbconn, $land, $kontext)
{
return findeOderLege($dbconn, "land", array("land" => $land), $kontext);
}
function ortId($dbconn, $land_id, $ort, $plz, $ortsteil, $kontext)
{
return findeOderLege($dbconn, "ort", array("land_id" => $land_id, "ort" => $ort, "plz" => $plz, "ortsteil" => $ortsteil), $kontext);
}
function strasseId($dbconn, $ort_id, $str, $kontext)
{
return findeOderLege($dbconn, "strasse", array("ort_id" => $ort_id, "str" => $str), $kontext);
}
function bankId($dbconn, $bank, $blz, $kontext)
{
return findeOderLege($dbconn, "bank", array("bank" => $bank, "blz" => $blz), $kontext);
}
/*
* Land, Ort und Straße in einem Zug. $ortsangabe enthält land, ort, plz,
* ortsteil und (optional) str. Rückgabe ist array(land_id, ort_id, str_id)
* oder false bei Fehlern; ohne str bleibt str_id 0.
*/
function ortsangabeIds($dbconn, $ortsangabe, $kontext)
{
$land_id = landId($dbconn, $ortsangabe["land"], $kontext);
if($land_id === false)
return false;
$ort_id = ortId($dbconn, $land_id, $ortsangabe["ort"], $ortsangabe["plz"], $ortsangabe["ortsteil"], $kontext);
if($ort_id === false)
return false;
$str_id = 0;
if(isset($ortsangabe["str"]))
{
$str_id = strasseId($dbconn, $ort_id, $ortsangabe["str"], $kontext);
if($str_id === false)
return false;
}
return array($land_id, $ort_id, $str_id);
}
/* Auswahlliste für html_options: array(ids, Texte) */
function auswahlliste($dbconn, $sql, $params = array())
{
$zuordnung = db_zuordnung($dbconn, $sql, $params);
if($zuordnung === false)
return array(array(), array());
return array(array_keys($zuordnung), array_values($zuordnung));
}
//##############################################
//########## ADRESSEN ######################
//##############################################
/* Die Adressfelder aus newadress.tpl bzw. newpar.tpl */
function adressFormularwerte()
{
return array(
"firma" => formularText("firma"),
"vname" => formularText("vname"),
"nname" => formularText("nname"),
"vname2" => formularText("vname2"),
"nname2" => formularText("nname2"),
"anrede_id" => formularGanzzahl("anrede"),
"titel_id" => formularGanzzahl("titel"),
"anrede2_id" => formularGanzzahl("anrede2"),
"titel2_id" => formularGanzzahl("titel2"),
"hnr" => formularText("hnr"),
"zusatz" => formularText("zusatz"),
"gebdat" => formularGeburtsdatum("gebdat"),
"gebdat2" => formularGeburtsdatum("gebdat2"),
);
}
/*
* Adresse anlegen oder ändern.
*
* Drei Fälle:
* - bestehende Adresse und "überschreiben": die Adresse wird geändert,
* alte Rechnungen zeigen danach auf den neuen Stand.
* - Hauptadresse (typ 1) ohne "überschreiben": es entsteht eine neue
* Version des Kunden (updateKunde()), alte Rechnungen behalten die alte.
* - sonst: neue Adresse.
*
* $kunde, $typ und $adressid überschreiben die Werte aus der Anfrage -
* savePart() und updateKunde() legen darüber die Hauptadresse eines frisch
* angelegten Partners an.
*/
function saveAdress($dbconn, $kunde = null, $typ = null, $adressid = null)
{
$adressid = $adressid === null ? parameterGanzzahl("adressid") : (int)$adressid;
$kunde = $kunde === null ? parameterGanzzahl("kunde") : (int)$kunde;
$typ_id = $typ === null ? formularGanzzahl("typ") : (int)$typ;
$ueberschreiben = formularGanzzahl("overwrite") != 0;
$err = 0;
if($adressid && $ueberschreiben)
{
message("Adresse wird geändert...");
$act = "ändern";
}
elseif($adressid)
{
message("Neue Adresse (update)...");
$act = "update";
$updatedBy = db_wert($dbconn, "SELECT updated_by FROM partner WHERE id = ?", array($kunde));
if($updatedBy === false)
$err = error("Fehler testen auf aktualität:
".mysqli_error($dbconn));
elseif($updatedBy)
$err = error("Eine solche Adressänderung kann nur mit der aktuellsten Version des Kunden durchgeführt werden.
Bitte wechseln Sie zur aktuellsten Version und führen Sie die gewünschen Änderungen dort durch.");
}
else
{
message("Adresse wird angelegt...");
$act = "anlegen";
}
if($err)
return $err;
beginneSpeichern($dbconn);
$ids = ortsangabeIds($dbconn, array(
"land" => formularText("land"),
"ort" => formularText("ort"),
"plz" => formularText("plz"),
"ortsteil" => formularText("oteil"),
"str" => formularText("str"),
), "beim adresse $act");
if($ids === false)
return beendeSpeichern($dbconn, 1);
list($land_id, $ort_id, $str_id) = $ids;
$felder = array_merge(array("str_id" => $str_id, "typ_id" => $typ_id), adressFormularwerte());
$zuweisung = array();
foreach(array_keys($felder) as $spalte)
$zuweisung[] = "`$spalte` = ?";
$set = implode(", ", $zuweisung);
if($adressid && $ueberschreiben)
{
$alt = db_zeile($dbconn, "SELECT * FROM adresse WHERE id = ?", array($adressid));
if($alt === false || $alt === null)
return beendeSpeichern($dbconn, error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn)));
$sql = "UPDATE adresse SET $set WHERE id = ?";
$werte = array_merge(array_values($felder), array($adressid));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn)));
$altWerte = array();
foreach(array_keys($felder) as $spalte)
$altWerte[] = $alt[$spalte];
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [adresse change]",
db_sql_text($dbconn, $sql, array_merge($altWerte, array($adressid))), "ändern");
}
elseif($typ_id != 1 || !$adressid)
{
$sql = "INSERT INTO adresse SET $set, partner_id = ?";
$werte = array_merge(array_values($felder), array($kunde));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Adresse:
".mysqli_error($dbconn)));
$adressid = mysqli_insert_id($dbconn);
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $adressid]",
"DELETE FROM adresse WHERE id = $adressid", "anlegen");
}
else
{
// Hauptadresse ändern heißt: neue Version des Kunden anlegen
return beendeSpeichern($dbconn, updateKunde($dbconn, $kunde));
}
/*
* Kommissionsadressen (typ 5) haben eine eigene Telefonnummer, die im
* selben Formular steht. Wird der Typ zurückgestellt, fällt sie weg.
*/
if(!$err && $adressid)
{
if($typ_id != 5)
{
db_abfrage($dbconn, "DELETE FROM tel WHERE adresse_id = ?", array($adressid))
or $err = error("Fehler beim löschen der Telefonnummer der Adresse:
".mysqli_error($dbconn));
}
elseif(formularText("nr") !== "")
{
$telid = db_wert($dbconn, "SELECT id FROM tel WHERE adresse_id = ? ORDER BY id LIMIT 1", array($adressid));
if($telid === false)
$err = error("Fehler beim suchen der Telefonnummer der Adresse:
".mysqli_error($dbconn));
else
$err = speichereTelefon($dbconn, array(
"telid" => (int)$telid,
"adresse_id" => $adressid,
"partner_id" => $kunde,
// newadress.tpl kennt keine Typauswahl für die Nummer
"typ_id" => 1,
"name" => "",
"nr" => formularText("nr"),
"vwahl" => formularText("vwahl"),
"land" => formularText("telland"),
"ort" => formularText("telort"),
"plz" => formularText("telplz"),
"ortsteil" => formularText("teloteil"),
));
}
}
return beendeSpeichern($dbconn, $err);
}
function dispAdressForm($dbconn,$smarty,$typ=1)
{
$adressid = parameterGanzzahl("adressid");
$kunde = parameterGanzzahl("kunde");
if(!$adressid)
{
$smarty->assign("head","Neue Adresse anlegen");
// Firma, Anrede und Namen der Hauptadresse als Vorbelegung
$res = db_zeile($dbconn, "SELECT anrede_id, titel_id, firma, vname, nname, vname2, nname2
FROM adresse
WHERE adresse.partner_id = ? AND adresse.typ_id = 1", array($kunde));
}
else
{
$smarty->assign("head","Adresse ändern");
$res = db_zeile($dbconn, "SELECT anrede_id, zusatz, titel_id, anrede2_id, titel2_id,
DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2,
firma, vname, nname, vname2, nname2, str, hnr, ort, ortsteil, plz, land, typ_id, partner_id
FROM adresse
JOIN strasse ON strasse.id = adresse.str_id
JOIN ort ON strasse.ort_id = ort.id
JOIN land ON land.id = ort.land_id
WHERE adresse.id = ?", array($adressid));
}
if($res === false)
return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn));
if(!$res)
$res = array();
if(!empty($res["partner_id"]))
$kunde = $res["partner_id"];
foreach(array("firma","vname","nname","vname2","nname2","ort","plz","hnr","land","str","zusatz") as $feld)
$smarty->assign($feld, isset($res[$feld]) ? $res[$feld] : "");
$smarty->assign("titel", isset($res["titel_id"]) ? $res["titel_id"] : "");
$smarty->assign("anrede", isset($res["anrede_id"]) ? $res["anrede_id"] : "");
$smarty->assign("titel2", isset($res["titel2_id"]) ? $res["titel2_id"] : "");
$smarty->assign("anrede2", isset($res["anrede2_id"]) ? $res["anrede2_id"] : "");
$smarty->assign("oteil", isset($res["ortsteil"]) ? $res["ortsteil"] : "");
$smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : "");
$smarty->assign("gebdat", geburtstagAnzeigen(isset($res["gebdat"]) ? $res["gebdat"] : ""));
$smarty->assign("gebdat2", geburtstagAnzeigen(isset($res["gebdat2"]) ? $res["gebdat2"] : ""));
// Telefonnummer einer Kommissionsadresse: eigene Felder im Formular
$telres = db_zeile($dbconn, "SELECT tel.id AS telid, ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr
FROM tel
JOIN ort ON tel.ort_id = ort.id
JOIN land ON land.id = ort.land_id
WHERE tel.adresse_id = ? ORDER BY tel.id LIMIT 1", array($adressid));
if($telres === false)
return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn));
if($telres)
{
$smarty->assign("nr",$telres["nr"]);
$smarty->assign("vwahl",$telres["vwahl"]);
$smarty->assign("telplz",$telres["plz"]);
$smarty->assign("telort",$telres["ort"]);
$smarty->assign("teloteil",$telres["ortsteil"]);
$smarty->assign("telland",$telres["land"]);
$smarty->assign("telid",$telres["telid"]);
if(!$kunde)
$kunde = $telres["partner_id"];
}
$smarty->assign("kunde",$kunde);
$smarty->assign("adressid",$adressid);
list($anrids, $anrnamen) = auswahlliste($dbconn, "SELECT id, anrede FROM anrede WHERE id < 4");
$smarty->assign("anrids",$anrids);
$smarty->assign("anrs",$anrnamen);
list($titelids, $titelnamen) = auswahlliste($dbconn, "SELECT id, titel FROM titel");
$smarty->assign("titelids",$titelids);
$smarty->assign("titels",$titelnamen);
list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM adresstyp WHERE id != 1");
$smarty->assign("typids",$typids);
$smarty->assign("typs",$typnamen);
$smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange");
$smarty->display("newadress.tpl");
return 0;
}
//##############################################
//########## TEL.NRN. ######################
//##############################################
/*
* Legt eine Telefonnummer an oder ändert sie. $daten enthält telid,
* adresse_id, partner_id, typ_id, name, nr, vwahl und die Ortsangaben
* land/ort/plz/ortsteil.
*/
function speichereTelefon($dbconn, $daten)
{
$telid = (int)$daten["telid"];
$act = $telid ? "ändern" : "anlegen";
message($telid ? "Telefonnummer wird geändert..." : "Telefonnummer wird angelegt...");
beginneSpeichern($dbconn);
$ids = ortsangabeIds($dbconn, $daten, "beim telefon $act");
if($ids === false)
return beendeSpeichern($dbconn, 1);
list($land_id, $ort_id) = $ids;
// Die Vorwahl hängt am Ort, nicht an der Nummer
$alteVorwahl = db_wert($dbconn, "SELECT vwahl FROM ort WHERE id = ?", array($ort_id));
if($alteVorwahl === false)
return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)));
$err = 0;
if($alteVorwahl !== $daten["vwahl"])
{
$sql = "UPDATE ort SET vwahl = ? WHERE id = ?";
$werte = array($daten["vwahl"], $ort_id);
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim anlegen der Vorwahl:
".mysqli_error($dbconn)));
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [(beim telefon $act)]",
db_sql_text($dbconn, $sql, array($alteVorwahl, $ort_id)), "ändern");
}
if($err)
return beendeSpeichern($dbconn, $err);
$felder = array(
"ort_id" => $ort_id,
"typ_id" => (int)$daten["typ_id"],
"name" => $daten["name"],
"adresse_id" => (int)$daten["adresse_id"],
"nr" => $daten["nr"],
);
$zuweisung = array();
foreach(array_keys($felder) as $spalte)
$zuweisung[] = "`$spalte` = ?";
$set = implode(", ", $zuweisung);
if($telid)
{
$alt = db_zeile($dbconn, "SELECT * FROM tel WHERE id = ?", array($telid));
if($alt === false || $alt === null)
return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)));
$sql = "UPDATE tel SET $set WHERE id = ?";
$werte = array_merge(array_values($felder), array($telid));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim ändern der Telefonnummer:
".mysqli_error($dbconn)));
$altWerte = array();
foreach(array_keys($felder) as $spalte)
$altWerte[] = $alt[$spalte];
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [tel change]",
db_sql_text($dbconn, $sql, array_merge($altWerte, array($telid))), "ändern");
}
else
{
$sql = "INSERT INTO tel SET $set, partner_id = ?";
$werte = array_merge(array_values($felder), array((int)$daten["partner_id"]));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Telefonnummer:
".mysqli_error($dbconn)));
$telid = mysqli_insert_id($dbconn);
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [hat ID $telid]",
"DELETE FROM tel WHERE id = $telid", "anlegen");
}
return beendeSpeichern($dbconn, $err);
}
/* Telefonnummer aus dem eigenen Formular (newtel.tpl) */
function saveTel($dbconn)
{
return speichereTelefon($dbconn, array(
"telid" => parameterGanzzahl("telid"),
"adresse_id" => parameterGanzzahl("adressid"),
"partner_id" => parameterGanzzahl("kunde"),
"typ_id" => formularGanzzahl("typ"),
"name" => formularText("name"),
"nr" => formularText("nr"),
"vwahl" => formularText("vwahl"),
"land" => formularText("land"),
"ort" => formularText("ort"),
"plz" => formularText("plz"),
"ortsteil" => formularText("oteil"),
));
}
function dispTelForm($dbconn,$smarty,$typ=1)
{
$telid = parameterGanzzahl("telid");
$kunde = parameterGanzzahl("kunde");
if(!$telid)
{
$smarty->assign("head","Neue Telefonnummer anlegen");
// Ort und Name aus der Hauptadresse als Vorbelegung
$res = db_zeile($dbconn, "SELECT ort, vname, nname, vwahl, ortsteil, land, plz
FROM adresse
JOIN strasse ON strasse.id = adresse.str_id
JOIN ort ON ort.id = strasse.ort_id
JOIN land ON land.id = ort.land_id
WHERE adresse.partner_id = ? AND adresse.typ_id = 1", array($kunde));
}
else
{
$smarty->assign("head","Telefonnummer ändern");
$res = db_zeile($dbconn, "SELECT ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr
FROM tel
JOIN ort ON tel.ort_id = ort.id
JOIN land ON land.id = ort.land_id
WHERE tel.id = ?", array($telid));
}
if($res === false)
return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn));
if(!$res)
$res = array();
if(!empty($res["vname"]) || !empty($res["nname"]))
$res["name"] = trim($res["vname"]." ".$res["nname"]);
if(!empty($res["partner_id"]))
$kunde = $res["partner_id"];
foreach(array("name","ort","plz","nr","vwahl","land") as $feld)
$smarty->assign($feld, isset($res[$feld]) ? $res[$feld] : "");
$smarty->assign("oteil", isset($res["ortsteil"]) ? $res["ortsteil"] : "");
$smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : "");
$smarty->assign("kunde",$kunde);
$smarty->assign("telid",$telid);
list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM teltyp");
$smarty->assign("typids",$typids);
$smarty->assign("typs",$typnamen);
$smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange");
$smarty->display("newtel.tpl");
return 0;
}
//##############################################
//########## KONTAKTE ######################
//##############################################
function saveKontakt($dbconn)
{
$kontaktid = parameterGanzzahl("kontaktid");
$kunde = parameterGanzzahl("kunde");
$felder = array(
"kontakt" => formularText("kontakt"),
"typ_id" => formularGanzzahl("typ"),
);
$set = "kontakt = ?, typ_id = ?";
$err = 0;
beginneSpeichern($dbconn);
if($kontaktid)
{
message("Kontaktadresse wird geändert...");
$alt = db_zeile($dbconn, "SELECT kontakt, typ_id FROM kontakt WHERE id = ?", array($kontaktid));
if($alt === false || $alt === null)
return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)));
$sql = "UPDATE kontakt SET $set WHERE id = ?";
$werte = array_merge(array_values($felder), array($kontaktid));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim ändern der Kontaktadresse:
".mysqli_error($dbconn)));
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [kontakt change]",
db_sql_text($dbconn, $sql, array($alt["kontakt"], $alt["typ_id"], $kontaktid)), "ändern");
}
else
{
message("Kontaktadresse wird angelegt...");
$sql = "INSERT INTO kontakt SET $set, partner_id = ?";
$werte = array_merge(array_values($felder), array($kunde));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Kontaktadresse:
".mysqli_error($dbconn)));
$kontaktid = mysqli_insert_id($dbconn);
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $kontaktid]",
"DELETE FROM kontakt WHERE id = $kontaktid", "anlegen");
}
return beendeSpeichern($dbconn, $err);
}
function dispKontaktForm($dbconn,$smarty,$typ=1)
{
$kontaktid = parameterGanzzahl("kontaktid");
$kunde = parameterGanzzahl("kunde");
$res = array();
if(!$kontaktid)
$smarty->assign("head","Neue Kontaktadresse anlegen");
else
{
$smarty->assign("head","Kontaktadresse ändern");
$res = db_zeile($dbconn, "SELECT kontakt, typ_id, partner_id FROM kontakt WHERE id = ?", array($kontaktid));
if($res === false)
return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn));
if(!$res)
$res = array();
}
if(!empty($res["partner_id"]))
$kunde = $res["partner_id"];
$smarty->assign("kunde",$kunde);
$smarty->assign("kontakt", isset($res["kontakt"]) ? $res["kontakt"] : "");
$smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : "");
$smarty->assign("kontaktid",$kontaktid);
list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM kontakttyp");
$smarty->assign("typids",$typids);
$smarty->assign("typs",$typnamen);
$smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange");
$smarty->display("newkontakt.tpl");
return 0;
}
//##############################################
//########## NOTIZEN ######################
//##############################################
function saveNotiz($dbconn)
{
$notizid = parameterGanzzahl("notizid");
$kunde = parameterGanzzahl("kunde");
$felder = array(
"notiz" => formularText("notiz"),
"color" => formularText("color"),
);
$set = "notiz = ?, color = ?, datetime = NOW()";
$err = 0;
beginneSpeichern($dbconn);
if($notizid)
{
message("Notiz wird geändert...");
$alt = db_zeile($dbconn, "SELECT notiz, color, datetime FROM notiz WHERE id = ?", array($notizid));
if($alt === false || $alt === null)
return beendeSpeichern($dbconn, error("Fehler beim erfassen der Daten für die LOG:
".mysqli_error($dbconn)));
$sql = "UPDATE notiz SET $set WHERE id = ?";
$werte = array_merge(array_values($felder), array($notizid));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim ändern der Notiz:
".mysqli_error($dbconn)));
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [notiz change]",
db_sql_text($dbconn, "UPDATE notiz SET notiz = ?, color = ?, datetime = ? WHERE id = ?",
array($alt["notiz"], $alt["color"], $alt["datetime"], $notizid)), "ändern");
}
else
{
message("Notiz wird angelegt...");
$sql = "INSERT INTO notiz SET $set, partner_id = ?";
$werte = array_merge(array_values($felder), array($kunde));
if(!db_abfrage($dbconn, $sql, $werte))
return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Notiz:
".mysqli_error($dbconn)));
$notizid = mysqli_insert_id($dbconn);
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $notizid]",
"DELETE FROM notiz WHERE id = $notizid", "anlegen");
}
if(!$err && !empty($_FILES["notefile"]["tmp_name"]))
$err = speichereNotizDatei($notizid);
return beendeSpeichern($dbconn, $err);
}
/*
* Anhang einer Notiz. Der Dateiname ist die Notiz-id, die Endung kommt aus
* dem Hochgeladenen - deshalb wird sie auf harmlose Zeichen begrenzt, sonst
* ließe sich über den Namen eine .php im Uploads-Verzeichnis ablegen.
*/
function speichereNotizDatei($notizid)
{
$ordner = "./".UPLOADS_PATH."notes/";
if(!is_dir($ordner))
return error("Pfad zum speichern existiert nicht");
$endung = strtolower(pathinfo($_FILES["notefile"]["name"], PATHINFO_EXTENSION));
if(!preg_match('/^[a-z0-9]{1,8}$/', $endung) || in_array($endung, array("php", "phtml", "phar", "htaccess")))
return error("Dieser Dateityp kann nicht gespeichert werden.");
del_files($ordner, "!^".preg_quote((string)$notizid, "!")."\..*$!");
if(!move_uploaded_file($_FILES["notefile"]["tmp_name"], $ordner.$notizid.".".$endung))
return error("Hochgeladene Datei konnte leider nicht gespeichert werden.");
return 0;
}
function dispNotizForm($dbconn,$smarty,$typ=1)
{
$notizid = parameterGanzzahl("notizid");
$kunde = parameterGanzzahl("kunde");
$res = array();
if(!$notizid)
$smarty->assign("head","Neue Notiz anlegen");
else
{
$smarty->assign("head","Notiz ändern");
$res = db_zeile($dbconn, "SELECT notiz, color, partner_id FROM notiz WHERE id = ?", array($notizid));
if($res === false)
return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn));
if(!$res)
$res = array();
}
if(!empty($res["partner_id"]))
$kunde = $res["partner_id"];
$smarty->assign("kunde",$kunde);
$smarty->assign("notiz", isset($res["notiz"]) ? $res["notiz"] : "");
$smarty->assign("color", isset($res["color"]) ? $res["color"] : "");
$smarty->assign("notizid",$notizid);
$smarty->assign("colors",array("#fff"=>"