open(); ... $Firm->close()! */ // Session // ------- define('SESSION_DIR', $_SERVER['DOCUMENT_ROOT'] . '/../phptmp'); define('SESSION_LIFETIME', '7200'); // 2 Stunden // Rabatte in % für Filialen: // -------------------------- define('GRENZE1', 4); // 1..3 define('GRENZE2', 11); // 4..10, > 10 define('RABATT1', 80); // 1..3 define('RABATT2', 60); // 4..10 define('RABATT3', 50); // > 10 // Konstantendefinitionen (Log-Texte, Statuswerte) // ----------------------------------------------- require_once(dirname(__FILE__).'/def.inc.php'); // ========================== // Session // ========================== /** * Setzen der Session-Lebensdauer * auf jeder Seite nach session_start() * * @author Ralph Stahl * @version 4.10.2007 * @return */ function setSessionLifetime() { ini_set('session.save_path', SESSION_DIR); // eigenes Sessionverzeichnis, damit Session-Laufzeitverlängerung funktioniert ini_set('session.gc_maxlifetime', SESSION_LIFETIME); ini_set('session.use_trans_sid', 0); ini_set('session.use_cookies', 1); } /** * Löschen der Session-Files nach $days Tagen * * @param int $days default 2 * @return array die Namen der gelöschen Files zur Kontrolle, FALSE bei mißglückt */ function deleteSessionFiles($days = 2) { $aFiles = array(); $diff = time() - ($days * 24 *60 * 60); // Tage in Sekunden $aFileNames = glob(SESSION_DIR . '/sess_*'); // der Inhalt des Session-Verzeichnisses foreach($aFileNames as $sFile) { $mtime = filemtime($sFile); // die letzte Modifikationszeit der Datei if($mtime < $diff) { $aFiles[] = $sFile; // nur zur Kontroll-Rückgabe if(! @unlink($sFile)) return FALSE; } } return $aFiles; } // ========================== // Verschiedenes // ========================== /** * Konvertierng Zeichenkette aus Formular zu Gleitkommazahl * * @author Ralph Stahl * @version 12.6.2006 * @param string $s * @return float $float/NULL Gleitkommazahl oder === NULL (nicht FALSE!) */ function str2float($s) { $n = str_replace(',', '.', $s); // Komma gegen Punkt $n = ereg_replace('[^0-9.]','', $n); // nur Zahlen und Dezimalpunkt if(! settype($n, 'float')) return NULL; // keine Zahl, mit === NULL testen! return $n; } /** * Konvertierng Zeichenkette aus Formular zu Ganzzahl * * @author Ralph Stahl * @version 12.6.2006 * @param string $s * @return int $integer/NULL: Integer oder === NULL (nicht FALSE!) */ function str2integer($s) { $n = str_replace(',', '.', $s); // Komma gegen Punkt $n = ereg_replace('[^0-9.]','', $n); // nur Zahlen und Dezimalpunkt if(! settype($n, 'integer')) return NULL; // keine Zahl, mit ===NULL testen! return $n; } /** * Erzeugen von Zufallszahlen keine Doppelten dabei ! * * @author D. Jänsch * @version 30.8.2010 * @param von, bis, anzahl * @return array */ function zufallszahlen($von, $bis, $anzahl) { $zahlen = range($von, $bis); for ($i = 0; $i < $anzahl; $i++) { $a = rand(0, count($zahlen) - 1); $ergebnis[] = $zahlen[$a]; array_splice($zahlen, $a, 1); } // print_r ($ergebnis); return $ergebnis; } /** * Trimmen der Values von POST * * allgemein: array_walk($array, 'trimArrayValues'); * $array kann Arrays enthalten (rekursiv) * * @author Ralph Stahl * @version 30.6.2006 * @param - * @return void */ function trimPost() { array_walk($_POST, 'trimArrayValues'); array_walk($_POST, 'encodeArrayValues'); return; } /** * Callback-Funktion für array_walk() zum Kodieren und bereinigen von Sonderzeichen von Werten/Arrays * * der bergebene Wert &$val wird direkt verndert (Referenz)! * * @author Ralph Stahl * @version 21.3.2007 * @param mixed &$val beliebiger Typ, sinnvoll fr Strings und String-Arrays * @return void */ function encodeArrayValues(&$val, $key) { switch(gettype($val)) { case 'array': array_walk($val, 'encodeArrayValues'); break; case 'string': // alle Eingabefelder werden auf HTML-Sonderzeichen und Tags überprüft $val = htmlspecialchars(strip_tags(preg_replace('/\\\\+/', '', $val)), ENT_QUOTES, 'UTF-8'); break; } } /** * Callback-Funktion fr array_walk() zum Trimmen von Werten/Arrays * * der übergebene Wert &$val wird direkt verändert (Referenz)! * * @author Ralph Stahl * @version 1.11.2007 * @param mixed &$val beliebiger Typ, sinnvoll fr Strings und String-Arrays * @return void */ function trimArrayValues(&$val, $key) { switch(gettype($val)) { case 'array': array_walk($val, 'trimArrayValues'); break; case 'string': // Leerzeichen ringsum werden entfernt $val = trim($val); break; } } /** * gibt einen formatierten String als Fehlermeldung zur�ck * * @author Ralph Stahl * @version 12.10.2006 * @param string $msg die Nachricht * @return string die Meldung */ function error($msg) { return ''.$msg.''; } /** * gibt einen formatierten String als Meldung zur�ck * * @author Ralph Stahl * @version 12.10.2006 * @param string $msg die Nachricht * @return string die Meldung */ function message($msg) { return ''.$msg.''; } /** * ersetzt
gegen nichts, sinnvoll für Anzeige vonVorschutext * * @author Ralph Stahl * @version 24.1.2007 * @param string * @return string */ function stripBR($string) { $s = str_replace('
', '', $string); $s = str_replace('
', '', $s); return $s; } /** * Umwandlung von
in \n * * @param string $string * @return string */ function br2nl($string) { $s = str_replace('
', "\n", $string); $s = str_replace('
', "\n", $s); return $s; } /** * macht aus Access id's verst�ndliche begriffe * * @author Dirk Jaensch * @version 03.09.2006 * @param int $level accesslevel * @return string accesslevel in klarschrift */ function get_accesslevel($level) { global $TX; if ($level == 3) return $TX['tx_buchhalter']; if ($level == 5) return $TX['tx_kundenbetreuer']; if ($level == 7) return $TX['tx_landesadmin']; if ($level == 9) return $TX['tx_superadmin']; } /** * macht aus Statuswerten verst�ndliche Begriffe * * @author Ralph Stahl * @version 17.10.2006 * @param int $level statuslevel * @return string statuslevel in klarschrift */ function get_statuslevel($level) { global $TX; if ($level == 0) return $TX['tx_stat0']; if ($level == 1) return $TX['tx_stat1']; if ($level == 2) return $TX['tx_stat2']; if ($level == 4) return $TX['tx_stat4']; if ($level == 8) return $TX['tx_stat8']; if ($level == 16) return $TX['tx_stat16']; } // ---------------------------------------- // Rechnungen // ---------------------------------------- /** * gibt eine neue eindeutige Rechnungsnummer zur�ck * * @author Dirk Jaensch * @version 21.09.2006 * @param - * @return int Rechnungsnummer */ function getrechnungsid($countryID, $text = 'Rechnung') { global $Firm; // testen, ob für das land schon Rechnungen existieren: // ---------------------------------------------------- $sql = "select count(*) from rechnung where country_id = $countryID"; $rs = $Firm->query($sql, __FILE__, __LINE__); $count = mysql_result($rs, 0); // wenn neues Land, dann neuen Eintrag erzeugen: // --------------------------------------------- if(! $count) { $newNr = 1; // erste Rechnung } else { // wenn Land vorhanden, dann letzte (höchste) Nummer suchen // --------------------------------------------------------- $sql = "select max(nr) from rechnung where country_id = $countryID"; $rs = $Firm->query($sql, __FILE__, __LINE__); $newNr = mysql_result($rs, 0) + 1; // die nächste Rechnungsnummer pro Land } $sql = "insert into rechnung ( country_id, name, nr ) values ( $countryID, '$text', $newNr )"; $Firm->query($sql, __FILE__, __LINE__); // die erzeugte Rechnungs-ID auslesen: return $newNr; } /** * Eintragen der URL zu einer eben erzeugten Rechnung * * @author Ralph Stahl * @version 20.9.2007 * @param int $countryID * @param string $rechNr * @param int $firmID * @param string $url */ function setRechnungsURL($countryID, $rechNr, $firmID, $url) { global $Firm; $sql = "update rechnung set url = '$url', firm_id = $firmID where country_id = $countryID and nr = '$rechNr' "; $Firm->query($sql, __FILE__, __LINE__); return; } /** * liefert die URLzu einem Rechnungs-File * * @author Ralph Stahl * @version 20.9.2007 * @param int $rechnID * @return string */ function getRechnungsURL($rechnID) { global $Firm; $url = ''; $sql = "select url from rechnung where rechn_id = $rechnID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $url = mysql_result($rs, 0); return $url; } /** * alle Rechnungen einer Firma * * @author Ralph Stahl * @version 20.9.2007 * @param int $firmID * @return array */ function getRechnungenByFirmID($firmID) { global $Firm; $arrRech = array(); $sql = "select * from rechnung where firm_id = $firmID order by created desc "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) while($row = mysql_fetch_assoc($rs)) $arrRech[] = $row; return $arrRech; } /** * alle Rechnungen einer Domain * * @author Dirk Jänsch * @version 01.11.2007 * @param $datum_von, $datum_bis * @return array */ function getRechnungenByDomain($datum_von, $datum_bis) { global $Firm; $arrRech = array(); // sa darf überall rechnungen sehen if ($_SESSION['ACCESSLEVEL'] == 9) { $sql = "select * from rechnung where country_id = ".$_SESSION['COUNTRYID']." AND (created BETWEEN '".$datum_von."' AND '".$datum_bis."') order by created desc"; } // wenn la nur auf der eigenen domain auf fremden domains werden ihm keine rechnungen angezeigt if ($_SESSION['ACCESSLEVEL'] == 7) { $sql = "select * from rechnung where country_id = ".$_SESSION['COUNTRYID']." AND country_id = ".$_SESSION['ADMINCOUNTRY']." AND (created BETWEEN '".$datum_von."' AND '".$datum_bis."') order by created desc"; } // echo "<<< $sql <<<"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) while($row = mysql_fetch_assoc($rs)) $arrRech[] = $row; return $arrRech; } // ---------------------------------------- // Ende Rechnungen // ---------------------------------------- /** * gibt die Daten eines Adminusers zur�ck * * @author Ralph Stahl * @version 23.10.2006 * @param int $adminUserID * @return array */ function getAdminUser($userID) { global $Firm; $arrUser = array(); $sql = "select * from adminuser where adminuser_id=$userID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $arrUser = mysql_fetch_assoc($rs); return $arrUser; } /** * gibt die Mailadresse eines Adminusers zur�ck * * @author Ralph Stahl * @version 3.11.2006 * @param int $accessLevel default 0 * @param int $countryID default 0 * @return array Mailadresse, ggf. mehrere bei zB. Kundenbetreuern */ function getAdminMail($accessLevel, $countryID = 0) { global $Firm; $arrAdr = array(); $sql = "select email from adminuser where accesslevel = $accessLevel "; if($countryID) $sql .= " and country_id = $countryID"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) while($row = mysql_fetch_row($rs)) $arrAdr[] = $row[0]; return $arrAdr; } /** * z�hlt die Besucher der Indexseite * * @author Ralph Stahl * @version 16.5.2007 * @param int $countryID default 0, mit !=0 erfolgt (nur) die Ausgabe f�r ein bestimmtes land * @return int $counter */ function countVisitors($countryID = 0) { global $Firm; $lifetime = $_SESSION['IP_LIFETIME']; //Lebenszeit der IP-Sperre in Sekunden $countOnly = $countryID; // nur Z�hlerstand zur�ckgeben, wenn ID �bergeben $countryID = $countryID ? $countryID : $_SESSION['COUNTRYID']; $ip = $_SERVER['REMOTE_ADDR']; $now = time(); // f�r die Zeitstempel in der DB $Firm->beginTransaction(); // den alten Z�hlerstand f�r das Land holen $sql = "select counter from viewcount where country_id = $countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) { $counter = $old = mysql_result($rs, 0); // der alte Z�hlerstand } else { // falls das land nicht greifbar ist $sql = "insert into viewcount ( country_id, counter ) values ( $countryID, 1 )"; $Firm->query($sql, __FILE__, __LINE__); // $Firm->rollbackTransaction(); // return -1; } if(! $countOnly) { // war die IP schon da oder wurde sie schon wieder gel�scht? $sql = "select last from viewcountip where ip = '$ip'"; // kein oder genau 1 Eintrag $rs = $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) { // IP war schon da! $last = mysql_result($rs, 0); // letztes �nderungsdatum $too_old = (time() - $last) > $lifetime; // Lebenszeit �berschritten? if($too_old) { // die IP war schon da, aber zu alt // den neuen Z�hlerstand setzen: $counter = $new = $old + 1; $sql = "update viewcount set counter = $new where country_id = $countryID"; $Firm->query($sql, __FILE__, __LINE__); } // bei der vorhandenen IP das Besuchsdatum auf JETZT setzen: $sql = "update viewcountip set last = $now where ip = '$ip' "; $Firm->query($sql, __FILE__, __LINE__); } else { // IP war noch nicht vorhanden // die neue IP merken, Besuchsdatum setzen: $sql = "insert into viewcountip ( ip, last ) values ( '$ip', $now )"; $Firm->query($sql, __FILE__, __LINE__); // den Z�hler in der DB erh�hen $counter = $new = $old + 1; $sql = "update viewcount set counter = $new where country_id = $countryID"; $Firm->query($sql, __FILE__, __LINE__); } } // if(! $countOnly) $Firm->commitTransaction(); return $counter; } /** * Aufrufz�hler: l�schen der unbenutzen IPS nacheinem Zeitraum * * @author Ralph Stahl * @version 1.11.2006 * @param - * @return - */ function deleteOldIPs() { global $Firm; $killtime = $_SESSION['IP_KILLTIME']; // Tage, nach deneneine IP aus der Z�hlliste gel�scht werden soll $killtime = 60 * 60 * 24 * $killtime; // = Sekunden $now = time(); // jetzt $too_old = $now - $killtime; // maximales Alter $sql = "delete from viewcountip where last < $too_old "; $Firm->query($sql, __FILE__, __LINE__); } /** * exportierern der Log-Tabelle als CSV-Text * Trenner: Tab, Zeilenende \r\n * * @version 3.5.2007 R. Stahl * @return string Filename */ function exportLogtable() { global $Admin; $filename = '../_csv/' . date('Ymd') . '_userlog.csv'; $sql = 'select * from userlog'; $rs = $Admin->query($sql, __FILE__, __LINE__); // echo "###{$Admin->numRows}###"; if($rs && $Admin->numRows) { // File anlegen: // ------------- if(! $f = fopen($filename, 'w+')) { print_r(error_get_last()); return ''; // nicht gelungen } // Daten schreiben: // ---------------- while($row = mysql_fetch_assoc($rs)) { extract($row); $s = "\"$time\"\t\"$sourceuser\"\t\"$targetuser\"\t\"$action\"\r\n"; fwrite($f, $s); } fclose($f); } else return ''; // DB-Tabelle leer, nichts zu schreiben return $filename; } /** * exportierern der Log-Tabelle als CSV-Text * Trenner: Tab, Zeilenende \r\n * * @version 3.5.2007 R. Stahl * @return string Filename */ function export_bezahlte_rechnungen() { global $Admin; $filename = '../_csv/' . date('Ymd') . '_rechnungen.csv'; $sql = 'select * from rechnung_bez where status = 1'; $rs = $Admin->query($sql, __FILE__, __LINE__); // echo "###{$Admin->numRows}###"; if($rs && $Admin->numRows) { // File anlegen: // ------------- if(! $f = fopen($filename, 'w+')) { print_r(error_get_last()); return ''; // nicht gelungen } // Daten schreiben: // ---------------- while($row = mysql_fetch_assoc($rs)) { extract($row); $s = "\"$cnr\",\"$cnr_bez\",\"$country_id\",\"$datum\",\"$rech_betrag\",\"$rech_nr\"\r\n"; fwrite($f, $s); } fclose($f); } else return ''; // DB-Tabelle leer, nichts zu schreiben return $filename; } /** * leeren der Log-Tabelle * * @version 2.5.2007 R. Stahl * @return boolean */ function flushLogtable() { global $Admin; $ok = FALSE; $sql = 'truncate table userlog'; $Admin->query($sql, __FILE__, __LINE__); $sql = 'select count(*) from userlog'; $rs = $Admin->query($sql, __FILE__, __LINE__); if($rs && $Admn->numRows == 0) // Tabelle leer? $ok = TRUE; return $ok; } // ========================== // Branchendaten // ========================== /** * eine Branche in der ersten Sprache eintragen (englisch) * * Es wird zunchst nur der englische Eintrag erzeugt, * der sowieso immer gebraucht wird. Die anderen Sprachen * werden dann mit appendBranchLanguage() nachgesetzt. * * @author Ralph Stahl * @version 18.1.2007 * @param int $langID * @param int $countryID * @param string $nameLocal * @param int $branchKeyID default=0: neue Branche, sonst Verknpfung mit bestehnder * @return array Array mit erzeugter branchkey_id/branch_id */ function insertBranch($langID, $countryID, $nameLocal, $branchKeyID = 0) { global $Firm; $Firm->beginTransaction(); // notwendig, da ber mehrere Tabellen $arrID = array(); // fr return $arrID['branchkeyID'] = 0; $arrID['branchID'] = 0; // beim ersten mal: englisch: langID(en) + countryID(UK) if($branchKeyID == 0) { $countryID = $_SESSION['COUNTRYID']; $langID = $_SESSION['LANGID']; } // zuerst Inhalt in Branchen-Tabelle schreiben: $sql = "insert into branches ( lang_id, country_id, name_local, locked ) values ( $langID, $countryID, '$nameLocal', 1 )"; // echo "immer wenn fkt aufgerufen -> ".$sql."
"; $Firm->query($sql, __FILE__, __LINE__); $branchID = $Firm->getLastInsertID(); // erzeugte Branchen-ID $arrID['branchID'] = $branchID; // fr return merken // neuen Verknpfungsschlssel erzeugen,wenn noch keiner da ist: if($branchKeyID == 0) { // erzeugte Branche in Verknpfungstabelle merken, // dabei wird Verknpfungs-ID (branchkey_id) erzeugt $sql = "insert into branchkey (branchname_int) values ('')"; // nur um den Key zu erzeugen! // echo "nur wenn neue branche zugefügt -> ".$sql."
"; $Firm->query($sql, __FILE__, __LINE__); $branchKeyID = $Firm->getLastInsertID(); // erzeugte Verknpfungs-ID $arrID['branchkeyID'] = $branchKeyID; // fr return merken } // Verknpfungs-ID in erzeugter Branche eintragen: $sql = "update branches set branchkey_id=$branchKeyID where branch_id=$branchID "; // echo "immer wenn fkt aufgerufen -> ".$sql."

"; $Firm->query($sql, __FILE__, __LINE__); $updated = $Firm->getAffectedRows(); // mu genau ==1 sein if($updated == 1) { // gelungen? $Firm->commitTransaction(); } else { // nein! $Firm->rollbackTransaction(); } // beide erzeugten IDs zurckgeben return $arrID; } /** * Eintrag fr des internationalen Namens der branche in Tab BranchKey * * @author Ralph Stahl * @version 21.7.2006 * @param int $branchKeyID Branchen-KeyID * @param string $branchnameInt internationaler Name der Branche * @return boolean */ function updateBranchnameInt($branchKeyID, $branchNameInt) { global $Firm; $sql = "update branchkey set branchname_int='$branchNameInt' where branchkey_id=$branchKeyID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * weitere Sprache in eine Branche eintragen (nicht benutzt?) * * @author Ralph Stahl * @version 7.6.2006 * @param int $branchID Branchen-ID,die erweitert werden soll * @param array $arrData Array mit Daten, i.d.R. $_POST * @return array Array mit erzeugte branchkey_id/branch_id */ function appendBranchLanguage($branchID, $langID, $countryID, $nameLocal) { return insertBranch($langID, $countryID, $nameLocal, getBranchKeyID($branchID)); } /** * eine Branche lschen ber den Verbindungsschlssel * * Dabei mu zuerst der Eintrag in branches gelscht werden, dann in branchkey * und das auch nur, wenn kein Verweis darauf in branchoffirms steht * (das wird durch die Constraints verhindert). * Da der Constraint erst zum Schlu wirkt, ist eine Transaction notwendig! * * @author Ralph Stahl * @version 10.7.2006 * @param int $branchKeyID Verbindungsschlssel der zu lschenden Branche * @return int TRUE=0; FALSE=Fehlercode heit Verhinderung durch Constraint */ function deleteBranchByKey($branchKeyID) { global $Firm; $Firm->beginTransaction(); // notwendig, da ber mehrere Tabellen mit Constraint // alle mehrsprachigen Brancheneintrge in Branchentabelle lschen: $sql = "delete from branches where branchkey_id=$branchKeyID "; $Firm->query($sql, __FILE__, __LINE__); // den Verbindungsschlssel fr alle Spracheintrge einer Branche lschen // hier wirkt der Constraint, wenn es Verweise in Tab. FIRM darauf gibt!) $sql = "delete from branchkey where branchkey_id=$branchKeyID "; $Firm->query($sql, __FILE__, __LINE__); // ggf. Constraint! if($Firm->numRows == 1) { // nur die Zahl der gelschten Zeilen ist das kriterium, nicht TRUE/FALSE! $Firm->commitTransaction(); return TRUE; // 1 Satz gelscht } else { $Firm->rollbackTransaction(); return FALSE; // nichts gefunden oder Constraint aufgetreten -> Fehlernummer } } /** * eine Branche lschen ber die Branchen-ID * * (damit werden auch alle Eintrge der gleichen Branche in anderen Sprachen gelscht) * * @author Ralph Stahl * @version 8.6.2006 * @param int $branchID Branchen-ID * @return int TRUE=0; FALSE=Fehlercode heit Verhinderung durch Constraint */ function deleteBranchByID($branchID) { global $Firm; $branchKeyID = getBranchKeyID($branchID); // Lschen aller Eintrge in branches, // die ber den Verbindungsschlssel verbnden sind: return deleteBranchByKey($branchKeyID); } /** * den Verbindungsschlssel einer Branche auslesen * * @author Ralph Stahl * @version 8.6.2006 * @param int $branchID Branchen-ID * @return int $branchKeyID */ function getBranchKeyID($branchID) { global $Firm; $sql = "select branchkey_id from branches where branch_id=$branchID "; $rs = $Firm->query($sql, __FILE__, __LINE__); return mysql_result($rs, 0); } /** * eine Branche inhaltlich ndern * * @author Ralph Stahl * @version 28.6.2006 * @param int $branchID Branchen-ID * @param $nameLocal fremdsprachlicher Name der Branche * @return boolean */ function updateBranch($branchID, $nameLocal) { global $Firm; $sql = "update branches set name_local='$nameLocal' where branch_id=$branchID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * registrierte Branchen einer Firma auslesen in der eingestellten Sprache * * @author Ralph Stahl * @version 28.11.2006 * @param int $firmID Firmen-ID + @param string $withID Ausgabe als assoc. Arr. mit $ranchID * @return array alle Eintrge */ function getBranchesOfFirm($firmID, $withID = '') { global $Firm; /* wird wohl nie benutzt? // Ländereinstellungen der Firma auslesen: // --------------------------------------- // $sql = "select country_id, lang_id from firm where firm_id=$firmID"; $sql = "select country_id from firm where firm_id=$firmID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $row = mysql_fetch_assoc($rs); $countryID = $row['country_id']; */ // aktuelle Sprache: $langID = $_SESSION['LANGID']; if($langID) { // lokal $sql = "select b.branch_id, b.name_local from branches b, branchesoffirms bf where b.lang_id = $langID and b.branchkey_id = bf.branchkey_id and bf.firm_id = $firmID group by b.branch_id "; } else // international $sql = "select b.branch_id, bk.branchname_int from branches b, branchkey bk, branchesoffirms bf where bf.firm_id = $firmID and b.branchkey_id = bf.branchkey_id and bk.branchkey_id = b.branchkey_id group by bk.branchname_int "; $rs = $Firm->query($sql, __FILE__, __LINE__); // Liste aller Branchen der Firma $arrBranchnames = array(); if($rs && $Firm->numRows) { if($langID) { // lokal if(! $withID) { while($row = mysql_fetch_assoc($rs)) array_push($arrBranchnames, $row['name_local']); } else { while($row = mysql_fetch_assoc($rs)) $arrBranchnames[$row['branch_id']] = $row['name_local']; } } else { // international if(! $withID) { while($row = mysql_fetch_assoc($rs)) array_push($arrBranchnames, $row['branchname_int']); } else { while($row = mysql_fetch_assoc($rs)) $arrBranchnames[$row['branch_id']] = $row['branchname_int']; } } } else return array(); return $arrBranchnames; } /** * Eine Branche einer Firma lschen (nur den Verweis!) * * @author Ralph Stahl * @version 8.6.2006 * @param int $firmID Firmen-ID * @param int $branchKeyID Branchen-keyID bezglich der Firma * @return boolean */ function deleteBranchOfFirm($firmID, $branchKeyID) { global $Firm; $sql = "delete from branchesoffirms where firm_id=$firmID and branchesoffirm_id=$branchKeyID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Alle Branchen-IDs zurckgeben (Spracheintrge), die mit ener Branche verknpft sind * * @author Ralph Stahl * @version 2.1.2007 * @param int $branchKeyID BranchenKey-ID * @param int $countryID default = 0 * @return array Liste der Sprachentrge */ function getBranchIDsByBranchKeyID($branchKeyID, $countryID = 0) { global $Firm; $arrBranchIDs = array(); $sql = "select branch_id, country_id from branches where branchkey_id=$branchKeyID"; if($countryID) $sql .= " and country_id = $countryID"; $sql .= " order by country_id"; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows) { while($row = mysql_fetch_array($rs, MYSQL_NUM)) array_push($arrBranchIDs, $row[0]); } else return FALSE; return $arrBranchIDs; } /** * Eine Branche zurckgeben * * @author Ralph Stahl * @version 23.6.2006 * @param int $branchID BranchenKey-ID * @return array assoc. ein Brancheneintrag */ function getBranchByID($branchID) { global $Firm; $sql = "select * from branches where branch_id=$branchID "; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); } else return FALSE; return $row; } /** * Eine Branchid zurückgeben anhand branchkey_id, Land * * @author Dirk Jänsch * @version 24.8.2010 * @return array assoc. ein Brancheneintrag */ function getBranchIdByBranchKeyIDForIndex($branchkeyID, $countryID) { global $Firm; $sql = "select branch_id from branches WHERE branchkey_id = $branchkeyID AND country_id = $countryID"; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); $bid = $row['branch_id']; } else return FALSE; return $bid; } /** * Eine Branche zurückgeben anhand branchkey_id, Land und Sprache * * @author Dirk Jänsch * @version 24.8.2010 * @return array assoc. ein Brancheneintrag */ function getBranchByBranchKeyID($branchkeyID, $countryID, $langID) { global $Firm; $sql = "select * from branches WHERE branchkey_id = $branchkeyID AND country_id = $countryID AND lang_id = $langID"; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); } else return FALSE; return $row; } /** * Eine Branchennamen in englkisch zurckgeben anhand $branchkeyID * * @author Dirk J�nsch * @version 18.6.2009 * @param int $branchkeyID BranchenKey-ID * @return array assoc. ein Brancheneintrag */ function getBranchNameByID_englisch($branchkeyID) { global $Firm; $sql = "select branchname_int from branchkey where branchkey_id=$branchkeyID "; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); } else return FALSE; return $row; } /** * Eine Branche zurckgeben in englisch, es wird der datensatz von Uk genommen * * @author Dirk J�nsch * @version 18.6.2009 * @param int $branchkeyID BranchenKey-ID * @return array assoc. ein Brancheneintrag */ function getBranchByID_englisch($branchkeyID) { global $Firm; // hole alle L�nder und suche UK, um die englische sprache aus der branchentabelle auszulesen $laender = listCountries(); foreach ($laender as $key => $value) { if ($value == "United Kingdom") $country = $key; } $sql = "select * from branches where branchkey_id=$branchkeyID and country_id = $country "; // echo "###$sql###"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); } else return FALSE; return $row; } /** * Die Notiz zu einer Branche in der Tabelle branchkey zurckgeben * * @author Ralph Stahl * @version 21.7.2006 * @param int $branchKeyID BranchenKey-ID * @return string internationale Bezeichnung der Branche */ function getBranchnameIntByKeyID($branchKeyID) { global $Firm; $sql = "select branchname_int from branchkey where branchkey_id=$branchKeyID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows == 1) { return mysql_result($rs, 0); } else return FALSE; } /** * Liste aller Branches * * @author Ralph Stahl * @version 2.11.2006 * @param int $country Land, in dem ungesperrte branchen gesucht werden * @param int $langID Sprache der ausgegebenen Branchen * @param string $like optional Einschr�nkung mit Suchbegriff %like% * @param string $locked '' oder 'locked', Ber�cksichtigt die Branchensperre * @return array assoc. Liste der lokalen Namen der Branchen */ function listBranchesForSelect($countryID, $langID, $like = '', $locked = '') { global $Firm; $arrBranches = array(); // zur Rckgabe // wenn langID mitgegeben, dann Sprache der Branche nehmen sonst international if ($langID != 0) { if($like) $search = " and name_local like '%$like%'"; if(preg_match('/^\w*\*$/i', $like)) $search = " and name_local like '".substr($like, 0, strlen($like)-1)."%'"; // $countryID: Ziel-Land, Sprache egal $sql = "select branch_id, name_local from branches where country_id=$countryID and lang_id = $langID "; if(isset($locked)) $sql .= " and locked=0"; $sql .= " $search"; // echo $sql; // bei mehrsprachigen L�ndern kommen hier mehrere Ergebnisse pro Land! $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows) while($row = mysql_fetch_assoc($rs)) $arrBranches[$row['branch_id']] = htmlspecialchars_decode($row['name_local']); asort($arrBranches); } else { if($like) $search = " and branchname_int like '%$like%'"; if(preg_match('/^\w*\*$/i', $like)) $search = " and branchname_int like '".substr($like, 0, strlen($like)-1)."%'"; // $countryID: Ziel-Land, Sprache egal $sql = "select bk.branchname_int, b.branch_id from branchkey bk, branches b where bk.branchkey_id = b.branchkey_id and b.country_id = $countryID and b.locked = 0 $search"; // bei mehrsprachigen L�ndern kommen hier mehrere Ergebnisse pro Land! $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs and $Firm->numRows) while($row = mysql_fetch_assoc($rs)) $arrBranches[$row['branch_id']] = htmlspecialchars_decode($row['branchname_int']); asort($arrBranches); } // echo $sql; return $arrBranches; } /** * sperren/entsperren einer Branche * * @author Ralph Stahl * @version 16.7.2006 * @param int $brancID * @param int $status 0,1 = BRANCH_LOCK/BRANCH_UNLOCK * @return int Anzahl der genderten Zeilen > 0 */ function assignBranchLock($branchID, $status) { global $Firm; $sql = "select branchkey_id, country_id from branches where branch_id=$branchID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $row = mysql_fetch_assoc($rs); $branchKeyID = $row['branchkey_id']; $countryID = $row['country_id']; $sql = "update branches set locked = $status where branchkey_id = $branchKeyID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows; } /** * sperren/entsperren einer MPH-Gruppe * * @author Dirk Jänsch * @version 16.04.2009 * @param int $groupID * @param int $status 0,1 = BRANCH_LOCK/BRANCH_UNLOCK * @return int Anzahl der genderten Zeilen > 0 */ function assignGroupLock($groupID, $status) { global $Firm; $sql = "select groupkey_id, country_id from groups where group_id=$groupID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $row = mysql_fetch_assoc($rs); $groupKeyID = $row['groupkey_id']; $countryID = $row['country_id']; $sql = "update groups set locked = $status where groupkey_id = $groupKeyID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows; } /** * sperren/entsperren einer MPU-Gruppe * * @author Dirk Jänsch * @version 16.04.2009 * @param int $subgroupID * @param int $status 0,1 = BRANCH_LOCK/BRANCH_UNLOCK * @return int Anzahl der genderten Zeilen > 0 */ function assignSubGroupLock($subgroupID, $status) { global $Firm; $sql = "select subgroupkey_id, country_id from subgroups where subgroup_id=$subgroupID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $row = mysql_fetch_assoc($rs); $subgroupKeyID = $row['subgroupkey_id']; $countryID = $row['country_id']; $sql = "update subgroups set locked = $status where subgroupkey_id = $subgroupKeyID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows; } /** * iste der Branchen, die einem Land zugeordnet sind * * @author Ralph Stahl * @version 21.7.2006 * @param int $isoCountry * @return array Array mit branchkey_id->branch_id */ function getBranchkeysByCountry($countryID) { global $Firm; $retArray = array(); $sql = "select branchkey_id, branch_id from branches where country_id=$countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm-numRows) { $i = 0; while($row = mysql_fetch_assoc($rs)) { $retArray[$i][0] = $row['branchkey_id']; $retArray[$i][1] = $row['branch_id']; $i++; // $retArray[$row['branchkey_id']] = $row['branch_id']; } } else return FALSE; return $retArray; } /** * Alle Branchen einer Firma abhngen (Tab. branchesoffirms) * * @author Ralph Stahl * @version 4.8.2006 * @param int $firmID * @return boolean */ function deleteBranchesOfFirm($firmID) { global $Firm; $sql = "delete from branchesoffirms where firm_id = $firmID "; $Firm->query($sql, __FILE__, __LINE__); return TRUE; } /** * Alle Branchen zählen für ein Land und eine Sprache * * @author Ralph Stahl * @version 24.11.2006 * @param - * @return int */ function countAllBranches($countryID, $langID) { global $Firm; $count = 0; // wenn in Session LANGID = 0 ist (englische Sprache in Deutschland !) if ($langID == 0) { $sql = "select count(bk.branchkey_id) from branches b, branchkey bk where b.branchkey_id = bk.branchkey_id and b.country_id = $countryID and b.locked = 0 group by bk.branchkey_id "; $rs = $Firm->query($sql, __FILE__, __LINE__); while($row = mysql_fetch_assoc($rs)) $anzahl[] = $row; $count = sizeof($anzahl); } else { $sql = "select count(branchkey_id) from branches where country_id = $countryID and lang_id = $langID and locked = 0 "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $count = mysql_result($rs,0); } return $count; } /** * Alle Branchen zählen (international) ohne Berücksichtigung von Sperren * * @author Dirk Jänsch * @version 31.07.2007 * @param - * @return int */ function countAllBranchkeys() { global $Firm; $count = 0; $sql = "select count(branchkey_id) from branchkey"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $count = mysql_result($rs,0); return $count; } /** * Alle Visits aus allen Ländern zählen * * @author Dirk Jänsch * @version 31.07.2006 * @param - * @return int */ function countAllVisits() { global $Firm; $count = 0; $sql = "select sum(counter) from viewcount"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $count = mysql_result($rs,0); return $count; } /** * Alle Offers aus allen Ländern zählen mit berücksichtigung der Sperren * * @author Dirk Jänsch * @version 31.07.2006 * @param - * @return int */ function countAllOffers() { global $Firm; $count = 0; $sql = "select count(offer_id) from offers WHERE userlocked=0 AND adminlocked=0 AND status = 2"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $count = mysql_result($rs,0); return $count; } /** * Suche nach Branchen in einem Land (Admin) * * @version 4.5.2007 R. Stahl * @param int $countryID * @param int $langID = 0 * @param string $search * @return array = array($branchKeyID, $nameLocal, $nameInt) */ function searchBranches($search, $countryID, $langID = 0) { global $Admin; $branches = array(); list($search) = split(' ', $search); // ggf. nur der erste Teil $sql = "select br.branchkey_id, br.name_local, bk.branchname_int from branches br, branchkey bk where name_local like '%$search%' and country_id = $countryID and br.branchkey_id = bk.branchkey_id"; if($langID) $sql .= " and lang_id = $langID"; $rs = $Admin->query($sql, __FILE__, __LINE__); if($rs && $Admin->numRows) while($row = mysql_fetch_assoc($rs)) $branches[] = array( 'branchKeyID' => $row['branchkey_id'], 'nameLocal' => $row['name_local'], 'nameInt' => $row['branchname_int'] ); return $branches; } // ========================== // Firmen // ========================== /** * eine Firma: Status "online" setzen * * @author Ralph Stahl * @version 23.6.2006 * @param int $firmID Firmen-ID * @return boolean TRUE/FALSE */ function setFirmOnline($firmID) { global $Firm; $sql = 'update firm set access='.FIRM_ONLINE." where firm_id=$firmID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * eine Firma: Status "locked" setzen * * @author Ralph Stahl * @version 23.6.2006 * @param int $firmID Firmen-ID * @return boolean TRUE/FALSE */ function setFirmLocked($firmID) { global $Firm; $sql = 'update firm set access='.FIRM_LOCKED." where firm_id=$firmID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * eine Filialkette: Status "online" setzen * * @author Ralph Stahl * @version 23.6.2006 * @param int $divisionID Filial-ID * @return boolean TRUE/FALSE */ function setDivisionsOnline($divisionID) { global $Firm; $sql = 'update firm set access='.FIRM_ONLINE." where division_id=$divisionID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * eine Filialkette: Status "locked" setzen * * @author Ralph Stahl * @version 23.6.2006 * @param int $divisionID Filial-ID * @return boolean TRUE/FALSE */ function setDivisionsLocked($divisionID) { global $Firm; $sql = 'update firm set access='.FIRM_LOCKED." where division_id=$divisionID "; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * suche die höchste firm_id * * @author Dirk Jänsch * @version 10.12.2008 * @return int höchste firmid */ function maxFirmId() { global $Firm; $sql = "SELECT max(firm_id) FROM firm"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $anz = mysql_result($rs, 0); return $anz; } /** * Liste aller Firmen, Auswahl ber where-Klausel mglich (zB. 'access=ONLINE' * * @author Ralph Stahl * @version 23.6.2006 * @param string $where optional Where-Klausel * @return array $firmID */ function getFirmIDs($where = '1=1') { global $Firm; $arrFirms = array(); $sql = "select firm_id from firm where $where"; // echo $sql; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_array($rs, MYSQL_NUM)) array_push($arrFirms, $row[0]); } else return FALSE; sort($arrFirms); return $arrFirms; } /** * Erzeugt ein Array Emailadressen * @author Ralph Stahl * @version 23.7.2007 * @param string $divisionID * @return array $firmID */ function getFirmsEmailsByCountry($countryId) { global $Firm; $arrMails = array(); if(! $countryId) return $arrMails; $sql = "select mailadmin from firm where country_id = $countryId and access = 1"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) while($row = mysql_fetch_array($rs, MYSQL_NUM)) $arrMails[] = $row[0]; sort($arrMails); return $arrMails; } /** * Liste aller Filialen einer Kette * * @author Ralph Stahl * @version 23.7.2007 * @param string $divisionID * @return array $firmID */ function getFirmsByDivisionID($divisionID, $all = FALSE) { global $Firm; $arrFirms = array(); if(! $divisionID) return $arrFirms; $sql = "select firm_id from firm where division_id = $divisionID "; // nur die im Portal sichtbaren Filialen: if(! $all) $sql .= " and status > 4 and access = 1"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) while($row = mysql_fetch_array($rs, MYSQL_NUM)) $arrFirms[] = $row[0]; sort($arrFirms); return $arrFirms; } /** * Bestimmung,ob die Firma $firmID die älteste in einer Filalkette ist * * @author Ralph Stahl * @version 9.3.2007 * @param int $firmID * @return boolean */ function isOldestDivision($firmID) { global $Firm; $arrFirms = array(); // alle Firmen raussuchen, die in der gleichen Filialkette sind: // ------------------------------------------------------------- $sql = "select division_id from firm where firm_id = $firmID"; $rs = $Firm->query($sql, __FILE__, __LINE__); $divisionID = mysql_result($rs, 0); $sql = "select firm_id, created from firm where division_id = $divisionID order by created asc "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_assoc($rs)) $arrFirms[$row['created']] = $row['firm_id']; } else return FALSE; $firmIDs = array_values($arrFirms); // nur die firmIDs return ($firmIDs[0] == $firmID) ? TRUE : FALSE; // ist die älteste Firma die übergebene? } /** * Preis für eine neue Firma in einer Filialkette mit Rabattbildung * * @param int $newFirmID * @param int $oldDivisionID * @return float $price */ function getNewDivisionPrice($newFirmID, $oldDivisionID) { global$Firm; $price = 0; // Anzahl der bisherigen Filialen + 1 neue // --------------------------------------- $count = $Firm->countDivisionMembers($oldDivisionID) + 1; // Land und Branchenzahl der neuen Firma // ------------------------------------- $sql = "select country_id, maxbranchescount from firm where firm_id = $newFirmID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $row = mysql_fetch_row($rs); $countryID = $row[0]; $branchesCount = $row[1]; // Der Basispreis für das Land der neuen Firma: // -------------------------------------------- $sql= "select baseprice$branchesCount from countries where country_id = $countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $basePrice = mysql_result($rs, 0); // Rabattbildung: // -------------- if($count < GRENZE1) { $price = $basePrice * RABATT1 / 100; } elseif($count < GRENZE2) { $price = $basePrice * RABATT2 / 100; } else { $price = $basePrice * RABATT3 / 100; } return round($price, 2); } /** * Statustext zurückgeben * * @author Dirk Jaensch * @version 02.9.2006 * @param $status * @return Status in landessprache **/ function get_status_anzeige($status) { global $Firm; global $TX; // Einstellung der Textsprache // Standardsprache, wenn Sprachfile nicht da: englisch en_UK if(! $TX = getLangFromFile($_SESSION['LANG'], $_SESSION['COUNTRY'])) $TX = getLangFromFile('en', 'UK'); if ($status == 1) return $TX['tx_register']; if ($status == 2) return $TX['tx_r-stell']; if ($status == 4) return $TX['tx_r-open']; if ($status == 8) return $TX['tx_r-bez']; if ($status == 16) return $TX['tx_r-ku']; } // ========================== // Länder/Regionen // ========================== /** * Land einfügen * * FLOAT-Werte beachten! * * $arrData: * string $isoCountry, string $countryNameLocal, string $countryNameEn, * float $basePrice4, float $basePrice8, float $tax * * @author Ralph Stahl * @version 1.11.2006 * @param array $arrData $_POST-Array * @return int $countryID/FALSE */ function insertCountry($arrData) { global $Firm; $id = 0; extract($arrData); $isoCountry = strtoupper($isoCountry); $basePrice = str2float($basePrice); if($basePrice === NULL) return FALSE; $tax = str2float($tax); if($tax === NULL) return FALSE; $exchangedate = date('Y-m-d'); $sql = "insert into countries ( iso_country, countryname_local, countryname_en, baseprice4, baseprice8, exchange, exchangedate, currency, bankname, kto, blz, iban, swift, ktoname, ktostr, ktozusatz, ktoplz, ktoort, ktotel, ktofax, ktoweb, ktomail, taxno, taxid, hreg, tax, domain, steuername ) values ( '$isoCountry', '$countryNameLocal', '$countryNameEn', $basePrice4, $basePrice8, $exchange, '$exchangedate', '$currency', '$bankname', '$kto', '$blz', '$iban', '$swift', '$ktoname', '$ktostr', '$ktozusatz', '$ktoplz', '$ktoort', '$ktotel', '$ktofax', '$ktoweb', '$ktomail', '$taxno', '$taxid', '$hreg', $tax, '$domain', '$steuername' )"; $Firm->query($sql, __FILE__, __LINE__); $id = $Firm->numRows; // gelungen? // Land auch in die Z�hler-tabelle einf�gen $sql = "insert into viewcount ( country_id, counter ) values ( $id, 0 )"; $Firm->query($sql, __FILE__, __LINE__); return $id ; // erzeugte Landes-ID oder 0 } /** * Land lschen * * Constraints nach lang, branches, regions, firms, actioncodes mglich! * * @author Ralph Stahl * @version 14.7.2006 * @param int $countryID * @return int numRows/FALSE */ function deleteCountry($countryID) { global $Firm; $Firm->beginTransaction(); $sql = "delete from countries where country_id=$countryID"; $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows ==1) { // genau ein Eintrag gelscht $Firm->commitTransaction(); return TRUE; } else { $Firm->rollbackTransaction(); return $mysql_errno(); // Constraints aufgetreten -> Fehlernummer 1451 } } /** * Land berschreiben * * $arrDAta: * string $nameLocal, string $nameEn, * float $basePrice4, float $Baseprice8, float $tax * * @author Ralph Stahl * @version 29.6.2006 * @param array $arrData POST-Array * @return int numRows/FALSE */ function updateCountry($countryID, $arrData) { global $Firm; extract($arrData); $baseprice4 = str2float($baseprice4); if($baseprice4 === NULL) return FALSE; $baseprice8 = str2float($baseprice8); if($baseprice8 === NULL) return FALSE; $tax = str2float($tax); if($tax === NULL) return FALSE; $exchangedate = date('Y-m-d'); $iso_country = strtoupper($iso_country); $sql = "update countries set iso_country = '$iso_country', countryname_local = '$countryname_local', countryname_en = '$countryname_en', baseprice4 = $baseprice4, baseprice8 = $baseprice8, exchange = $exchange, exchangedate = '$exchangedate', currency = '$currency', bankname = '$bankname', kto = '$kto', blz = '$blz', iban = '$iban', swift = '$swift', ktoname = '$ktoname', ktostr = '$ktostr', ktozusatz = '$ktozusatz', ktoplz = '$ktoplz', ktoort = '$ktoort', ktotel = '$ktotel', ktofax = '$ktofax', ktoweb = '$ktoweb', ktomail = '$ktomail', taxno = '$taxno', taxid = '$taxid', hreg = '$hreg', tax = $tax, domain = '$domain', steuername = '$steuername' where country_id = $countryID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Lnder mit Sprachen als Liste auslesen * * alphabetische Reihenfolge der Values, Keys bleiben erhalten * * @author Ralph Stahl * @version 11.4.2007 * @param - * @return array $arrCountries/FALSE */ function listCountries() { global $Firm; $arrCountries = array(); // assoz. Array fr Rckgabe // Lnder in folgender Form auslesen: // "id" "Schweiz (de)" $sql = "select country_id, countryname_local, countryname_en from countries"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_assoc($rs)) { if(countryHasEnglishOnly($_SESSION['COUNTRYID']) || $_SESSION['LANG'] == 'en') { $arrCountries[$row['country_id']] = $row['countryname_en']; } else $arrCountries[$row['country_id']] = $row['countryname_local']; } asort($arrCountries); // alphabetische Reihenfolge der Values, Keys bleiben erhalten return $arrCountries; } else return FALSE; } /** * alle Daten eines Landes holen * * @author Ralph Stahl * @version 15.6.2007 * @param int $country Lnder-ID oder iso-Krzel * @return array */ function getCountry($country) { global $Firm; $arrCountry = array(); // Achtung: aus Formularen kommt $country immer als String! $tmp = $country + 0; // Versuch der Wandlung: if($tmp != 0 && $tmp === $country + 0) $country = $tmp + 0; // jetzt ist $country integer // Achtung bei $country = 0, tritt aber praktisch nicht auf if(gettype($country) == 'string') { // $countryID bestimmen: $sql = "select country_id from countries where iso_country='$country'"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); $countryID = $row['country_id']; } else { // if(! $global) $Firm->close(); return FALSE; // Schreibfehler bei iso? } } else $countryID = $country; $sql = "select * from countries where country_id=$countryID"; // echo "-> $sql

"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { return mysql_fetch_assoc($rs); } else return FALSE; } /** * Landesname anhand Lnder-ID holen * * @author Ralph Stahl * @version 16.6.2006 * @param int $countryID Lnder-ID * @return string Name/FALSE */ function getCountrynameByID($countryID) { global $Firm; $sql = "select countryname_local from countries where country_id = $countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { return mysql_result($rs, 0); } else return FALSE; } /** * Abfrage, ob ein Land nur englische Sprache benutzt * * @author Ralph Stahl * @version 14.3.2007 * @param int $countryID * @return boolean */ function countryHasEnglishOnly($countryID) { global $Firm; $englishOnly = FALSE; // sicherheit, wenn keine countryID mit gleich return false if ($countryID == "") return $englishOnly; $sql = "select la.iso_lang from languages la, lang lg where lg.country_id = $countryID and la.language_id = lg.language_id "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs) { if($Firm->numRows == 1) { // genau 1 Sprache if(mysql_result($rs, 0) == 'en') $englishOnly = TRUE; } } return $englishOnly; } /** * Region einfgen * * $arrData: * string $nameLocal, string $symbol * * @author Ralph Stahl * @version 30.6.2006 * @param int $countryID * @param array $arrData * @return int neue Regions-ID oder FALSE */ function insertRegion($countryID, $arrData) { global $Firm; extract($arrData); /* wenn in der regiontabelle die steuer steht $sql = "insert into regions ( country_id, name_local, symbol, tax, steuername ) values ( $countryID, '$nameLocal', '$symbol', $tax, '$steuername' )"; */ $sql = "insert into regions ( country_id, name_local, symbol ) values ( $countryID, '$nameLocal', '$symbol' )"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Region lschen * * @author Ralph Stahl * @version 14.7.2006 * @param int $regionID * @return int $numRows/FALSE 0 = nicht vorhanden, 1 = okay, >1 = constraint-Fehler */ function deleteRegion($regionID) { global $Firm; $sql = "delete from regions where region_id=$regionID"; $Firm->query($sql, __FILE__, __LINE__); // ggf. Constraint! if($Firm->numRows ==1) { // genau ein Eintrag gelscht $Firm->commitTransaction(); return TRUE; } else { $Firm->rollbackTransaction(); return mysql_result(); // Constraints aufgetreten -> Fehlernummer 1451 } } /** * Region berschreiben * * $arrData: * string $nameLocal, string $nameEn, string $symbol * * @author Ralph Stahl * @version 29.6.2006 * @param int $regionID * @param array $arrData * @return int $numRows/FALSE */ function updateRegion($regionID, $arrData) { global $Firm; extract($arrData); /* wenn in der regiontabelle die steuer steht $sql = "update regions set name_local='$nameLocal', symbol='$symbol',tax=$tax, steuername='$steuername' where region_id=$regionID"; */ $sql = "update regions set name_local='$nameLocal', symbol='$symbol' where region_id=$regionID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Regionen als Liste auslesen * * ist keine Region vorhanden, wird der Lndername selbst zurckgegeben, regionID=0 * * @author Ralph Stahl * @version 13.6.2006 * @param - * @return array Regionsnamen */ function listRegionsByCountryID($countryID) { global $Firm; $arrRegions = array(); // assoz. Array fr Rckgabe $sql = "select region_id, name_local from regions where country_id=$countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs) { if($Firm->numRows) { while($row = mysql_fetch_assoc($rs)) { $arrRegions[$row['region_id']] = $row['name_local']; } asort($arrRegions); // alphabetische Reihenfolge der Values, Keys bleiben erhalten return $arrRegions; } else { // keine Regionen: das Land selbst zurckgeben: // Kennzeichen: RegionID = 0; $sql = "select countryname_local from countries where country_id = $countryID "; $rs = $Firm->query($sql, __FILE__, __LINE__); $arrRegions[0] = mysql_result($rs, 0); return $arrRegions; } } else return FALSE; } /** * Daten einer Region auslesen * * Rckgabe: assoc. Array mit allen Daten einer Region * * $arrData: * string $isoLang, string $langnameLocal, string $langnameEn * * @author Ralph Stahl * @version 2.7.2006 * @param ubt $regionID * @return array assoc. Array mit den Daten einer Region, sonst FALSE */ function getRegionByID($regionID) { global $Firm; $sql = "select * from regions where region_id = $regionID"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { return mysql_fetch_assoc($rs); } else return FALSE; } /** * Sprache in Tabelle 'languages' einfgen * * Voraussetzung ist das vorhandene Textfile ../lang[iso].php * * $arrData: * string $isoLang, isoCountry, string $langnameLocal, string $langnameEn * * @author Ralph Stahl * @version 29.6.2006 * @param array $arrData string $isoLang, string $langnameLocal, string $langnameEn * @return int -1: File nicht da, -2: Sprache schon da (iso), 0: FALSE, 1: TRUE */ function insertLanguage($arrData) { global $Firm; extract($arrData); // Filenamen zum Testen bilden: // $countryPath = strtolower($isoCountry); // Verzeichnisse sind klein geschrieben // $textFile = strtolower($isoLang).'.txt'; // Sprachdtatei // ist die passende Sprachdatei schon da? --> Dirk sagt! das kann hier noch gar nicht geprüft werden !!!!! // if(! is_file("../lang/$langPath/$textFile")) return -1; $Firm->beginTransaction(); // Test, ob die Sprache schon eingegeben wurde $sql = "select iso_lang from languages where iso_lang='$isoLang'"; $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) { $Firm->rollbackTransaction(); return -2; } $sql = "insert into languages ( iso_lang, langname_local, langname_en ) values ( '$isoLang', '$langnameLocal', '$langnameEn' )"; $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows == 1) { $Firm->commitTransaction(); return 1; } else { $Firm->rollbackTransaction(); return 0; } } /** * Sprache in Tabelle 'lang' einem Land zuweisen * dabei auch leere nationale Einträge für branchen, gruppen, Untergruppen erzeugen * * @author Ralph Stahl * @version 28.2.2007 * @param int $countryID Landes-ID * @param int $arrLanguageID $languageID * @return int $langID */ function assignLangToCountry($countryID, $languageID) { global $Firm; // Foreign Keys temp. ausschalten $sql = "set FOREIGN_KEY_CHECKS = 0"; $Firm->query($sql,__FILE__,__LINE__); $Firm->beginTransaction(); // Verknpfung Land/Sprache erzeugen: $sql = "insert into lang ( country_id, language_id ) values ( $countryID, $languageID )"; $Firm->query($sql, __FILE__, __LINE__); $langID = $Firm->getLastInsertID(); // erzeugte langID fr die Rckgabe // Fr jede dieser Verknpfungen mu in der Branchentabelle // jeder Eintrag um diese Sprache erweitert werden // --------------------------------------------------------- // Liste aller BranchKeys erzeugen: $sql = "select branchkey_id from branchkey"; $rs = $Firm->query($sql, __FILE__, __LINE__); $arrBranchKeys = array(); while($row = mysql_fetch_array($rs)) $arrBranchKeys[] = $row[0]; // fr jeden BranchKey einen neuen Spracheintrag erzeugen: // leere Bezeichnung und gesperrt) foreach($arrBranchKeys as $branchKeyID) { $sql = "insert into branches ( lang_id, country_id, branchkey_id, name_local, locked ) values ( $langID, $countryID, $branchKeyID, '', 0 )"; $Firm->query($sql, __FILE__, __LINE__); } // Fr jede dieser Verknpfungen mu in der Gruppentabelle // jeder Eintrag um diese Sprache erweitert werden // --------------------------------------------------------- // Liste aller GroupKeys erzeugen: $sql = "select groupkey_id from groupkey"; $rs = $Firm->query($sql, __FILE__, __LINE__); $arrGroupKeys = array(); while($row = mysql_fetch_array($rs)) $arrGroupKeys[] = $row[0]; // fr jeden groupKey einen neuen Spracheintrag erzeugen: // leere Bezeichnung und gesperrt) foreach($arrGroupKeys as $groupKeyID) { $sql = "insert into groups ( lang_id, country_id, groupkey_id, name_nat, locked ) values ( $langID, $countryID, $groupKeyID, '', 0 )"; $Firm->query($sql, __FILE__, __LINE__); } // Fr jede dieser Verknpfungen mu in der UnterGruppentabelle // jeder Eintrag um diese Sprache erweitert werden // --------------------------------------------------------- // Liste aller SubGroupKeys erzeugen: $sql = "select subgroupkey_id from subgroupkey"; $rs = $Firm->query($sql, __FILE__, __LINE__); $arrSubGroupKeys = array(); while($row = mysql_fetch_array($rs)) $arrSubGroupKeys[] = $row[0]; // fr jeden groupKey einen neuen Spracheintrag erzeugen: // leere Bezeichnung und gesperrt) foreach($arrSubGroupKeys as $subgroupKeyID) { $sql = "insert into subgroups ( lang_id, country_id, subgroupkey_id, name_nat, locked ) values ( $langID, $countryID, $subgroupKeyID, '', 0 )"; $Firm->query($sql, __FILE__, __LINE__); } $Firm->commitTransaction(); // Foreign Keys temp. einschalten $sql = "set FOREIGN_KEY_CHECKS = 1"; $Firm->query($sql,__FILE__,__LINE__); return $langID; } /** * in Tabelle 'lang' die Zuweisung einer Sprache zu einem Land aufheben * * An ein Land knnen mehrere Sprachen geknpft sein, wobei * in der tabelle "lang" mehrere Eintrge entstehen. Wird * eine Sprache vom Land entfernt, ist nur einer dieser Eintrge * zu entfernen. * * @author Ralph Stahl * @version 14.7.2006 * @param int $countryID damit getestet werden kann, da mindestens 1 Sprache bleibt * @param int $angID lang_id aus Tab. ""lang" * @return int -1, wenn die letzte Sprache gelscht werden wrde, sonst TRUE/FALSE */ function removeLangFromCountry($countryID, $langID) { global $Firm; $Firm->beginTransaction(); // Fr jede dieser Verknpfungen mu in der Branchentabelle // jeder Eintrag mit dieser Sprache gelscht werden // --------------------------------------------------------- $sql = "delete from branches where lang_id = $langID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); // Fr jede dieser Verknpfungen mu in der Untergruppentabelle // jeder Eintrag mit dieser Sprache gelscht werden // --------------------------------------------------------- $sql = "delete from subgroups where lang_id = $langID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); echo '
'; // Fr jede dieser Verknpfungen mu in der Gruppentabelle // jeder Eintrag mit dieser Sprache gelscht werden // --------------------------------------------------------- $sql = "delete from groups where lang_id = $langID and country_id = $countryID "; $Firm->query($sql, __FILE__, __LINE__); // Verbindungsschlssel Sprache/Land lschen, // wenn nicht von Constraint verhindert // ---------------------------------------- $sql = "delete from lang where lang_id=$langID"; $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows == 1) { // genau ein Eintrag gelscht $Firm->commitTransaction(); return TRUE; } else { $Firm->rollbackTransaction(); return mysql_errno(); // Constraints aufgetreten -> Fehlernummer 1451 } } /** * Sprache berschreiben * * $arrData: * string $isoLang, string $langnameLocal, string $langnameEn * * @author Ralph Stahl * @version 29.6.2006 * @param int $languageID * @param array $arrData * @return boolean TRUE/FALSE */ function updateLanguage($languageID, $arrData) { global $Firm; extract($arrData); $sql = "update languages set $iso = '{lower($isoLang', langname_local = '$langnameLocal', langname_en = '$langnameEn' where lnaguge_id = $languageID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Liste aller Sprachen fr ein Land * * zuzglich englisch bei Bedarf mit englisch * * @author Ralph Stahl * @version 11.7.2006 * @param int $countryID * @param string $asISO optional Array-Key ist ISO-Krzel, sonst ID * @param int $withEnglish optional fr Listen zuzglich englisch * @return array Languages mit Sprach-IDs oder iso-Krzeln */ function listLanguagesByCountry($country, $asISO = '', $withEnglish = 0) { // geeignete DB-Objekt nutzen oder erzeugen // (wird nicht nur im $Firm-Zusammenhang gerufen!) if($GLOBALS['Firm']) { global $Firm; $global = TRUE; } else { // require_once('config.inc.php'); require_once('class.db.php'); $Firm = new DB; // "Firm" nur wegen der gleichartigen verwendung im Folgenden! $Firm->open(); $global = FALSE; // damit in dem Fall ein close() gemacht werden kann } $arrLanguages = array(); // Achtung: aus Formularen kommt $country immer immer als String! $tmp = $country + 0; // Versuch der Wandlung: if($tmp != 0 && $tmp === $country + 0) $country = $tmp + 0; // jetzt ist $country integer // Achtung bei $country = 0, tritt aber praktisch nicht auf if(gettype($country) == 'string') { // iso_country? // $countryID bestimmen: $sql = "select country_id from countries where iso_country='$country'"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { $row = mysql_fetch_assoc($rs); $countryID = $row['country_id'];; } else { if(! $global) $Firm->close(); return FALSE; // Schreibfehler bei iso? } } else $countryID = $country; // ist schon $countryID $sql = "select lang.lang_id, languages.iso_lang, languages.langname_local from languages, lang where lang.country_id = $countryID and languages.language_id = lang.language_id "; $rs = $Firm->query($sql, __FILE__, __LINE__); // echo "###{$Firm->numRows}###"; if($rs && $Firm->numRows) { if($asISO) { while($row = mysql_fetch_assoc($rs)) { $arrLanguages[$row['iso_lang']] = $row['langname_local']; } } else { while($row = mysql_fetch_assoc($rs)) { $arrLanguages[$row['lang_id']] = $row['langname_local']; } } asort($arrLanguages); // alphabetische Reihenfolge der Values, Keys bleiben erhalten if($withEnglish) { if($asISO) { $arrLanguages['en'] = 'English'; } else { $sql = "select lang_id from lang where language_id = ( select language_id from languages where iso_lang = 'en' ) and country_id = ( select country_id from countries where iso_country='UK' ) "; $rs = $Firm->query($sql, __FILE__, __LINE__); $englishID = mysql_result($rs, 0); $arrLanguages[$englishID] = 'English'; } } if(! $global) $Firm->close(); return $arrLanguages; } else { if(! $global) $Firm->close(); return array(); } } /** * Liste aller Sprachen * * @author Ralph Stahl * @version 3.7.2006 * @param - * @return array alle Eintrge von Tab.languagesLanguages mit Sprach-IDs */ function listLanguages() { global $Firm; $arrLanguages = array(); $sql = "select language_id, langname_local from languages"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_assoc($rs)) { $arrLanguages[$row['language_id']] = $row['langname_local']; } asort($arrLanguages); // alphabetische Reihenfolge der Values, Keys bleiben erhalten return $arrLanguages; } else return FALSE; } /** * gibt den iso-String anhand einer lang_id zurck * * @author Ralph Stahl * @version 2.8.2006 * @param int $langID * @return string */ function getIsoLang($langID) { global $Firm; $sql = "select iso_lang from languages where language_id = ( select language_id from lang where lang_id = $langID ) "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { echo mysql_result($rs, 0); } else return FALSE; } /** * Liste aller Sprach-ID/country-ID in Tab. "lang" mit evtl. einer Sprache als Ausnahme * * @author Ralph Stahl * @version 15.7.2006 * @param int $withoutLanguage optional eine Sprache, die ausgeschlossen wird * @return array alle Eintrge von Tab. lang */ function getSpecialLanguageIDs($withoutLocale = 'de_DE') { global $Firm; if(! $withoutLocale) return FALSE; $withoutLanguage = substr($withoutLocale, 0, 2); $withoutCountry = substr($withoutLocale, 3, 2); $arrLangID = array(); $where = ''; // fr zweite Abfrage if($withoutLanguage) { $sql = "select language_id from languages where iso_lang = '$withoutLanguage' "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { // bei Schreibfehler? keine gltige Sprache $languageID = mysql_result($rs, 0); $where = " where not (language_id = $languageID"; } else return FALSE; $sql = "select country_id from countries where iso_country = '$withoutCountry' "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows == 1) { // bei Schreibfehler? keine gltige Sprache $countryID = mysql_result($rs, 0); $where .= " and country_id=$countryID)"; } else return FALSE; } $sql = "select lang_id, country_id from lang $where"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_assoc($rs)) { $arrLanguages[$row['lang_id']] = $row['country_id']; } // asort($arrLanguages); // alphabetische Reihenfolge der Values, Keys bleiben erhalten return $arrLanguages; } else return FALSE; } /** * Sprachnamen anhand einer $langID auslesen * * @author Ralph Stahl * @version 16.8.2006 * @param int %langID * @return strin lokaler Sprachname */ function getLangname($langID) { global $Firm; $sql = "select a.langname_local from languages as a join lang as b on a.language_id = b.language_id and b.lang_id=$langID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { $row = mysql_fetch_assoc($rs); return $row['langname_local']; } else return FALSE; } /** * Einlesen einer Sprachdatei ../lang/[iso].php * * @author Ralph Stahl * @version 10.7.2006 * @param string $isoLang ISO-Krzel * @param string $isoCountry optional ISO-Krzel * @param string $relPath optional Pfad zum Sprachverzteichnis, default = '../' * @return array tx[name, string] (ebenfalls in Session), FALSE: File nicht gefunden */ function getLangFromFile($isoLang, $isoCountry = '', $relPath = '../') { $arrTx = array(); if(! $isoCountry) { $isoCountry = $_SESSION['COUNTRY']; // default: eingestelltes Land } else $isoCountry = strtoupper($isoCountry); $isoLang = strtolower($isoLang); // Filenamen bilden: $textFile = "{$isoLang}_{$isoCountry}.txt"; // Sprachdatei // Textfile ffnren // echo "###{$relPath}lang/$textFile###"; $f = @fopen("{$relPath}lang/$textFile", 'r'); // passendes Sprachfile if($f) { while($zeile = fgets($f)) { $zeile = trim($zeile); if($zeile) { if(! preg_match('/^[\/#]/', $zeile)) { // Kommentarzeile: Beginn mit / oder # list($name, $value) = split('=', $zeile); $value = trim($value); if($value) $arrTx[trim($name)] = $value; // auch wegen Leerzeile am Ende } } } @fclose($f); if(sizeof($arrTx)) { // wird nicht mehr in der Session gespeichert, sondern // auf jeder Seite erneut aufgerufen // varToSession($arrTx, 'tx'); return $arrTx; } else return FALSE; } else return FALSE; // kein passendes Textfile vorhanden } //gleiches wie die vorhergehende Funktion, nur eine verzeichnissebene tiefer function getLangFromFile1($isoLang, $isoCountry = '', $relPath = '../') { $arrTx = array(); if(! $isoCountry) { $isoCountry = $_SESSION['COUNTRY']; // default: eingestelltes Land } else $isoCountry = strtoupper($isoCountry); $isoLang = strtolower($isoLang); // Filenamen bilden: $textFile = "{$isoLang}_{$isoCountry}.txt"; // Sprachdatei // Textfile ffnren // echo "###{$relPath}lang/$textFile###"; $f = @fopen("../lang/$textFile", 'r'); // passendes Sprachfile if($f) { while($zeile = fgets($f)) { $zeile = trim($zeile); if($zeile) { if(! preg_match('/^[\/#]/', $zeile)) { // Kommentarzeile: Beginn mit / oder # list($name, $value) = split('=', $zeile); $value = trim($value); if($value) $arrTx[trim($name)] = $value; // auch wegen Leerzeile am Ende } } } @fclose($f); if(sizeof($arrTx)) { // wird nicht mehr in der Session gespeichert, sondern // auf jeder Seite erneut aufgerufen // varToSession($arrTx, 'tx'); return $arrTx; } else return FALSE; } else return FALSE; // kein passendes Textfile vorhanden } /** * aus $_SESSION['COUNTRY'] und $_SESSION['LANG'] werden $_SESSION['COUNTRYID'] und $_SESSION['LANGID'] bestimmt * * @author Ralph Stahl * @version 24.11.2006 * @return - */ function getIDs() { global $Firm; $country = getCountry($_SESSION['COUNTRY']); $countryID = $country['country_id']; // Ergebnis: $_SESSION['COUNTRYID'] = $countryID; $sql = "select l.lang_id from lang l, languages ls where ls.language_id=l.language_id and l.country_id = $countryID and ls.iso_lang='{$_SESSION['LANG']}' "; // echo $sql; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { $row = mysql_fetch_assoc($rs); // Ergebnis: $_SESSION['LANGID'] = $row['lang_id']; } else // 5 ist englisch als internat. Standard $_SESSION['LANGID'] = 0; } /** * Rückgabe einer URL anhand eines Landes * * @author Ralph Stahl * @version 13.3.2007 * @param int $countryID * @return string $url */ function getDomain($countryID) { global $Firm; $domain = ''; $sql = "select domain from countries where country_id = $countryID"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { $domain = $_SESSION['GRUNDURL'].mysql_result($rs, 0); } return $domain; } // ========================== // Actioncodes // ========================== /** * einen Actioncode eingeben * * $arrDAta: * int countryID * string $actionCode * date $validTo date('Y-m-d') * * @author Ralph Stahl * @version 3.8.2006 * @param array $arrData * @return int actioncode_id / FALSE */ function insertActioncode($arrData) { global $Firm; extract($arrData); $Firm->beginTransaction(); $sql = "insert into actioncodes ( country_id, actioncode, validto ) values ( $countryID, '$actionCode', '$validTo' )"; $Firm->query($sql, __FILE__, __LINE__); if($Firm->getlastError() == 1062) { // duplicate entry $Firm->rollbackTransaction(); return FALSE; } $Firm->commitTransaction(); return $Firm->getLastInsertID(); } /** * Lschen eines Actioncodes * * @author Ralph Stahl * @version 5.7.2006 * @param $actioncodeID * @return boolean */ function deleteActionCode($actioncodeID) { global $Firm; $sql = "delete from actioncodes where actioncode_id=$actioncodeID"; $Firm->query($sql, __FILE__, __LINE__); return $Firm->numRows ? TRUE : FALSE; } /** * Update eines Actioncodes * * @author Ralph Stahl * @version 7.7.2006 * @param int $actioncodeID * @param string $actionCode * @param string $validTo date('Y-m-d') * @param array $arrData * @return boolean */ function updateActionCode($actioncodeID, $actionCode, $validTo) { global $Firm; $Firm->beginTransaction(); $sql = "update actioncodes set actioncode = '$actionCode', validto = '$validTo' where actioncode_id = $actioncodeID "; $Firm->query($sql, __FILE__, __LINE__); if($Firm->getlastError() == 1062) { // duplicate entry $Firm->rollbackTransaction(); return FALSE; } $Firm->commitTransaction(); return TRUE; } /** * Liste aller Actioncodes als Array * * return: * $actionCodeID * $actionCode * * @author Ralph Stahl * @version 6.7.2006 * @param - * @return array */ function getAllActioncodes() { global $Firm; $arrData = array(); $sql = "select actioncode_id, actioncode from actioncodes"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { while($row = mysql_fetch_assoc($rs)) $arrData[$row['actioncode_id']] = $row['actioncode']; return $arrData; } else return FALSE; } /** * Daten eines Actioncodes * * @author Ralph Stahl * @version 6.7.2006 * @param int $actioncodeID * @return array assoc. Array aller Daten, sonst FALSE */ function getActioncode($actioncodeID) { global $Firm; $sql = "select * from actioncodes where actioncode_id = $actioncodeID "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) { return mysql_fetch_assoc($rs); } else return FALSE; } /** * prft, ob Actioncode fr ein Land vorhanden und noch gltig ist * * Aktuelles Datum kann nicht als default-Wert angegeben werden, * deswegen Aufruf mit evalActionCode($codeToEval, $countryID, date('Y-m-d')) * * @author Ralph Stahl * @version 7.9.2006 * @param string $codeToEval zu prfender Actioncode * @param int $countryID * @param string $date akt. Datum date('Y-m-d') * @return boolean FALSE: -1=nicht vorhanden, -2=falsches Land, -3/-4=zu spt, oder NULL */ function evalActionCode($codeToEval, $countryID, $date) { global $Firm; $ret = 1; $sql = "select * from actioncodes where actioncode = '$codeToEval' "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) { $row = mysql_fetch_assoc($rs); // Land falsch? if($row['country_id'] != $countryID) $ret = -2; // Gltigkeit abgelaufen? if(strtotime($row['validto']) < strtotime($date)) $ret = -3; } else $ret = -1; // gibt es nicht return $ret; } /** * zählt alle Angebote einer Firma * ggf. eigeschränkt durch die LOCK-Felder * * @param int $firmID * @param int $all = 0: nur die nicht gesperrten, =1: alle * @return int $count */ function countOffersOfFirm($firmID, $all = 0) { global $Firm; $count = 0; $sql = "select count(*) from offers where firm_id = $firmID"; if(! $all) $sql .= " and adminlocked = 0 and userlocked = 0 and status = 2"; // echo $sql."
"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) $count = mysql_result($rs, 0); return $count; } /** * eigentlich sinnlose Hilfsfunktion f�r CSV-Export * liefert eine beliebige (die letzte) verf�gbare branchkeyID * * @version 14.5.2007 R. Stahl * @return int */ function getLastBranchkeyID() { global $Firm; $sql = "select max(branchkey_id) from branchkey"; // echo "### $sql ###"; $rs = $Firm->query($sql, __FILE__, __LINE__); return mysql_result($rs, 0); } /** * aus der DB können Entities wie & kommen, * werden die per javascript z.B. in eine Selectbox geschrieben, werden sie als & angezeigt. * hiermit werden sie in die einfachen zeichen umgewandelt * verwendbar für 1-dimensionale Arrays mit nicht forlaufendem Index * * @version 7.6.2007 R. Stahl * @param array $array * @param int $fieldindex */ function convertEntitiesInArray(&$array) { foreach($array as $key => $value) $array[$key] = html_entity_decode($value); } // Bereich statistic --- Bereich statistic --- Bereich statistic --- Bereich statistic --- Bereich statistic --- /** * bewerkstelligt den wechsel der felder yesterday und today, sowie this_month und last_month * * die datei statistictest.txt muss unbedingt vorhanden sein ! (im pfad files !) * * @author Dirk Jänsch * @version 18.6.2007 // wird zur zeit nicht verwendet !!!!!!!!!!!! function intern_testStatisticDates() { global $Firm; // aktuellen tag des Monats holen $tag = date('j'); // tag als eindeutuge integerzahl $tag = (int)($tag); // Dateiname fuer Textdatei mit letztem Zugriff $filename = $_SERVER["DOCUMENT_ROOT"] . '/../files/statistictest.txt'; // Datei zum Lesen und Schreiben oeffnen, falls Datei vorhanden if ($filehandler = fopen($filename,"r+")){ @chmod($filename,0777); // Zaehlerstand auslesen $count = fgets($filehandler, 1000); $count = trim($count); // Dateizeiger auf Dateianfang stellen fseek($filehandler, 0); $countaktuell = date('Y-m-d'); $countaktuell= trim($countaktuell); if ($count == $countaktuell){ return; } else { // das gestrige datum steht noch in txt dateie, also muss noch today und yesterday gewechselt werden // für alle Länder $sql = "update statistics set yesterday = today"; $rs = $Firm->query($sql,__FILE__,__LINE__); // wenn der Monatserste ist zusätzlich letzter Monat = heutiger Monat if ($tag == 1) { $sql = "update statistics set last_month = this_month"; $rs = $Firm->query($sql,__FILE__,__LINE__); } // neuen Zaehlerstand speichern fputs($filehandler, $countaktuell); } // Datei schliessen fclose($filehandler); } else die('Configfile statistictest.txt is missing !'); } /** * date_german2mysql * wandelt ein traditionelles deutsches Datum * nach MySQL (ISO-Date). * * @author Dirk Jänsch * @version 19.6.2007 * @param int $countryId */ function date_german2mysql($datum) { list($tag, $monat, $jahr) = explode(".", $datum); return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag); } /** * schreibt die statistischen Daten für ein klick in die tabelle statistics * * @author Dirk Jänsch * @version 18.6.2007 * @param int $countryId * * Aufruf der Fkt. erfolgt in * -------------------------- * portal/suchebranche * portal/suchefirma * portal/suche/metoka * portal/suchekette * * als visits gezählt werden nur die auf dem Bildschirm angezeigten Firmen * */ function setStatisticDates($countryId, $firmId) { global $Firm; // prüfung des datums, ob felder gewechselt werden müssen // intern_testStatisticDates(); $date = date("d.m.Y"); $date = date_german2mysql($date); // prüfen, ob Land schon registriert $sql = "SELECT stat_id, count from statistics WHERE country_id=".$countryId." AND date=\"".$date."\""; // echo "### $sql###
"; $rs = $Firm->query($sql,__FILE__,__LINE__); // wenn kein Eintrag Land neu anlegen und initialisieren (insert) $ok = true; if($Firm->numRows) $ok = false; if ($ok) { $sql = "INSERT INTO statistics SET country_id = ".$countryId.", count=1, date=\"".$date."\""; $result = $Firm->query($sql,__FILE__,__LINE__); } else { // Land ist schon registriert (update) // wenn Ip sperre ok if (testCountForStatistic($firmId) == 1) { // stat_id holen $row = mysql_fetch_assoc($rs); $stat_id = $row['stat_id']; $count = $row['count'] + 1; $sql = "UPDATE statistics SET count = ".$count." WHERE stat_id=".$stat_id. " AND date=\"".$date."\""; $result = $Firm->query($sql,__FILE__,__LINE__); } } return; } /** * ermittelt, ob firmeneintrag anhand ip-sperre gezählt wird * * @author Dirk Jänsch * @version 20.6.2007 * @param int $firmId * @return int zaehle (0 = nein / 1 = ja) */ function testCountForStatistic($firmId) { global $Firm; //Lebenszeit der IP-Sperre in Sekunden $lifetime = $_SESSION['IP_LIFETIME']; // für die Zeitstempel in der DB $now = time(); // gegenwärtige IP $ip = $_SERVER['REMOTE_ADDR']; // gibt es einen ip/firmid eintrag $sql = "select statip_id, last from statisticip where firmid = $firmId and ip = '$ip'"; // echo "### $sql###
"; $rs = $Firm->query($sql, __FILE__, __LINE__); if($Firm->numRows) { $row = mysql_fetch_assoc($rs); // ist die FirmId / Ip Konstellation vorhanden, prüfen, ob noch in Sperrzeit $last = $row['last']; // Lebenszeit überschritten $too_old = (time() - $last) > $lifetime; // Eintrag war schon da, aber zu alt if($too_old) { // zaehlen und updaten der Zeit $sql = "update statisticip set last = $now where firmid = $firmId and ip = '$ip'"; $Firm->query($sql, __FILE__, __LINE__); return 1; } else { // eintrag ist da, keine datenänderun g in db und nicht zaehlen return 0; } } else { // ist die FirmId / Ip Konstellation nicht vorhanden, einfügen eines neuen Satzen $sql = "insert into statisticip (firmid, ip, last) values ($firmId, '$ip', $now)"; $Firm->query($sql, __FILE__, __LINE__); // rückgabe -> zaehlen ! return 1; } } /** * löschen der Einträge in tabelle statisticip, die älter als 30 minuten sind * * @author Dirk Jänsch * @version 20.6.2007 * @param * @return */ function deleteCountForStatistic() { global $Firm; //Lebenszeit der IP-Sperre in Sekunden (zur sicherheit mal 2) $deltime = 2 * ($_SESSION['IP_LIFETIME']); // Löschzeit überschritten $too_old = (time() - $deltime); $sql = "DELETE FROM statisticip WHERE last < $too_old"; $Firm->query($sql, __FILE__, __LINE__); } /** * Formatierung von Strings fr die Datenbank * * @author Dirk Jnsch * @version 25.01.2011 * @param int $countryID, * @return ok */ function format ($tutorial) { $ergebnis = htmlspecialchars($tutorial, ENT_QUOTES); //Wandelt Sonderzeichen in HTML-Codes um $ergebnis = addslashes($ergebnis); return $ergebnis; } /** * registrieren der gesuchten Begriffe * * @author Dirk Jnsch * @version 25.01.2011 * @param int $countryID, * @return ok */ function suchbegriff_statistik($suchbegriff) { global $Firm; $suchbegriff = format($suchbegriff); $countryID = $_SESSION['COUNTRYID']; $ip = $_SERVER['REMOTE_ADDR']; // http://support.free-conversant.com/2701 USER AGENT BOTLISTE !!!! $trackrobot =""; $trackUserAgent =strtolower($_SERVER['HTTP_USER_AGENT']); if (stristr($trackUserAgent ,"archiver")) {$trackrobot="Alexa";} if (stristr($trackUserAgent ,"exabot")) {$trackrobot="Exalead";} if (stristr($trackUserAgent ,"fast")) {$trackrobot="Fast";} if (stristr($trackUserAgent ,"firefly")) {$trackrobot="Fireball";} if (stristr($trackUserAgent ,"googlebot")) {$trackrobot="Google";} if (stristr($trackUserAgent ,"MSNBot")) {$trackrobot="MSN";} if (stristr($trackUserAgent ,"Nutch")) {$trackrobot="Nutch";} if (stristr($trackUserAgent ,"Exabot")) {$trackrobot="Exabot";} if (stristr($trackUserAgent ,"Findlinks")) {$trackrobot="Findlinks";} if (stristr($trackUserAgent ,"MJ12bot")) {$trackrobot="MJ12bot";} if (stristr($trackUserAgent ,"Yahoo Slurp")) {$trackrobot="Yahoo Slurp";} if (stristr($trackUserAgent ,"BaiDuSpider")) {$trackrobot="BaiDuSpider";} if (stristr($trackUserAgent ,"GigaBot")) {$trackrobot="GigaBot";} if (stristr($trackUserAgent ,"crawl")) {$trackrobot="crawl";} if (stristr($trackUserAgent ,"Yandex bot")) {$trackrobot="Yandex bot";} if (stristr($trackUserAgent ,"bot")) {$trackrobot="bot";} if (($suchbegriff != "") && ($trackrobot =="")) { $sql = "insert into test (suchtext, ipadresse, country ) values ( '$suchbegriff', '$ip', $countryID )"; $Firm->query($sql, __FILE__, __LINE__); } } // Ende von Suchbegriff speichern /** * auf das Vorhandensein eines Usernamens prüfen * benötigt von der Paßwort-vergessen-Funktion * * @param string $name * @return boolean */ function userNameExists($name) { global $Firm; $fcount = $acount = 0; // in Firmatabelle suchen: $sql = "select count(customernumber) from firm where customernumber = '$name' "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $fcount = mysql_result($rs, 0); // in Admintabelle suchen: $sql = "select count(loginname) from adminuser where loginname = '$name' "; $rs = $Firm->query($sql, __FILE__, __LINE__); if($rs && $Firm->numRows) $acount = mysql_result($rs, 0); return $fcount || $acount; } ?>