Unterstützung für FHC_LANG_ARRAY

This commit is contained in:
Andreas Moik
2016-01-26 15:03:21 +01:00
parent 5d78732127
commit 68f0f267fb
3 changed files with 393 additions and 291 deletions
+14 -13
View File
@@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at>
*
*/
/**
@@ -38,6 +38,7 @@ abstract class db extends basis
define('FHC_INTEGER',1);
define('FHC_STRING',2);
define('FHC_BOOLEAN',3);
define('FHC_LANG_ARRAY',4);
}
if (is_null(db::$db_conn))
$this->db_connect();
@@ -56,7 +57,7 @@ abstract class db extends basis
abstract function db_affected_rows($result=null);
abstract function db_result_seek($result=null, $offset);
abstract function db_last_error();
abstract function db_free_result($result=null);
abstract function db_free_result($result=null);
abstract function db_version();
abstract function db_escape($var);
abstract function db_null_value($var, $qoute=true);
@@ -67,7 +68,7 @@ abstract class db extends basis
abstract function db_getResultJSON($result = null);
abstract function db_parse_array($var);
/**
* Erzeugt aus den Funktionsparameter eine SQL Abfrage
* --- Wird in der Art Sonderzeichen gefunden wird dieses als FunktionsParmeter verarbeitet
@@ -95,7 +96,7 @@ abstract class db extends basis
$where=(!is_null($pWhere)?trim($pWhere):'');
$order=(!is_null($pOrder)?trim($pOrder):'');
$limit=(is_numeric($pLimit)?$pLimit:'');
if (empty($sql) && empty($art))
{
$this->errormsg='die SQL Art fehlt!';
@@ -123,7 +124,7 @@ abstract class db extends basis
$sql.=($where?' '.trim($where).' ':'');
else
$sql.=($where?' where '.trim($where).' ':'');
if ($art=='select')
if ($art=='select')
{
// FIXME: If $where is e.g. 'orderstatus' because there's a column named orderstatus, this would
// fail horribly? Same for the 'where'-stuff above. -MP
@@ -131,22 +132,22 @@ abstract class db extends basis
$sql.=($order?trim($order).' ':'');
else
$sql.=($order?' order by '.trim($order).' ':'');
}
if ($art=='select')
}
if ($art=='select')
{
if (strstr('limit',strtolower($where)))
$sql.=($limit?trim($limit).' ':'');
else
else
$sql.=($limit?' limit '.trim($limit).' ':'');
}
}
if (!$results=$this->db_query($sql))
{
$this->errormsg=$this->db_last_error();
return false;
}
if ($art!='select' && empty($pSql))
return true;
@@ -159,9 +160,9 @@ abstract class db extends basis
$rows=array();
while($row = $this->db_fetch_object($results))
$rows[]=$row;
return $rows;
}
return $rows;
}
}
require_once(dirname(__FILE__).'/'.DB_SYSTEM.'.class.php');
+62 -7
View File
@@ -22,6 +22,7 @@
/**
* Datenbank Abstraktionsklasse fuer Postgresql Datenbank
*/
require_once('sprache.class.php');
class basis_db extends db
{
@@ -292,6 +293,27 @@ class basis_db extends db
$var = $this->db_null_value($var, false);
break;
case FHC_LANG_ARRAY:
$sprache = new sprache();
$sprache->getAll(true);
$buf = $var;
$var = array();
$languages = $sprache->getAllIndexesSorted();
foreach($languages as $sk => $sp)
{
if(!$sp || !isset($buf[$sp]))
$var[$sk] = "";
else
$var[$sk] = $this->db_escape($buf[$sp]);
}
$var = str_replace('\\', '\\\\', $var);
$var = str_replace('"', '\\\"', $var);
$var = '\'{"' . join('","', $var) . '"}\'';
break;
case FHC_BOOLEAN:
if($var===true)
$var='true';
@@ -350,15 +372,48 @@ class basis_db extends db
*/
public function db_parse_array($var)
{
if ($var == '')
if ($var == '')
return;
preg_match_all('/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?<!^\{)(?=\}$))/i', $var, $matches, PREG_SET_ORDER);
$values = array();
foreach ($matches as $match)
preg_match_all('/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?<!^\{)(?=\}$))/i', $var, $matches, PREG_SET_ORDER);
$values = array();
foreach ($matches as $match)
{
$values[] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
return $values;
$values[] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
return $values;
}
/**
* Erstellt aus einem DB Array ein PHP Array
* @param $var DB Result Array Spalte
* @return php array
*/
public function db_parse_lang_array($var)
{
if ($var == '')
return;
preg_match_all('/(?<=^\{|,)(([^,"{]*)|\s*"((?:[^"\\\\]|\\\\(?:.|[0-9]+|x[0-9a-f]+))*)"\s*)(,|(?<!^\{)(?=\}$))/i', $var, $matches, PREG_SET_ORDER);
$values = array();
$sprache = new sprache();
$sprache->loadIndexArray();
$sprache = new sprache();
$sprache->getAll(true);
$languages = $sprache->getAllIndexesSorted();
foreach ($matches as $mk => $match)
{
$values[$languages[$mk+1]] = $match[3] != '' ? stripcslashes($match[3]) : (strtolower($match[2]) == 'null' ? null : $match[2]);
}
return $values;
}
}
function indexSort($a, $b)
{
return strcmp($a->index, $b->index);
}
?>
+317 -271
View File
@@ -1,271 +1,317 @@
<?php
/* Copyright (C) 2010 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Karl Burkhart <burkhart@technikum-wien.at>.
*/
/**
* Klasse Sprache
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
class sprache extends basis_db
{
public $result;
public static $index_arr = array();
public $sprache; // string
public $locale;
public $index; // int, id des array index
public $content; // boolean
public $bezeichnung_arr;
/**
*
* Konstruktor
* @param Sprache die geladen werden soll (Default=null)
*/
public function __construct($sprache = null)
{
parent::__construct();
if(!is_null($sprache))
$this->load($sprache);
}
/**
*
* Lädt die Sprache
* @param $sprache die geladen werden soll
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist
*/
public function load($sprache)
{
$qry = "SELECT *,".$this->getSprachQuery('bezeichnung')." FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($sprache, FHC_STRING, false).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$this->sprache = $row->sprache;
$this->locale = $row->locale;
$this->index = $row->index;
$this->content = $this->db_parse_bool($row->content);
$this->bezeichnung_arr=$this->parseSprachResult('bezeichnung',$row);
return true;
}
else
{
$this->errormsg = 'Sprache nicht gefunden';
return false;
}
}
else
{
$this->errormsg = "Fehler bei der Abfrage.";
return false;
}
}
/**
*
* Lädt alle verfügbaren Sprachen
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist.
*/
public function getAll($content=null)
{
$qry = "SELECT *,".$this->getSprachQuery('bezeichnung')." FROM public.tbl_sprache";
if(!is_null($content))
$qry.= " WHERE content=".$this->db_add_param($content, FHC_BOOLEAN);
$qry.=" ORDER BY sprache";
if(!$this->db_query($qry))
{
$this->errormsg ="Fehler bei der Abfrage.";
return false;
}
while($row = $this->db_fetch_object())
{
$sprache = new sprache();
$sprache->sprache = $row->sprache;
$sprache->locale = $row->locale;
$sprache->index = $row->index;
$sprache->content = $this->db_parse_bool($row->content);
$sprache->bezeichnung_arr=$this->parseSprachResult('bezeichnung',$row);
$this->result[] = $sprache;
}
return true;
}
/**
*
* Lädt das Index Array
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist.
*/
public function loadIndexArray()
{
$qry = "SELECT sprache, index FROM public.tbl_sprache WHERE index is not null ORDER BY index";
if(!$this->db_query($qry))
{
$this->errormsg ="Fehler bei der Abfrage.";
return false;
}
while($row = $this->db_fetch_object())
{
self::$index_arr[$row->sprache]=$row->index;
}
return true;
}
/**
*
* Löscht die übergebene Sprache
* @param $sprache die gelöscht werden soll
*/
public function delete($sprache)
{
$qry = "DELETE FROM public.tbl_sprache WHERE sprache = ".$this->db_add_param($sprache, FHC_STRING, false).";";
if(!$this->db_query($qry))
{
$this->errormsg = "Fehler beim löschen der Sprache aufgetreten.";
return false;
}
return true;
}
/**
*
* Liefert die Anzahl aller aktiven Sprachen zurück
* @return $anzahl der Sprachen, false im Fehlerfall
*/
public function getAnzahl()
{
$anzahl = 0;
$qry = 'SELECT count(sprache) as anzahl FROM public.tbl_sprache WHERE content = true;';
if(!$this->db_query($qry))
{
$this->errormsg = 'Fehler aufgetreten';
return false;
}
if($row = $this->db_fetch_object())
{
$anzahl = $row->anzahl;
}
return $anzahl;
}
/**
*
* Liefert die Sprache eines Index zurück
* @param $index der Sprache die gesucht wird
* @return $sprache, false im Fehlerfall
*/
public function getSpracheFromIndex($index)
{
$sprache = '';
$qry = "SELECT sprache FROM public.tbl_sprache WHERE index=".$this->db_add_param($index, FHC_INTEGER, false).";";
if(!$this->db_query($qry))
{
$this->errormsg = "Fehler aufgetreten.";
return false;
}
if($row = $this->db_fetch_object())
{
$sprache = $row->sprache;
}
return $sprache;
}
/**
* Liefert einen String mit den aufgespaltenen Elementen fuer mehrsprachige Arrays
* Der Result der Query kann dann mittels parseSprachResult wieder in ein Array umgewandelt werden
*
* @param $feldname
* @return string mit den aufgeschluesselten Arrayelementen der Sprache
*/
public function getSprachQuery($feldname)
{
$result = '';
if(!isset(self::$index_arr) || count(self::$index_arr)==0)
$this->loadIndexArray();
foreach(self::$index_arr as $sprache=>$index)
{
$result .= $feldname.'['.$index.'] as '.$feldname.'_'.$index.',';
}
return mb_substr($result,0,-1);
}
/**
* Wandelt den Result von mehrsprachigen Arrays in einer SQL Query in ein PHP Array um
*
* @param $feldname name der Datenbankspalte
* @param $row row des SQL Results
* @return array mit den Sprachen der Spalte
*/
public function parseSprachResult($feldname, $row)
{
$result = array();
if(!isset(self::$index_arr) || count(self::$index_arr)==0)
$this->getAll();
foreach(self::$index_arr as $sprache=>$index)
{
$name = $feldname.'_'.$index;
if(isset($row->$name))
$result[$sprache] = $row->$name;
else
$result[$sprache] = null;
}
return $result;
}
/**
*
* Liefert die Bezeichnung einer Sprache in der angegebenen Sprache
* @param $sprache Kurzbezeichnung der Sprache dessen Bezeichnung geladen werden soll
* @param $anzeigesprache Sprache in der die bezeichnung geladen werden soll
*/
public function getBezeichnung($sprache, $anzeigesprache)
{
$qry = "SELECT bezeichnung[(SELECT index FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($anzeigesprache).")]
FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($sprache);
if($result = $this->db_query($qry))
{
if($row = $this->db_fetch_object($result))
{
return $row->bezeichnung;
}
}
}
}
<?php
/* Copyright (C) 2010 Technikum-Wien
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
* Karl Burkhart <burkhart@technikum-wien.at>.
*/
/**
* Klasse Sprache
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
class sprache extends basis_db
{
public $result;
public static $index_arr = array();
public $sprache; // string
public $locale;
public $index; // int, id des array index
public $content; // boolean
public $bezeichnung_arr;
/**
*
* Konstruktor
* @param Sprache die geladen werden soll (Default=null)
*/
public function __construct($sprache = null)
{
parent::__construct();
if(!is_null($sprache))
$this->load($sprache);
}
/**
*
* Lädt die Sprache
* @param $sprache die geladen werden soll
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist
*/
public function load($sprache)
{
$qry = "SELECT *,".$this->getSprachQuery('bezeichnung')." FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($sprache, FHC_STRING, false).";";
if($this->db_query($qry))
{
if($row = $this->db_fetch_object())
{
$this->sprache = $row->sprache;
$this->locale = $row->locale;
$this->index = $row->index;
$this->content = $this->db_parse_bool($row->content);
$this->bezeichnung_arr=$this->parseSprachResult('bezeichnung',$row);
return true;
}
else
{
$this->errormsg = 'Sprache nicht gefunden';
return false;
}
}
else
{
$this->errormsg = "Fehler bei der Abfrage.";
return false;
}
}
/**
*
* Lädt alle verfügbaren Sprachen
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist.
*/
public function getAll($content=null)
{
$qry = "SELECT *,".$this->getSprachQuery('bezeichnung')." FROM public.tbl_sprache";
if(!is_null($content))
$qry.= " WHERE content=".$this->db_add_param($content, FHC_BOOLEAN);
$qry.=" ORDER BY sprache";
if(!$this->db_query($qry))
{
$this->errormsg ="Fehler bei der Abfrage.";
return false;
}
while($row = $this->db_fetch_object())
{
$sprache = new sprache();
$sprache->sprache = $row->sprache;
$sprache->locale = $row->locale;
$sprache->index = $row->index;
$sprache->content = $this->db_parse_bool($row->content);
$sprache->bezeichnung_arr=$this->parseSprachResult('bezeichnung',$row);
$this->result[] = $sprache;
}
return true;
}
/**
*
* Lädt das Index Array
* @return true bei Erfolg, false wenn ein Fehler aufgetreten ist.
*/
public function loadIndexArray()
{
$qry = "SELECT sprache, index FROM public.tbl_sprache WHERE index is not null ORDER BY index";
if(!$this->db_query($qry))
{
$this->errormsg ="Fehler bei der Abfrage.";
return false;
}
while($row = $this->db_fetch_object())
{
self::$index_arr[$row->sprache]=$row->index;
}
return true;
}
/**
*
* Löscht die übergebene Sprache
* @param $sprache die gelöscht werden soll
*/
public function delete($sprache)
{
$qry = "DELETE FROM public.tbl_sprache WHERE sprache = ".$this->db_add_param($sprache, FHC_STRING, false).";";
if(!$this->db_query($qry))
{
$this->errormsg = "Fehler beim löschen der Sprache aufgetreten.";
return false;
}
return true;
}
/**
*
* Liefert die Anzahl aller aktiven Sprachen zurück
* @return $anzahl der Sprachen, false im Fehlerfall
*/
public function getAnzahl()
{
$anzahl = 0;
$qry = 'SELECT count(sprache) as anzahl FROM public.tbl_sprache WHERE content = true;';
if(!$this->db_query($qry))
{
$this->errormsg = 'Fehler aufgetreten';
return false;
}
if($row = $this->db_fetch_object())
{
$anzahl = $row->anzahl;
}
return $anzahl;
}
/**
*
* Liefert die Sprache eines Index zurück
* @param $index der Sprache die gesucht wird
* @return $sprache, false im Fehlerfall
*/
public function getSpracheFromIndex($index)
{
$sprache = '';
$qry = "SELECT sprache FROM public.tbl_sprache WHERE index=".$this->db_add_param($index, FHC_INTEGER, false).";";
if(!$this->db_query($qry))
{
$this->errormsg = "Fehler aufgetreten.";
return false;
}
if($row = $this->db_fetch_object())
{
$sprache = $row->sprache;
}
return $sprache;
}
/**
*
* Liefert den Index einer Sprache zurück
* @param $sprache der Sprache die gesucht wird
* @return $index, false im Fehlerfall
*/
public function getIndexFromSprache($sprache)
{
$index = false;
$qry = "SELECT * FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($sprache).";";
if(!$this->db_query($qry))
{
$this->errormsg = "Fehler aufgetreten.";
return false;
}
if($row = $this->db_fetch_object())
{
$index = $row->index;
}
return $index;
}
public function getAllIndexesSorted()
{
$languages = array();
if(!isset($this->result))
$this->getAll(true);
foreach($this->result as $s)
{
$languages[$s->index] = $s->sprache;
}
ksort($languages);
//lücken im sprachenarray füllen
for($i = 1; $i<=max(array_keys($languages));$i++)
{
if(!isset($languages[$i]))
$languages[$i] = false;
}
return $languages;
}
/**
* Liefert einen String mit den aufgespaltenen Elementen fuer mehrsprachige Arrays
* Der Result der Query kann dann mittels parseSprachResult wieder in ein Array umgewandelt werden
*
* @param $feldname
* @return string mit den aufgeschluesselten Arrayelementen der Sprache
*/
public function getSprachQuery($feldname)
{
$result = '';
if(!isset(self::$index_arr) || count(self::$index_arr)==0)
$this->loadIndexArray();
foreach(self::$index_arr as $sprache=>$index)
{
$result .= $feldname.'['.$index.'] as '.$feldname.'_'.$index.',';
}
return mb_substr($result,0,-1);
}
/**
* Wandelt den Result von mehrsprachigen Arrays in einer SQL Query in ein PHP Array um
*
* @param $feldname name der Datenbankspalte
* @param $row row des SQL Results
* @return array mit den Sprachen der Spalte
*/
public function parseSprachResult($feldname, $row)
{
$result = array();
if(!isset(self::$index_arr) || count(self::$index_arr)==0)
$this->getAll();
foreach(self::$index_arr as $sprache=>$index)
{
$name = $feldname.'_'.$index;
if(isset($row->$name))
$result[$sprache] = $row->$name;
else
$result[$sprache] = null;
}
return $result;
}
/**
*
* Liefert die Bezeichnung einer Sprache in der angegebenen Sprache
* @param $sprache Kurzbezeichnung der Sprache dessen Bezeichnung geladen werden soll
* @param $anzeigesprache Sprache in der die bezeichnung geladen werden soll
*/
public function getBezeichnung($sprache, $anzeigesprache)
{
$qry = "SELECT bezeichnung[(SELECT index FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($anzeigesprache).")]
FROM public.tbl_sprache WHERE sprache=".$this->db_add_param($sprache);
if($result = $this->db_query($qry))
{
if($row = $this->db_fetch_object($result))
{
return $row->bezeichnung;
}
}
}
}