// wersja 3.3 15.02.2008
// pconnect() - laczy z baza
// pwykonaj(sql_query) - wykonuje zapytanie sql. flaga
// presult($wynik, $i, $zmienna) - zwraca wartosc wiersza danych wynik i pola zmienna
// pnumrows($wynik) - zwracxa ilosc wierszy w danych wynik
// pfetcharray($wynik, $i) - zwraca i-ty wiersz z danych wynik
// pmax($tabela, $pole="id", $counter="1") - zwraca kolejna wartosc pola id z tabeli
// istniejetabela($tabela) - sprawdza w bazie czy istnieje tabela o podanej nazwie
// statystyka_bazy($wszystkie="nie") - wypisuje zapytania na danej stronie wraz z ich czasem. z "nie" nie pokazuje zap o czasie 0.000000s
$cms_bazy = "my"; // mozliwe wartosci my -mysql pg -postgresql
function pdebug($sql, $wyn)
{
echo "
Nie wyszlo:";
echo "
";
echo $sql;
echo "
";
//var_dump(debug_backtrace());
echo "
Funkcja: ".$wyn[0]["function"];
echo "
Linia: ".$wyn[0]["line"];
echo "
Plik: ".$wyn[0]["file"];
echo "
Mysql error: ".mysql_errno()."
".mysql_error();
}
function pconnect()
{
global $cms_bazy, $path_VT;
global $login, $haslo, $host, $baza;
//include $path_VT."konfig.php";
if($cms_bazy == "pg")
$conn = pg_connect("host=$host user=$login password=$haslo dbname=$baza");
if($cms_bazy == "my")
{
$conn = mysql_connect($host, $login, $haslo) or die ("Nie można się połączyć z bazami servera.");
mysql_select_db ($baza) or die ("Nie mozna wybrać bazy danych");
}
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES 'utf8'");
return $conn;
}
static $ilosc_zapytan=0;
static $zapytania_dobazy=array();
static $zapytania_czas=array();
static $bazy_statystyka=false;
function pwykonaj($sql) {
global $cms_bazy, $conn;
global $ilosc_zapytan,$zapytania_dobazy,$bazy_statystyka,$zapytania_czas;
$start=mktime();
if($cms_bazy == "pg")
$wynik = pg_query($conn, $sql) or die(pdebug($sql, debug_backtrace()));
if($cms_bazy == "my")
$wynik = mysql_query ($sql) or die(pdebug($sql, debug_backtrace()));
$stop=mktime();
if ($bazy_statystyka) {
$ilosc_zapytan++;
$zapytania_dobazy[]=$sql;
$zapytania_czas[]=$stop-$start;
}
return $wynik;
}
function statystyka_bazy($wszystkie="nie"){
global $ilosc_zapytan,$zapytania_dobazy,$zapytania_czas;
print"Status: $bazy_statystyka
Ilość zapytań: $ilosc_zapytan
";
$total_time=0;
for($i=0;$i0) or $wszystkie!="nie") print "Zapytanie:
".$zapytania_dobazy[$i]."
Czas wykonania:".$zapytania_czas[$i]."
";
$total_time+=$zapytania_czas[$i];
}
print "
Total time = $total_time ";
print "
";
}
function presult($wynik, $i, $zmienna)
{
global $cms_bazy;
if($cms_bazy == "pg")
$zwzmienna = pg_result($wynik,$i,$zmienna);
if($cms_bazy == "my")
$zwzmienna = mysql_result($wynik,$i,$zmienna);; //or die(pdebug($sql, debug_backtrace()));
return $zwzmienna;
}
function pnumrows($wynik)
{
global $cms_bazy;
if($cms_bazy == "pg")
$liczba = pg_numrows($wynik);
if($cms_bazy == "my")
$liczba = mysql_num_rows($wynik);
return $liczba;
}
function pfetcharray($wynik, $i)
{
global $cms_bazy;
if(pnumrows($wynik)==0) return(array());
if($cms_bazy == "pg")
$zwzmienna = pg_fetch_array($wynik, $i, PGSQL_ASSOC) or die(pdebug($sql, debug_backtrace()));;
if($cms_bazy == "my")
{
mysql_data_seek($wynik, $i) or die(pdebug("Drugi pamrametr $i", debug_backtrace()));;
$zwzmienna = mysql_fetch_array($wynik, MYSQL_ASSOC) or die(pdebug($sql, debug_backtrace()));
}
return $zwzmienna;
}
function pfetch_array($wynik) {
global $cms_bazy;
if (pnumrows($wynik)==0) return false;
//if (mysql_num_rows($wynik);
if ($cms_bazy == "pg")
$zwzmienna = pg_fetch_array ($wynik);// or die(pdebug($sql, debug_backtrace()));
if ($cms_bazy=="my")
$zwzmienna = mysql_fetch_array($wynik);// or die(pdebug($sql, debug_backtrace()));
return $zwzmienna;
}
function istniejetabela($tabela) {
if (mysql_query("SELECT 1 FROM $tabela LIMIT 0")) {
return 1;
} else {
return 0;
}
}
function pmax($tabela, $pole="id", $counter="1")
{
$sql ="select max($pole) as max from $tabela";
$wynik = pwykonaj($sql);
$liczba = pnumrows($wynik);
if($liczba > 0) $max = presult($wynik,0, "max") + $counter;
else $max = 0;
return($max);
}
?>
include "preload.php";
//------------- nazwy wyswietlane ---------------
$VT_tytul = "Femina";
//------------- przedrostek sesji
$przedrostek = "Fem_"; //uzywane przy tworzeniu sesji. dodawane n apoczatku do nazwy
//------------- Dane strono-lokacyjne :P
$VT_sciezka = "/pliki/"; //--Dane do zapisywania plikow przez Vtpanel liczona od document root
$strona_root="/";
$host_name = "femina-artykuly-medyczne.pl"; //-nazwa hosta
//------------- Dane do bazy danych -----------
$login = "femina1";
$haslo = "f3m23ag4d1";
$baza = "femina1";
$host = "femina1.home.pl";
//------------- Nazwy tabel baz danych -----------
$vtp_uzytkownicy = "VTP_uzytkownicy";
$vtp_uzytkownicy_opis = "VTP_uzytkownicy_opis";
//------------- informacje dla rejestracji uzytkownikow - uywane prez strone
$register_from = "sklep@artykuly-medyczne.com";
$register_from_nazwa = "Femina Artykuły Medyczne";
$register_wezel = "1,2,45";
$domyslna_grupa = "3";
$adres_centrala = "gliwice@artykuly-medyczne.com";
//---------------- sklep ------------------------
$sklep_ddk = "VTP_ddk_sklep";
$sklep_zasob = "VTP_sklep";
$sklep_wartosc = "VTP_sklep_wartosc";
//----------------- zakupy ------------------------
$sklep_zakup = "VTP_zakup";
$sklep_statusy = "VTP_zakup_status_opis";
$sklep_platnosc = "VTP_sposob_platnosc";
$sklep_zakup_status = "VTP_zakup_status";
//----------------- rabaty ------------------------
$rabat_kwota = "VTP_rabat_kwota";
$rabat_produkt ="VTP_rabat_produkt";
//----------------------- sledzenie zmian
$K_zmiany = "full"; // full lista zmian, short - tylko ostatnia, brak - brak logowania. (czas,data,osoba)
$K_trace_tabela ="VTP_update_trace";
//-------------------- pozwala na podglad stron pry edycji
$K_preview = "nie";
$K_sciezka_preview = "/robocze/vtdemo5/preview/";
$K_dotpay_id = "41806";
?>
// wersja 3.3 15.02.2008
/*
* DDK v 3
*
* Konstruktory:
* wezel(lista_wezlow,tabela_ddk,tabela_zasob,$ini="")
* wezel(lista_wezlow,tabela_ddk,tabela_zasob,tabela_wartosc="",$ini="")
*
* aby uzyc tabeli roboczej przed tabela_wartosc daj #
*
* Zmienne:
*
*
*
* Funkcje:
* pobierzDzieci() - pobiera dzieci wezla i tworzy z nich obiekty (wezel). umieszcza je w tablicy $kolekcja_obj[]
* funkcja bierze pod uwage filtr i sortowanie
* UWAGA: nie pobiera ich wartosci. Do tego jest inna funkcja
* $od_wezla - pozycja od kt pobierac dzieci
* $ile - ile dzieci nalezy pobrac
* pobierzWszystkieDzieci() - pobiera wszystkie dzieci wezla i tworzy z nich obiekty (wezel). umieszcza je w tablicy $kolekcja_org_obj[]
* pobierzWartosciDzieci() - pobiera dane z tabeli wartosci (jest tabela) i dopina wartosci do dzieci (o ile sa)
* pobierz($nazwa) - szuka zmiennej o nazwie $nazwa w tablicy z danymi zasobu oraz tablicy wartosci. Jezeli
* nie znajdzie zwraca null. Tablica wartosci ma wyzszy priorytet.
*
* pobierzSciezke() - na podstawie sciezki buduje elementy (wezel) i umieszcza w tablicy $sciezka_obj
*
* pobierzSciezkeDB() - pobiera sciezki wg bazy danych. zwraca tablice w formacie: [kolejna sciezka][idddk]=id ddk
* [idwezel] = id_wezel
*
* dodajDziecko($typ,$id_zasob=0,$gdzie="przed",$dane_zasob="") - funkcja tworzy nowe dziecko (wezel) i opcjonalnie zasob oraz wartosci oraz podpina go pod wezel
* $typ - typ wezla dodawanego
* $id_zasob - id zasobu dodawanego. jezeli chcemy aby ddk samo stworzylo zasob nie podajemy id_zasobu
* $gdzie - gdzie zxostanie stworzony wezel. przed albo po. przed = pierwszy, po=ostatni
* $dane_zasob - tablica slownikowa w formie [pole]=[wartosc]. jezeli id_zasobu==0 to wg tych danych
* zostanie stworzony nowy zasob.
* ileDzieci($typ=-1) - zwraca ilosc dzieci. jezeli zostanie podany typ to ignorowane sa filtry
* $typ - typ wezlow ktore liczymy, 2 - element, 1 - katalog, 0 - oba, -1 = uzyj filtra
* funkcja bierze pod uwage filtry.
* UWAGA: jezeli dzialamy dla filtru to:
* jezeli nie odpalono funkcji do stworzenia dzieci to dzialanie jest na sql'u
* jezeli sa juz stworzone dzieci to zwraca ich ilosc
* zmienTyp($typ) - zmienia typ wezla na podany
* usunWezel($zasob="nie") - funkcja usuwa wezel oraz opcjonalnie zasob i wartosci
* $zasob - jezeli wartosc rozna od "nie" to usuwa zasob i wartosci
* usunWezelDzieci($zasob="nie") - funkcja usuwa wszystkie wezly w dol od tego, opcjonanie wartosci i zasoby
* ileOjcow() - zwraca ilosc ojcow wg bazy
* pobierzOjcow($jak) - funkcja zwraca ojcow (wyszukiwanie na bazie), moze zwrocic albo liste wezlow, albo tablice, albo tablice obiektow
* $jak - "lista" = string, "tablica" = array, "obiekt" = objekty (wezel)[]
*
*
* pobierzPodwezly() - pobiera i zwraca duza tablice z wezlami i zasobami pod tym wezlem
*
* podepnijElement($id1, $id2, $gdzie="przed") - podpina element o id1 pod wezel obok id2. obok jest definiowane przez gdzie (przed,po)
* odlinkujElement($id1) - odpina element od wezla
* przeniesElement($id1,$id2,$gdzie="przed") - w wezle przenosi element id1 obok id2. obok definiowane prze gdzie (przed,po)
*
* ileWybranychDzieci() - zwraca ilosc elementow dzieci po wyszukaniu
* ileSciezki() - zwraca ilosc elementow w sciezce
*
* szukaj() - na podstawie filtrow szuka w swoich WSZYSTKICH dzieciach i towrzy tablice z obiekatmi.
* pobierzWartosciSzukaj() - pobiera dane z tabeli wartosci (o ile sie da) i dopina wartosci do wynikow wyszukania (o ile sa)
* ileWyszukanych() - spr na bazie ile bedzie wynikow
* ileWynikow() - zwraca ilosc wynikow po wyszukaniu
*
* ITERATORY
* wezDziecko(i=-1) - zwraca z tablicy dzieci obiekt(wezel) z pozycji wskazywanej przez iterator $iterator_dzieci.
* mozna jako parametr dac indeks i z tej pozycji bedzie wziete dziecko
* zerujiDzieci() - zeruje wewnetrzny itearator $iterator_dzieci
*
* wezSciezke() - zwraca z tablicy sciezki ($sciezka_obj) obiekt(wezel) z pozycji wskazanej przez iterator $iterator_sciezka
* zerujiSciezka() - zeruje wewnetrzny iterator $iterator_sciezka
* wezSciezkeArr() - zwraca ze sciezki kolejne idiki
* zerujiSciezkaArr() - zeruje iteratora
*
* wezWynik(i=-1) - zwraca z tablicy szukajki obiekt(wezel) z pozycji $iterator_szukaj, mozna podac indeks z kt zostanie pobrany element
* zerujiSzukaj() - zeruje iterator szukaki
*
* FUNKCJE WEWNETRZNE
* prepare_base($count=0) - do dzialania na subselect - generuje podstawe zaytania
* prepare_filter() - do dzialania na subselect - generuje filtr
* prepare_sort() - do subselectow - generuje sortowanie
* prepare_subselect_query($count=0,$withorder=1) - glowna funkcja uzywa co tzreb ai zwraca pelne zapytanie na subselectach
* prepare_base_join($count=0) - na 2 zapytaniach (joinach teoretycznie mialo byc) - generuje podstawe
* prepare_filter_join() - generuje filtr
* prepare_sort_join() -
* prepare_join_query($count=0,$withorder=1) -
* fixKolekcja() - naprawia kolekcje. porownuje to co siedzi w 'kolejkcja' wzgledem zyjacych dzieci
* ojcowie() - zwraca idiki ojcow i zasobow i nazwe. tablcia
*
* FILTRY
* dodajFiltr($nazwa, $filtr, $lacznik="and") - dodaje filtr wyboru dzieci i dla szukajki.
* $nazwa to nazwa pola dla ktorego bedize warunek, $filtr to warunek (jako string) np =\"nawa_pozycji\"
* lub like \"%slowo%\"
* Zasady:
* miedzy polami jest uzywana lacznik $lacznik (domyslnie and). jezeli dodamy kilka wartosci dla pola to jest OR
* przyklad:
* ->dodajFiltr("nazwa_pozycji","=\"jeden\"")
* wynik: szuka gdzie nazwa_pozycji = jeden
* ->dodajFiltr("nazwa_pozycji","=\"osiem\"")
* wynik: szuka gdzie nazwa_pozycji = jeden LUB osiem
* ->dodajFiltr("tresc"," like \"%drzwi%\" ")
* wynik: szuka gdzie (nazwa_pozycji = jeden LUB osiem) I w tresci jest slowo drzwi
*
* inny przyklad:
* szukajka ma szukac po tytule i tresci :
* ->dodajFiltr("nazwa_pozycji","\"wartosc\"","or")
* ->dodajFiltr("tresc","\"wartosc\"","and")
* wynik: szuka gdzie wystepuje wartosc w tytule lub tresci
*
*
* zerujFiltr() - zeruje filtry oraz ignora
*
* filtrIgnore($typ) - powoduje ze filtr nie dotyczy danego typu (1 lub 2)
*
* SORTOWNIE
* dodajSortowanie($pole, "asc" || "desc", $jak="") - sortuje wg podanego pola. pole moze byc z zasobu jak i wartosci
* jak - jak ma byc traktoweana wartosc. normalnie jest varchar co uniemozliwia sort po liczbach.
* mozna podac int lub nic. int - liczby, nic stringi. bedzi erozbudowane w razie potrzeby
* dodano data - sortuje pole uzywaljac str_to_date
* UWAGA: poki co podawac sort po JEDNYM elemencie
* zerujSortowanie() - zeruje sortowanie
*
*/
class wezel3 {
//zmienne
var $lista_wezlow = ""; // lista wezlow podana na wejscie, osttani to id wezla
var $id_wezel = 0; // id wezla wyekstrachowany z listy_wezlow
var $tabela_ddk = ""; // nazwa tabeli ddk
var $tabela_zasob = ""; // nazwa tabeli zasobu
var $tabela_wartosc = ""; // nazwa tabeli z danymi (opcjonalnie)
var $typ_wezla = 0; // typ wezla 1 lub 2. 1 = katalog, 2 = element
var $kolekcja_org = ""; // idiki dzieci oddzielone , pobrane z zasobu (na tym nie wykonuje sie operacji, prucz usuwania i dodawania dzieci)
var $kolekcja_obj_org = array(); // obiekty (wezel) dzieci utworzone poprzez wywolanie funkcji pobierzWszystkieDzieci() (na tym nie wykonuje sie operacji)
var $kolekcja = ""; // idiki dzieci oddzielone , pobrane z zasobu
var $kolekcja_obj = array(); // obiekty (wezel) dzieci utworzone poprzez wywolanie funkcji pobierzDzieci()
var $wartosci = ""; // string idekow z tabeli wartosci (tylko dla 3 tabel)
var $sciezka = ""; // sciezka do tego wezla. ustalana jest na podstawie lista_wezlow
var $sciezka_obj = array(); // obiekty (wezel) sciezki do tego wezla. tablica jest tworzono po wykonaniu pobierzSciezke()
var $sciezka_arr = array(); //idiki kolejnych el w sciezce
var $id_zasob = 0;
var $nadrzedny = ""; //ojciec z ktorego dotarto do wezla
var $ojcowie = ""; // idiki ojcow po przecinku
var $ojcowie_arr = array(); //idiki w tablicy wszystkich ojcow wezla
var $ojcowie_obj = array(); // obiekty(wezel) bedace wszystkimi ojcami tego wezla
var $dane_zasobu = array(); //tu beda przechowywane wartosci zasobu
var $dane_wartosc = array(); //tu beda przechowywane wartosci z wartosci :P (tylko dla 3 tabel)
var $templaty_dzieci =""; //string z idikami templatow dzieci (tylko dla 3 tabel)
var $id_template=0;
//dane do iteratorow
var $iterator_dzieci = 0; // dla chodzenia po dzieciach
var $iterator_sciezka = 0; //dla sciezki (drzewa)
var $iterator_sciezka_arr = 0; // dla sraya sciezka
var $iterator_szukaj = 0; // dla szukania
//dane do filtrow
var $filtry_pola = array();
var $filtry_reguly = array();
var $filtry_lacznik = array();
var $filtry_typ = "";
var $filtr_ignore = 0;
var $filtry_custom="";
//dane do sorta
var $sorty = array();
var $sorty_as = array();
var $sorty_custom ="";
//dane do szukania
var $szukaj_kolekcja = "";
var $szukaj_obj = array();
var $debug="nie";
var $zkaddzieci="normal"; //ustala co ma zwracac funkcja wezDziecko(). brak lub normal oznacza ze dziala normalnie
//szukaj oznacza ze przekazuje dzialanie do wezWynik() - obsluga wyszukanych wynikow
//TODO: publiczne, robocze
var $tryb_dzialania="publiczne"; // tryb dzialnia publiczne | robocze
//definiuje czy uzywac zapytan na subselectach czy joinach
//var $sqltype="subselect"; //subselect, join
var $sqltype="join";
//konstruktor
//tworzy nowy wezel. wezel albo typu starego (2 tabele) albo nowego (3 tabele)
// $lista_wezlow -
// $tabela_ddk - nazwa tabeli dla ddk
// $tabela_zasob - nazwa tabeli dla zasobu
// $tabela_wartosc - nazwa tabeli dla wartosci (opcjonalnie)
// $ini - parametry wejsciowe reczni epodane. przy podaniu recznym nie sa pobierane dane z wartosci
function wezel3($lista_wezlow, $tabela_ddk, $tabela_zasob, $tabela_wartosc="", $ini="") {
if (is_array($tabela_wartosc)) { //korekcja kolejnosci
$ini = $tabela_wartosc;
$tabela_wartosc = "";
}
$this->lista_wezlow = $lista_wezlow;
$tab_id = explode(",", $this->lista_wezlow);
$this->id_wezel = end($tab_id);
$this->tabela_zasob = $tabela_zasob;
$this->tabela_ddk = $tabela_ddk;
//TODO: publiczne, robocze
if ($tabela_zasob[0]=="#") {
$tryb_dzialania="robocze";
$this->tabela_wartosc = substr($tabela_wartosc,1);
} else
$this->tabela_wartosc = $tabela_wartosc;
if ($this->tabela_wartosc=="") { // uzywamy 2 tabel.
if ($ini=="") {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id as id_zasob, z.*
FROM ".$this->tabela_ddk." AS d LEFT JOIN ".$this->tabela_zasob." AS z ON ( d.zasob = z.id )
WHERE d.id ='".$this->id_wezel."'
";
$sql_result = pwykonaj($sql);
$row = pfetcharray($sql_result, 0);
//print_r($row);
} else {
$row=$ini;
}
$this->kolekcja_org = $row["ddk_kolekcja"];
$this->kolekcja = $row["ddk_kolekcja"];
$this->id_zasob = $row["id_zasob"];
$this->typ_wezla = $row["ddk_typ"];
$this->dane_zasobu = array_slice ($row, 4);
array_pop($tab_id);
$this->nadrzedny = implode(",",$tab_id);
$this->sciezka = $this->lista_wezlow;
} else { //uzywamy 3 tabel
if ($ini=="") {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id as id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON ( d.zasob = z.id )
WHERE d.id ='".$this->id_wezel."'
";
$sql_result = pwykonaj($sql);
$row = pfetcharray($sql_result, 0);
} else {
$row = $ini;
}
$this->kolekcja_org = $row["ddk_kolekcja"];
$this->kolekcja = $row["ddk_kolekcja"];
$this->id_zasob = $row["id_zasob"];
$this->typ_wezla = $row["ddk_typ"];
$this->dane_zasobu = array_slice ($row, 4);
array_pop($tab_id);
$this->nadrzedny = implode(",",$tab_id);
//TODO: publiczne, robocze
if ($this->tryb_dzialania=="publiczne") {
$this->wartosci = $row["wartosci"];
} else {
$this->wartosci = $row["wartosci_robocze"];
$this->tabela_wartosc = $this->tabela_wartosc."_robocze";
}
$this->templaty_dzieci = $row["templaty_dzieci"];
$this->sciezka = $this->lista_wezlow;
if (strlen($this->wartosci)>0 && $ini=="") {
$sql = "SELECT * FROM ".$this->tabela_wartosc." WHERE id IN(".$this->wartosci.") ORDER BY FIND_IN_SET( id, '".$this->wartosci."')";
$sql_result = pwykonaj($sql);
for ($i=0;$idane_wartosc[$row['nazwa']] = $row['wartosc'];
}
}
}
if ($ini=="") //autofix
$this->fixKolekcja();
}
//pobiera WSZYSTKIE dzieci olewa sorta, filtry i wogole :P
function pobierzWszystkieDzieci() {
$kolekcja_tmp = array(); //przechowuje idiki kolekcji ktora przejdzie filtry (nie calej ale obrobionej)
if (strlen($this->kolekcja_org)==0) return array(); //jezeli nie ma dzieci zakoncz
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$this->kolekcja_org.") ORDER BY FIND_IN_SET( d.id, '".$this->kolekcja_org."')
";
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
extract($row);
$tmp = new wezel3($this->lista_wezlow.",".$ddk_id, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $row);
$this->kolekcja_obj_org[] = $tmp;
$kolekcja_tmp[] = $ddk_id;
}
return $this->kolekcja_obj_org;
}
// FUNKCJE POMOCNICZE dla zapytan sql na subselctach
function prepare_base($count=0) {
if ($count==0) {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$this->kolekcja.")
";
} else {
$sql = "
SELECT COUNT(*) AS ilosc
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$this->kolekcja.")
";
}
return $sql;
}
function prepare_filter() {
//filtr dla ddk (typ)
$sql="";
if ($this->filtry_typ!="")
$sql.=" and d.typ=".$this->filtry_typ." ";
//filtry dla zasobu
$uzyte_filtry = 0;
for ($i=0; $ifiltry_pola); $i++) { //po nazwach
$nazwa_pola = $this->filtry_pola[$i];
if (in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli
$sql.="\n ".$this->filtry_lacznik[$nazwa_pola][0];
$sql.="(";
for ($j=0; $jfiltry_reguly[$nazwa_pola]); $j++) {
$wartosc_filtra = $this->filtry_reguly[$nazwa_pola][$j];
if ($j>0) $lacznik = $this->filtry_lacznik[$nazwa_pola][$j];
else $lacznik="";
$sql.=" $lacznik z.$nazwa_pola $wartosc_filtra ";
}
if ($this->filtr_ignore) $sql.=" OR d.typ=".$this->filtr_ignore." ";
$sql.=" ) ";
$uzyte_filtry++;
}
}
//filtry na wartosci o ile jest 3 tabela i sa jakies filtry
$cnt=0;
if ($this->tabela_wartosc!="" && count($this->filtry_pola)>$uzyte_filtry) { //jezeli jest 3 tabela i sa filtry
$sql.=" AND (";
for ($i=0; $ifiltry_pola); $i++) { //po nazwach
$nazwa_pola = $this->filtry_pola[$i];
if (!in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli wartosci
//$sql.="\n AND ( ";
if ($cnt>0) $sql.="\n ".$this->filtry_lacznik[$nazwa_pola][0];
$cnt++;
$sql.="\n ( z.id IN (SELECT id_zasobu FROM ".$this->tabela_wartosc." WHERE id_zasobu=z.id AND nazwa=\"$nazwa_pola\" AND ( ";
for ($j=0; $jfiltry_reguly[$nazwa_pola]); $j++) {
$wartosc_filtra = $this->filtry_reguly[$nazwa_pola][$j];
$sql.="wartosc ".$wartosc_filtra." ";
if (count($this->filtry_reguly[$nazwa_pola])!=$j+1)
$sql.=" OR ";
}
$sql.=") )\n ";
//ignore filtra dla zasobu
if ($this->filtr_ignore) $sql.=" OR d.typ=".$this->filtr_ignore." ";
$sql.=") \n ";
}
}
$sql.=")";
}
$sql.=$this->filtry_custom;
return $sql;
}
function prepare_sort() {
//print "s1;";
if (count($this->sorty)>0) {
$pola_sortowania = array_keys($this->sorty);
for ($i=0;$isorty);$i++) {
$nazwa_pola = $pola_sortowania[$i];
$typ_sortowania = $this->sorty[$nazwa_pola];
if (!in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli
//print "s2;";
if ($this->tabela_wartosc!="") { //jest tabela wartosci
//print "s3;";
$sql1 = "SELECT id_zasobu FROM ".$this->tabela_wartosc." WHERE nazwa=\"$nazwa_pola\"
AND id_zasobu IN(SELECT zasob FROM ".$this->tabela_ddk." WHERE id IN (".$this->kolekcja."))
ORDER BY";
// wartosc $typ_sortowania";
//rzutuj typ
if ($this->sorty_as[$nazwa_pola]=="int")
$sql1.=" cast(wartosc AS UNSIGNED ) ";
elseif($this->sorty_as[$nazwa_pola]=="date")
$sql1.=" cast (wartosc AS DATE ) ";
else $sql1.=" wartosc ";
$sql1.=$typ_sortowania;
if ($this->debug=="tak") print "podzapytanie sorta:
$sql1";
$sql_result1 = pwykonaj($sql1);
$tmp_id = array();
for ($j=0;$jkolekcja."')";
return $sql;
}
function prepare_subselect_query($count=0,$withorder=1) {
if ($this->sqltype=="subselect"){
$sql = $this->prepare_base($count);
$sql.= $this->prepare_filter();
if ($withorder==1) $sql.=$this->prepare_sort();
}
return $sql;
}
// FUNKCJE POMOCNICZE DLA ZAPYTAN SQL OPARTYCH NA JOINACH
function prepare_base_join($count=0) {
if ($count==0) {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$this->kolekcja.")
";
} else {
$sql = "
SELECT COUNT(*) AS ilosc
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$this->kolekcja.")
";
}
return $sql;
}
function prepare_filter_join() {
//filtr dla ddk (typ)
$sql="";
if ($this->filtry_typ!="")
$sql.=" and d.typ=".$this->filtry_typ." ";
//filtry dla zasobu
$uzyte_filtry = 0;
for ($i=0; $ifiltry_pola); $i++) { //po nazwach
$nazwa_pola = $this->filtry_pola[$i];
if (in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli
$sql.="\n ".$this->filtry_lacznik[$nazwa_pola][0];
$sql.="(";
for ($j=0; $jfiltry_reguly[$nazwa_pola]); $j++) {
$wartosc_filtra = $this->filtry_reguly[$nazwa_pola][$j];
if ($j>0) $lacznik = $this->filtry_lacznik[$nazwa_pola][$j];
else $lacznik="";
$sql.=" $lacznik z.$nazwa_pola $wartosc_filtra ";
}
if ($this->filtr_ignore) $sql.=" OR d.typ=".$this->filtr_ignore." ";
$sql.=" ) ";
$uzyte_filtry++;
}
}
//filtry na wartosci o ile jest 3 tabela i sa jakies filtry
$cnt=0;
if ($this->tabela_wartosc!="" && count($this->filtry_pola)>$uzyte_filtry) { //jezeli jest 3 tabela i sa filtry
// $sql = "SELECT (SELECT GROUP_CONCAT(x) FROM
// (SELECT id AS x FROM ".$this->tabela_ddk." )
// ) AS kolekcja_new )";
$sql1 = "SELECT (SELECT GROUP_CONCAT(x) FROM (select id_zasobu as x from {$this->tabela_wartosc} where ";
for ($i=0; $ifiltry_pola); $i++) { //po nazwach
$nazwa_pola = $this->filtry_pola[$i];
if (!in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli wartosci
// //ignore filtra dla zasobu
// if ($this->filtr_ignore) $sql.=" OR d.typ=".$this->filtr_ignore." ";
// $sql.=") \n ";
if ($cnt>0) $sql1.="\n ".$this->filtry_lacznik[$nazwa_pola][0];
$cnt++;
$sql1.=" ( nazwa=\"$nazwa_pola\" and ( ";
for ($j=0; $jfiltry_reguly[$nazwa_pola]); $j++) {
$wartosc_filtra = $this->filtry_reguly[$nazwa_pola][$j];
$sql1.=" wartosc $wartosc_filtra " ;
//if ($j>0)
if (count($this->filtry_reguly[$nazwa_pola])!=$j+1)
$sql1.=" OR ";
}
$sql1.="))\n ";
}
}
$sql1.=") AS idiki_zasobow ) AS a";
$sql_result1 = pwykonaj($sql1);
$idiki = presult($sql_result1,0,"a");
$idiki = trim($idiki,",");
$idiki = trim($idiki);
$sql.=" and ( ";
if (strlen($idiki)==0) { //brak wynikow
$sql.=" 1=0";
} else { //sa wyniki
$sql.=" z.id IN($idiki)";
}
if ($this->filtr_ignore) $sql.=" OR d.typ=".$this->filtr_ignore." ";
$sql.=" ) ";
//$this->draw_table($sql_result1);
if ($this->debug=="tak") print "
$sql1
|$idiki|";
if ($this->debug=="tak") print "
|$idiki|
";
}
$sql.=$this->filtry_custom;
return $sql;
}
function prepare_sort_join(){
if ($this->sorty_custom) {
return $this->sorty_custom;
}
//die();
if (count($this->sorty)>0) {
$pola_sortowania = array_keys($this->sorty);
for ($i=0;$isorty);$i++) {
$nazwa_pola = $pola_sortowania[$i];
$typ_sortowania = $this->sorty[$nazwa_pola];
if (!in_array($nazwa_pola,array_keys($this->dane_zasobu))) { //jezeli wartosc jest w kluczachj tabeli
if ($this->tabela_wartosc!="") { //jest tabela wartosci
$sql1 = "SELECT id_zasobu FROM ".$this->tabela_wartosc." WHERE nazwa=\"$nazwa_pola\"
AND id_zasobu IN(SELECT zasob FROM ".$this->tabela_ddk." WHERE id IN (".$this->kolekcja."))
ORDER BY";
// wartosc $typ_sortowania";
//rzutuj typ
if ($this->sorty_as[$nazwa_pola]=="int")
$sql1.=" cast(wartosc AS UNSIGNED ) ";
elseif($this->sorty_as[$nazwa_pola]=="date") {
$sql1.=" cast(wartosc as DATE )";
} else $sql1.=" wartosc ";
$sql1.=$typ_sortowania;
if ($this->debug=="tak") print "podzapytanie:
$sql1
";
$sql_result1 = pwykonaj($sql1);
$tmp_id = array();
for ($j=0;$jkolekcja."')";
return $sql;
}
function prepare_join_query($count=0,$withorder=1) {
if ($this->sqltype=="join") {
$sql = $this->prepare_base_join($count);
$sql.= $this->prepare_filter_join();
if ($withorder==1) $sql.=$this->prepare_sort_join();
}
return $sql;
}
//pobiera dzieci wezla i tworzy z nich obiekty (wezel). umieszcza je w tablicy $kolekcja_obj[]
// funkcja bierze pod uwage filtr i sortowanie
// UWAGA: nie pobiera ich wartosci. Do tego jest inna funkcja
// $od_wezla - pozycja od kt pobierac dzieci
// $ile - ile dzieci nalezy pobrac
function pobierzDzieci($od_wezla=-1, $ile=-1) {
$this->iterator_dzieci = 0;
$this->kolekcja = $this->kolekcja_org;
$kolekcja_tmp = array(); //przechowuje idiki kolekcji ktora przejdzie filtry (nie calej ale obrobionej)
$this->kolekcja_obj = array();
if (strlen($this->kolekcja)==0) return array(); //jezeli nie ma dzieci zakoncz
if ($this->sqltype=="subselect") {
$sql=$this->prepare_subselect_query(0,1);
} elseif ($this->sqltype=="join") {
$sql=$this->prepare_join_query(0,1);
}
// naloz limity od_wezla, do
if ($od_wezla!=-1) {
$sql.= " LIMIT $od_wezla ";
if ($ile!=-1)
$sql.=" , $ile";
}
if ($this->debug=="tak") print $sql;
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
$cnt=0;
$kt_wezel=0; // zlicza kt to wezel danego typu
$ile_wezlow=0; // ile dodano wezlow do tablicy
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
extract($row);
$tmp = new wezel3($this->lista_wezlow.",".$ddk_id, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $row);
$this->kolekcja_obj[] = $tmp;
$kolekcja_tmp[] = $ddk_id;
$cnt++;
$kt_wezel++;
}
$this->kolekcja = implode(",",$kolekcja_tmp);//w kolekcji znajda sie idiki przefiltrowane i posortowane
return $this->kolekcja_obj;
}
//funkcja sprawdza czy jej dzieci istnieja i koryguje string kolekcji
//troche magii sqla. niestety nie da sie w jednym poleceniu, update nie moze
//w zagniezdzonym select uzywac tej samej tabeli
//dzialanie bezposrednio na bazie, uzywane przy tworzeniu wezla.
//pierw nastepuje spr czy nalezy wykonac fixa.
function fixKolekcja() {
//return;
if ($this->kolekcja_org=="") return;//$dlk=0;
else $dlk = count(explode(",",$this->kolekcja_org));
$sql = "select count(*) as ilosc from ".$this->tabela_ddk." where id in(".$this->kolekcja_org.") ";
$sql_result = pwykonaj($sql);
$ile = presult($sql_result,0,"ilosc");
if ($dlk!=$ile) {
$sql = "SELECT (SELECT GROUP_CONCAT(x) FROM
(SELECT id AS x FROM ".$this->tabela_ddk." WHERE id IN(".$this->kolekcja_org.")
ORDER BY FIND_IN_SET(id,'".$this->kolekcja_org."')) AS kolekcja_new ) as k_new";
//print "
$sql";
$sql_result = pwykonaj($sql);
$kolekcja_new = presult($sql_result,0,"k_new");
//print "$kolekcja_new
";
$sql = "UPDATE ".$this->tabela_ddk." SET kolekcja=\"$kolekcja_new\" WHERE id=\"".$this->id_wezel."\" ";
$sql_result = pwykonaj($sql);
$this->kolekcja_org = $kolekcja_new;
$this->kolekcja = $kolekcja_new;
}
}
//pobiera dane z tabeli wartosci (o ile sie da) i dopina wartosci do dzieci (o ile sa)
function pobierzWartosciDzieci() {
if (count($this->kolekcja_obj)==0 || $this->tabela_wartosc=="") return null; // nie ma dzieci oraz nie ma 3 tabeli
//stary kod tylko dopasowany
if(is_array($this->kolekcja_obj)) {
for($i=0; $i < count($this->kolekcja_obj);$i++) {
$tab_obj[] = &$this->kolekcja_obj[$i];
if(!empty($this->kolekcja_obj[$i]->dane_zasobu["wartosci"])) $wartosci_tab[] = $this->kolekcja_obj[$i]->dane_zasobu["wartosci"];// -- przy okazji tworze tabele wartosci
}
}
if(is_array($wartosci_tab)) $lista_wartosci = implode(",", $wartosci_tab);
else $lista_wartosci = "";
if ($lista_wartosci!="") {
$sql = "
SELECT w.*, d.id AS ddk_id
FROM ".$this->tabela_ddk." AS d, ".$this->tabela_wartosc." AS w
WHERE d.zasob = w.id_zasobu AND w.id IN(".$lista_wartosci.")
";
$sql_result = pwykonaj($sql);
for ($i=0;$iid_wezel;
$tab_obj[$i]->dane_wartosc = $wyn[$id];
}
}
}
//pobiera dane z tabeli wartosci (o ile sie da) i dopina wartosci do wynikow wyszukania (o ile sa)
function pobierzWartosciSzukaj() {
if (count($this->szukaj_obj)==0 || $this->tabela_wartosc=="") return null; // nie ma dzieci oraz nie ma 3 tabeli
//stary kod tylko dopasowany
if(is_array($this->szukaj_obj)) {
for($i=0; $i < count($this->szukaj_obj);$i++) {
$tab_obj[] = &$this->szukaj_obj[$i];
if(!empty($this->szukaj_obj[$i]->dane_zasobu["wartosci"])) $wartosci_tab[] = $this->szukaj_obj[$i]->dane_zasobu["wartosci"];// -- przy okazji tworze tabele wartosci
}
}
if(is_array($wartosci_tab)) $lista_wartosci = implode(",", $wartosci_tab);
else $lista_wartosci = "";
if ($lista_wartosci!="") {
$sql = "
SELECT w.*, d.id AS ddk_id
FROM ".$this->tabela_ddk." AS d, ".$this->tabela_wartosc." AS w
WHERE d.zasob = w.id_zasobu AND w.id IN(".$lista_wartosci.")
";
$sql_result = pwykonaj($sql);
for ($i=0;$iid_wezel;
$tab_obj[$i]->dane_wartosc = $wyn[$id];
}
}
}
//funckja wpomagajaca pobierzSciezkeDb, zwraca idiki ojcow i ich zasobow
function ojcowie($id_ddk) {
$ret=array();
$ret1=array();
$sql = "SELECT ddk.id as id, ddk.zasob as zasob, zasob.nazwa as nazwa FROM ".$this->tabela_ddk." AS ddk, ".$this->tabela_zasob." AS zasob WHERE ddk.zasob=zasob.id
AND LOCATE(\",$id_ddk,\", CONCAT(\",\",`kolekcja` ,\",\" ) ) != 0 ORDER BY ddk.id";
//print $sql;
$sql_result = pwykonaj($sql);
$ile = pnumrows($sql_result);
for ($i=0;$i<$ile;$i++) {
$row = pfetcharray($sql_result,$i);
$ret[] = $row['id'];
$ret1[] = $row['zasob'];
$ret2[] = $row['nazwa'];
}
return array($ret,$ret1,$ret2);
}
//pobiera sciezki bazujac na bazie. zwraca zarowno id wezlow jak i id zasobow
function pobierzSciezkeDB() {
$id_ddk = $this->id_wezel;
$dzialaj = 1;
$uzywana = 0;
$ret = array();
while ($dzialaj!=0 && $bezpiecznik<50) {
//print "
ID DDK:$id_ddk;";
$tmp = $this->ojcowie($id_ddk);
//print_r($tmp);
$idddk = $tmp[0];
$idwezel = $tmp[1];
$nazwa = $tmp[2];
if (count($idddk)==1) {
//print "
1 ojciec";
$ret[$uzywana]["idddk"][] = $idddk[0];
$ret[$uzywana]["idwezel"][] = $idwezel[0];
$ret[$uzywana]["nazwa"][] = $nazwa[0];
$id_ddk = $idddk[0];
} elseif(count($idddk)>1) {
//print "
wiele ojciec";
$id_ddk = $idddk[0];
$last = count($ret)-1;
//$last = count($ret);
if ($last==-1) $last=0;
//print "
ilosc sciezek = $last ";
for ($j=1;$jbrak ojciec";
$uzywana++;
$id_ddk = $ret[$uzywana]["idddk"][count($ret[$uzywana]["idddk"])-1];
if (!$id_ddk) $dzialaj=0;
}
//print "
KROK $bezpiecznik:";
//print "";print_r($ret);print "
";
$bezpiecznik++;
}
return $ret;
}
//pobiera sciezke do wezla i tworzy obiekty (wezel). umieszcza je w tablicy $sciezka_obj[]
function pobierzSciezke() {
$this->iterator_sciezka = 0;
if (strlen($this->sciezka)==0) return array(); //jezeli nie ma sciezki zakoncz
$this->sciezka_obj = array();
$sql = "
select d.id as ddk_id, d.typ as ddk_typ, d.zasob as ddk_zasob, d.kolekcja as ddk_kolekcja, z.*
from ".$this->tabela_ddk." as d
left join ".$this->tabela_zasob." as z on (d.zasob = z.id)
WHERE d.id IN (".$this->sciezka.")
ORDER BY FIND_IN_SET( d.id, '".$this->sciezka."')
";
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
$tab_id = explode(",", $this->lista_wezlow);
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
$nowe_lista_wezlow = array_slice ($tab_id, 0 ,$i + 1);
$nowe_lista_wezlow = implode(",",$nowe_lista_wezlow);
extract($row);
$tmp = new wezel3($nowe_lista_wezlow, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $row);
$this->sciezka_obj[] = $tmp;
$this->sciezka_arr[] = $nowe_lista_wezlow; //$row["ddk_id"]
}
return $this->sciezka_obj;
}
// cos - wziete z ddk2
function pobierzPodwezly()
{
//$this->tablica_ob_kolekcji();
//$tab = $this->tab_kolekcja_ob["wszystkie"];
$tab = $this->pobierzWszystkieDzieci();
$bezpiecznik = 0;
$tab_lokalnych_wezlow = array("pusty");//aby while przeszedl za 1 razem. potem zerowanie
$tab_wszystkich_obiektow = array();
$tab_wszystkich_wezlow = array();
$tab_wszystkich_zasobow = array();
$tab_wszystkich_obiektow[]=$this;
$tab_wszystkich_wezlow[]=$this->id_wezel;
$tab_wszystkich_zasobow[]=$this->id_zasob;
while(count($tab)!=0 && $bezpiecznik<20) {
$bezpiecznik++;
$tab_lokalnych_wezlow = array();
$tab_lokalnych_zasobow = array();
$tab_kolejnych_wezlow = array();
$tab_lokalnych_obiektow = array();
$nastepny_tab=array();
for ($i=0;$iid_wezel);
$tab_lokalnych_zasobow = array_merge($tab_lokalnych_zasobow, (array)$tab[$i]->id_zasob);
$tab_lokalnych_obiektow[] =$tab[$i];
if(strlen(trim($tab[$i]->kolekcja))>0) $nastepny_tab = array_merge($nastepny_tab, explode(",",$tab[$i]->kolekcja));
}
//-- przepisz lokalne wyniki do zbioru wszystkich
$tab_wszystkich_wezlow = array_merge($tab_wszystkich_wezlow, $tab_lokalnych_wezlow);
$tab_wszystkich_zasobow = array_merge($tab_wszystkich_zasobow, $tab_lokalnych_zasobow);
$tab_wszystkich_obiektow = array_merge($tab_wszystkich_obiektow, $tab_lokalnych_obiektow);
$kolekcja_nastepny_tab = implode(",", $nastepny_tab);
if (count($nastepny_tab)>0) {
$sql = "
select d.id as ddk_id, d.typ as ddk_typ, d.zasob as ddk_zasob, d.kolekcja as ddk_kolekcja, z.*
from ".$this->tabela_ddk." as d
left join ".$this->tabela_zasob." as z on (d.zasob = z.id)
WHERE d.id IN (".$kolekcja_nastepny_tab.")
ORDER BY FIND_IN_SET( d.id, '".$kolekcja_nastepny_tab."')
";
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
for($i=0; $i < $liczba; $i++)
{
$row = pfetcharray($sql_result, $i);
extract($row);
$tab_kolejnych_wezlow[$i] = new wezel3($this->lista_wezlow.",".$ddk_id, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $arr);
}
}
//-- Zamknij koko i przypisz nowe kolekcje wezlow
$tab = $tab_kolejnych_wezlow;
}
$tab_wezlow["lista_obiektow"] = $tab_wszystkich_obiektow;
$tab_wezlow["lista_wezlow"] = implode(",", $tab_wszystkich_wezlow);
$tab_wezlow["tab_wezlow"] = $tab_wszystkich_wezlow;
$tab_wezlow["lista_zasobow"] = implode(",", $tab_wszystkich_zasobow);
$tab_wezlow["tab_zasobow"] = $tab_wszystkich_zasobow;
return $tab_wezlow;
}
//funkcja tworzy nowe dziecko (wezel) i opcjonalnie zasob oraz wartosci oraz podpina go pod wezel
// $typ - typ wezla dodawanego
// $id_zasob - id zasobu dodawanego. jezeli chcemy aby ddk samo stworzylo zasob nie podajemy id_zasobu
// $gdzie - gdzie zxostanie stworzony wezel. przed albo po. przed = pierwszy, po=ostatni
// $dane_zasob - tablica slownikowa w formie [pole]=[wartosc]. jezeli id_zasobu==0 to wg tych danych
// zostanie stworzony nowy zasob.
// $id_template - id templata
// $dane_wartosc - tablica slownikowa w formie [pole]=[wartosc]. jezeli id_zasob==0 to wg tych danych
// zostana dodane wartosci to tabeli wartosci. pole wartosci zostanie wypelnione automatycznie.
function dodajDziecko($typ, $id_zasob=0, $gdzie="przed", $dane_zasob="", $id_template=0, $dane_wartosc="") {
$tmp_id_wartosci = ",\"\"";
global $przedrostek;
//czy trzeba zrobic wartosci
if ($id_template!=0 && count($dane_wartosc)>0) {
//robimy wartosci
}
//print "|$gdzie|";
//czy trzeba zrobic zasob
if ($id_zasob==0 && is_array($dane_zasob)) {
$id_tworca = $_SESSION[$przedrostek.'uzytkownik']["id"];
//robimy zasob
$id_zasob = pmax($this->tabela_zasob);
$keys = array_keys($dane_zasob);
//pocztek sql i podstawowe dane
$sql = "INSERT INTO ".$this->tabela_zasob." (id,data,czas,id_tworca";
//jezeli jest 3 tabela wartosci tez dodaj
//dodaj klucze z tablicy dane_zasob - dopisac obsluge 3 tabeli (dodajDziecko())
//if ($this->tabela_wartosc!="") $sql.=",wartosci";
if (count($keys)>0) $sql.=",".implode(",",$keys);
//wpisz podstawowe dane
$sql.=") VALUES (\"$id_zasob\",now(),now(),\"$id_tworca\"";
//wpisz jezeli jest 3 tablica wartosci - dopisac ob 3 tabeli (dodajDziecko())
//if ($this->tabela_wartosc!="") $sql.=$tmp_id_wartosci;
//wpisz wartosci z tablicy dane_zasob
if (count($keys)>0) {
for ($i=0;$itabela_ddk);
$sql = "INSERT INTO ".$this->tabela_ddk." (id, zasob, typ) VALUES ('$noweid', '$id_zasob', '$typ')";
pwykonaj($sql);
//-- zmien stara kolekcje na nowa (z nowym id)
if ($this->kolekcja_org=="") $tmp_kol = array();
else $tmp_kol = explode(",",$this->kolekcja_org);
if($gdzie == "przed") $tmp_kol = array_merge(array($noweid),$tmp_kol);
else $tmp_kol=array_merge($tmp_kol,array($noweid));//$this->kolekcja_org.=",".$noweid;
$this->kolekcja_org = implode(",",$tmp_kol);
//print "|".$this->kolekcja_org."|";
//-- zapisz zmiany w kolekcji aktualnego wezla
$sql = "UPDATE ".$this->tabela_ddk." SET kolekcja = '".$this->kolekcja_org."' where id ='".$this->id_wezel."'";
pwykonaj($sql);
$nowy = new wezel3($noweid, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc);
return $nowy;
}
//funckja zwraca ilosc dzieci
//jezeli zostanie podany typ to ignorowane sa filtry
// funkcja bierze pod uwage filtry.
// $typ - typ wezlow ktore liczymy, 2 - element, 1 - katalog, 0 - oba, -1 = uzyj filtra
function ileDzieci($typ="-1") {
// czy wg kolekcji ma dzieci ?
if (strlen($this->kolekcja_org)==0) return 0;
if ($typ==0) { // wszystkie dzieci
return count (explode(",",$this->kolekcja_org));
}
if ($typ!=-1) { //typ 1 lub 2
$sql = "SELECT COUNT(*) AS ilosc FROM ".$this->tabela_ddk." WHERE id IN (".$this->kolekcja.") AND TYP=\"$typ\" ";
$sql_result = pwykonaj($sql);
$row = pfetcharray($sql_result,0);
return $row["ilosc"];
}
if ($typ==-1) { //uzywanie filtra
//czy jest cos ?
if (strlen($this->kolekcja)==0) return 0;
//jezeli sa dzieci zrobione zwroc dlugosc tabeli dzieci
if (count($this->kolekcja_obj)>0) return count($this->kolekcja_obj);
//jeelio nie ma filtra zwroc jakdla typ=0
if (count($this->filtry_pola)==0) return count (explode(",",$this->kolekcja_org));
//jezeli nie ma dzieci to hum sqlujemy sie.. masakra...
if ($this->sqltype=="subselect"){
$sql=$this->prepare_subselect_query(1,1);
} elseif ($this->sqltype=="join") {
$sql=$this->prepare_join_query(1,1);
}
$sql_result = pwykonaj($sql);
$ilosc = presult($sql_result,0,"ilosc");
return $ilosc;
}
}
//funkcja zmienia typ wezla
// $typ - nowy typ wezla
function zmienTyp($typ) {
$sql = "UPDATE ".$this->tabela_ddk." SET typ=\"$typ\" WHERE id=\"".$this->id_wezel."\" ";
pwykonaj($sql);
}
//funkcja usuwa wezel oraz opcjonalnie zasob i wartosci
// $zasob - jezeli wartosc rozna od "nie" to usuwa zasob i wartosci
function usunWezel($zasob="nie") {
//-- Magiczne zapytanie Kosciego - do pola kolekcja dokleja ',' nastepnie zamienia ',id,' na ','. wycina stringa od 2 znaku do konca, odwraca stringa, wycina stringa od 2 pozycji do konca i obraca stringa
// odkleja wezel od ojcow
$sql="UPDATE ".$this->tabela_ddk." SET kolekcja=reverse(substring(reverse(substring(replace(CONCAT(\",\",kolekcja,\",\"),\",".$this->id_wezel.",\",\",\"),2)),2))";
pwykonaj($sql);
if ($zasob!="nie") {
//usuwamy zasob i wartosci
//czy mamy wartosci ?
if ($this->tabela_wartosc!="") { //usuwamy wartosci
$sql="DELETE FROM ".$this->tabela_wartosc." WHERE id_zasobu =\"".$this->id_zasob."\" ";
pwykonaj($sql);
}
//usuwamy zasob
$sql = "DELETE FROM ".$this->tabela_zasob." WHERE id =\"".$this->id_zasob."\" ";
pwykonaj($sql);
}
//usuwamy wezel
$sql="DELETE FROM ".$this->tabela_ddk." WHERE id='".$this->id_wezel."'";
pwykonaj($sql);
unset($this);
}
//funkcja usuwa wezel i wszytskie podwezly
// $zasob - jezeli wartosc rozna od "nie" to usuwa zasoby i wartosci
//TODO:(pomyslec) zastanowic sie nad mykiem z nie usuwaniem tych ddk ktore sa jeszcze gdzies podlinkowane:
//usunac glowny ddk a nastepnie te ddk z jego dzieci kt nie maja ojcow ? a co z kolejnymi poziomami ?
function usunWezelDzieci($zasob="nie") {
$tab = $this->pobierzPodwezly();
//usun zasoby i wartosci jezeli tak tzreba
if ($zasob!="nie" && strlen($tab["lista_zasobow"])>0) {
if ($this->tabela_wartosc!="") { //wyrzucamy wartosci
$sql = "DELETE FROM ".$this->tabela_wartosc." WHERE id_zasobu IN(".$tab["lista_zasobow"].")";
pwykonaj($sql);
}
$sql = "DELETE FROM ".$this->tabela_zasob." WHERE id IN(".$tab["lista_zasobow"].")";
pwykonaj($sql);
}
//usun wezly
$sql="DELETE FROM ".$this->tabela_ddk." WHERE id IN(".$tab["lista_wezlow"].")";
if(strlen($tab["lista_wezlow"])>0) pwykonaj($sql);
$this->usunWezel($zasob);
return $tab["lista_zasobow"];
}
//funkcja zwraca ilosc ojcow wezla (wyszukiwanie na bazie)
function ileOjcow() {
$sql = "SELECT COUNT(*) as ilosc FROM ".$this->tabela_ddk." WHERE FIND_IN_SET(".$this->id_wezel.",kolekcja) ";
$sql_result=pwykonaj($sql);
return presult($sql_result,0,"ilosc");
}
//funkcja zwraca ojcow (wyszukiwanie na bazie)
//moze zwrocic albo liste wezlow, albo tablice, albo tablice obiektow
// $jak - "lista" = string, "tablica" = array, "obiekt" = objekty (wezel)[]
function pobierzOjcow($jak="lista") {
if (count($this->ojcowie_arr)==0) {
$sql= 'SELECT * FROM '.$this->tabela_ddk.' WHERE locate( ",'.$this->id_wezel.',", concat( ",", `kolekcja` , "," ) ) != 0';
$sql_result=pwykonaj($sql);
$liczba = pnumrows($sql_result);
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
$this->ojcowie_arr[] = $row['id'];
}
$this->ojcowie = implode(",",$this->ojcowie_arr);
}
if ($jak=="tablica") {
return $this->ojcowie_arr;
} elseif ($jak=="obiekt") {
if (count($this->ojcowie_arr)==0)
return array();
$tmp =implode (",",$this->ojcowie_arr);
$sql = "
select d.id as ddk_id, d.typ as ddk_typ, d.zasob as ddk_zasob, d.kolekcja as ddk_kolekcja, z.*
from ".$this->tabela_ddk." as d
left join ".$this->tabela_zasob." as z on (d.zasob = z.id)
WHERE d.id IN (".$tmp.")
ORDER BY FIND_IN_SET( d.id, '".$tmp."')
";
;
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
//print_r( $row);
extract($row);
$tmp = new wezel3($row["ddk_id"], $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $row);
$this->ojcowie_obj[] = $tmp;
}
return $this->ojcowie_obj;
} else {
return implode(",",$this->ojcowie_arr);
}
}
//funkcja zwraca wartosc zmiennej przekazanej. sam wyszukuje czy to z zasobu czy wartosci. wartosc ma wiekszy priorytet
function pobierz($nazwa) {
global $VT_sciezka;
if ($this->dane_wartosc!="" && array_key_exists($nazwa,$this->dane_wartosc)) {
if ($this->dane_wartosc[$nazwa]!="") {
$tmp = $this->dane_wartosc[$nazwa];
return eregi_replace("%VT_sciezka%",$VT_sciezka,$tmp);
}
else return "";
}
if (array_key_exists($nazwa,$this->dane_zasobu)) {
if ($this->dane_zasobu[$nazwa]!="") {
$tmp = $this->dane_zasobu[$nazwa];
return eregi_replace("%VT_sciezka%",$VT_sciezka,$tmp);
}
else return "";
}
return "";
}
//zwraca miniaturke
function pobierzThumb($nazwa,$dodatek) {
$t = $this->pobierz($nazwa);
if (!$t) return "";
$nazwapliku = basename($t);
list($nazwa1, $roz) = explode(".",$nazwapliku);
$t = dirname($t)."/VTthumb/".$nazwa1.$dodatek.".".$roz;
return $t;
}
//funkcja przenosi jeden element wzgledem drugiego (w tym samym wezle)
// $id1, numer wezla do przeniesienia
// $id2 - numer wezla obok ktorego przenosimy
// $gdzie - pod, przed - gdzie umiescic id1 wzgledem id2
function przeniesElement($id1,$id2,$gdzie="pod") {
if ($id2==0) return;
if ($this->kolekcja_org=="") $kolekcja_array=array();
else $kolekcja_array = explode(",", $this->kolekcja_org);
$fix=0;
if ($gdzie=="pod") $fix=1;
$pos1 = array_search($id1,$kolekcja_array);
$tmp = array_slice($kolekcja_array,0,$pos1);
$tmp1 = array_slice ($kolekcja_array,$pos1+1);
$tmpk = array_merge($tmp,$tmp1);
$pos2=array_search($id2,$tmpk);
$tmp=array_slice($tmpk,0,$pos2+$fix);
array_push($tmp,$id1);
$tmpk = array_merge($tmp,array_slice($tmpk,$pos2+$fix));
$this->kolekcja_org = implode(",",$tmpk);
$sql = "UPDATE ".$this->tabela_ddk." SET kolekcja = '".$this->kolekcja_org."' WHERE id ='".$this->id_wezel."'";
pwykonaj($sql);
}
//funkcja odczepia element o numerze $id1 z wezla
// $id1 - numer (id) wezla do odpiecia
function odlinkujElement($id1) {
if ($this->kolekcja_org=="") $kolekcja_array=array();
else $kolekcja_array = explode(",", $this->kolekcja_org);
if(($pos1 = array_search($id1,$kolekcja_array))!==false)
{
unset($kolekcja_array[$pos1]);
$kolekcja_array = array_values($kolekcja_array);
$this->kolekcja_org = implode(",",$kolekcja_array);
$sql = "UPDATE ".$this->tabela_ddk." SET kolekcja = '".$this->kolekcja_org."' WHERE id ='".$this->id_wezel."'";
pwykonaj($sql);
}
}
//funkcja doczepia element do wezla wzgledem innego elementu w tym wezle
// $id1 - numer wezla do podpiecia
// $id2 - wezel bedzie obok tego wezla
// $gdzie - pod / przed - pozycjonuje id1 wzgledem id2
function podepnijElement($id1,$id2,$gdzie="pod") {
// print "Kolekcj aprzed: ".$this->kolekcja_org."
";
if(empty($this->kolekcja_org)) $kolekcja_array = array();
else $kolekcja_array = explode(",", $this->kolekcja_org);
if($id2==0)
{
if(!in_array($id1, $kolekcja_array))
{
if($gdzie == "pod") $kolekcja_array = array_merge($kolekcja_array, array($id1));
else $kolekcja_array = array_merge(array($id1),$kolekcja_array);
}
else return(0);
}
else
{
$fix=0;
if ($gdzie=="pod") $fix=1;
$pos2=array_search($id2,$kolekcja_array);
$tmp=array_slice($kolekcja_array,0,$pos2+$fix);
array_push($tmp,$id1);
$kolekcja_array = array_merge($tmp,array_slice($kolekcja_array,$pos2+$fix));
}
$this->kolekcja_org = implode(",",$kolekcja_array);
$this->kolekcja_org = trim($this->kolekcja_org,",");
// print "kolekcja po ".$this->kolekcja_org;
$sql = "UPDATE ".$this->tabela_ddk." SET kolekcja = '".$this->kolekcja_org."' WHERE id ='".$this->id_wezel."'";
//print $sql;
pwykonaj($sql);
}
//------------------------------------SZUKAJKA
//
function szukaj($od_wezla=-1, $ile=-1) {
$this->szukaj_obj=array();
$this->szukaj_kolekcja = "";
$dane = $this->pobierzPodwezly();
//if ($this->debug=="tak") print_r($dane);
unset($dane["tab_wezlow"][0]);
$dane["tab_wezlow"] = array_values($dane["tab_wezlow"]);
//print_r($dane["tab_wezlow"]);
$szukaj_w_wezlach = implode(",",$dane["tab_wezlow"]);
$szukaj_w_wezlach = trim($szukaj_w_wezlach);
if (strlen($szukaj_w_wezlach)>0) { //sa mlokoiski mlode
if ($this->sqltype=="subselect") {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$szukaj_w_wezlach.")
";
$sql.=$this->prepare_filter();
$sql.=$this->prepare_sort();
} elseif ($this->sqltype=="join") {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$szukaj_w_wezlach.")
";
$sql.=$this->prepare_filter_join();
$sql.=$this->prepare_sort_join();
}
if ($od_wezla!=-1) {
$sql.= " LIMIT $od_wezla ";
if ($ile!=-1)
$sql.=" , $ile";
}
if ($this->debug=="tak") print $sql;
$sql_result = pwykonaj($sql);
$liczba = pnumrows($sql_result);
for($i=0; $i < $liczba; $i++) {
$row = pfetcharray($sql_result, $i);
extract($row);
$tmp = new wezel3($this->lista_wezlow.",".$ddk_id, $this->tabela_ddk, $this->tabela_zasob, $this->tabela_wartosc, $row);
$this->szukaj_obj[] = $tmp;
$szukaj_tmp[] = $ddk_id;
}
if (count($szukaj_tmp)>0)
$this->szukaj_kolekcja = implode(",",$szukaj_tmp);//w kolekcji znajda sie idiki przefiltrowane i posortowane
else
$this->szukaj_kolekcja = "";
} else { //nie ma wezlow
}
return $this->szukaj_obj;
}
//ile bedzie wynikow
function ileWyszukanych() {
$dane = $this->pobierzPodwezly();
unset($dane["tab_wezlow"][0]);
$dane["tab_wezlow"] = array_values($dane["tab_wezlow"]);
//print_r($dane["tab_wezlow"]);
$szukaj_w_wezlach = implode(",",$dane["tab_wezlow"]);
$szukaj_w_wezlach = trim($szukaj_w_wezlach);
if (strlen($szukaj_w_wezlach)==0) return 0; //nie ma wezlow
if ($this->sqltype=="subselect"){
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$szukaj_w_wezlach.")
";
$sql.=$this->prepare_filter();
} elseif ($this->sqltype=="join") {
$sql = "
SELECT d.id AS ddk_id, d.typ AS ddk_typ, d.zasob AS ddk_zasob, d.kolekcja AS ddk_kolekcja, z.id AS id_zasob, z.*
FROM ".$this->tabela_ddk." AS d
LEFT JOIN ".$this->tabela_zasob." AS z ON (d.zasob = z.id)
WHERE d.id IN (".$szukaj_w_wezlach.")
";
$sql.=$this->prepare_filter_join();
}
if ($this->debug=="tak") print $sql;
$sql_result = pwykonaj($sql);
//$this->draw_table($sql_result);
$liczba = pnumrows($sql_result);
return $liczba;
}
//funkcja wspomagajaca- rysuje tabelke
function draw_table($sql_result) {
for ($i=0; $i$i):";print_r($row);
}
}
//------------------------------------ITERATORY
//funcja zwraca kolejne dzieci jako obiekty (wezel). jezeli nie ma zwrocic zwraca null
// uzywa iteratora $iterator_dzieci
// jezeli jest parametr zwraca dziecko o tym indeksie. nie wplywa to na iterator
function wezDziecko($indeks=-1) {
if ($this->zkaddzieci=="szukaj") return $this->wezWynik($indeks);
if ($indeks==-1) {
if ($this->iterator_dziecikolekcja_obj)) {
$tmp = $this->kolekcja_obj[$this->iterator_dzieci];
$this->iterator_dzieci ++;
return $tmp;
} else {
return null;
}
} else {
return $this->kolekcja_obj[$indeks];
}
}
//resetuje wskaznik dzieci
function zerujiDzieci() {
$this->iterator_dzieci=0;
}
//zwraca ilosc wybranych i stworzonych dzieci
function ileWybranychDzieci() {
return count($this->kolekcja_obj);
}
//funkcja zwraca kolejne obiekty(wezel) ze sciezki (od 0)
function wezSciezke() {
if ($this->iterator_sciezkasciezka_obj)) {
$tmp = $this->sciezka_obj[$this->iterator_sciezka];
$this->iterator_sciezka ++;
return $tmp;
} else {
return null;
}
}
//resetuje iterator do scsiezki
function zerujiSciezka() {
$this->iterator_sciezka=0;
}
function wezSciezkeArr() {
if ($this->iterator_sciezka_arrsciezka_arr)) {
$tmp = $this->sciezka_arr[$this->iterator_sciezka_arr];
$this->iterator_sciezka_arr++;
return $tmp;
} else {
return null;
}
}
function zerujiSciezkaArr() {
$this->iterator_sciezka_arr=0;
}
function ileSciezki() {
return count($this->sciezka_obj);
}
//funckja zwraca kolejne obiekty z szukania
function wezWynik($indeks=-1){
if ($indeks==-1) {
if ($this->iterator_szukajszukaj_obj)) {
$tmp = $this->szukaj_obj[$this->iterator_szukaj];
$this->iterator_szukaj++;
return $tmp;
} else {
return null;
}
} else {
return $this->szukaj_obj[$indeks];
}
}
function zerujiSzukaj() {
$this->iterator_szukaj=0;
}
function ileWynikow() {
return count($this->szukaj_obj);
}
//------------------------------------FILTRY
//funkcja dodaje filtr do szukania dzieci
// $nazwa to nazwa pola dla ktorego bedize warunek, $filtr to warunek (jako string) np =\"nawa_pozycji\"
// lub like \"%slowo%\"
// Zasady:
// miedzy polami jest uzywana lacznik AND. jezeli dodamy kilka wartosci dla pola to jest OR
// przyklad:
// ->dodajFiltr("nazwa_pozycji","=\"jeden\"")
// wynik: szuka gdzie nazwa_pozycji = jeden
// ->dodajFiltr("nazwa_pozycji","=\"osiem\"")
// wynik: szuka gdzie nazwa_pozycji = jeden LUB osiem
// ->dodajFiltr("tresc"," like \"%drzwi%\" ")
// wynik: szuka gdzie (nazwa_pozycji = jeden LUB osiem) I w tresci jest slowo drzwi
function dodajFiltr($nazwa, $filtr, $regula="and") {
if ($nazwa) {
if ($nazwa=="typ") {
$this->filtry_typ = $filtr;
} else {
if (!in_array($nazwa,$this->filtry_pola)) $this->filtry_pola[]=$nazwa;
$this->filtry_reguly[$nazwa][]=$filtr;
$this->filtry_lacznik[$nazwa][] = $regula;
}
}
}
//dodaje ignorowanie filtru dla danego typu el (1 lub 2)
function filtrIgnore($typ=0) {
$this->filtr_ignore = $typ;
}
//funkcja czysci filtry
function zerujFiltry() {
$this->filtry_pola = array();
$this->filtry_reguly = array();
$this->filtry_typ = "";
$this->filtr_ignore = 0;
}
//------------------------------------SORTOWANIE
// funkcja usawia po czym sortowac.
// $nazwa - nazwa pola, $typ = "asc" lub "desc"
function dodajSortowanie($nazwa, $typ="asc", $jako="") {
if ($nazwa) {
$this->sorty[$nazwa]=$typ;
$this->sorty_as[$nazwa]=$jako;
}
}
function zerujSortowanie() {
$this->sorty = array();
}
}
?>
// wersja 3.3 15.02.2008
// znajdz_ddk($tabela_ddk, $id_zasobu) - tabela w ktorej szukac, id zasobu
// ddk_wyszukaj($fraza,$ids="", $temp_in="", $temp_out="", $typ_wezla=0) - zabytek jeszcze siedzi
//funkcja znajduje id ddk na podstawie id zasobu oraz tabeli ddk
function znajdz_ddk($tabela_ddk,$id_zasobu) {
$sql= "SELECT * FROM $tabela_ddk WHERE zasob =\"$id_zasobu\"";
$sql_result=pwykonaj($sql);
if (pnumrows($sql_result)>0) {
$row = pfetcharray($sql_result, 0);
$tmp = $row['id'];
} else
$tmp=0;
return $tmp;
}
// (string)$fraza = szukana fraza,
// (array)$ids = wezel z id pod kt szukamy,
// (array)$temp_in tabela z id templatami do szukania,
// (array)$temp_out tabela z id teplatami NIE do szukania
// NOT IMPLEMENTED (int)typ wezla - jakiego typu szukamy. 0 - obojetne, 1 - katalog, 2 - element
function ddk_wyszukaj($fraza,$ids="", $temp_in="", $temp_out="", $typ_wezla=0) {
//wyszukanie w tabeli zasob_wartosc
$sql = "select * from VTP_menu_wartosc where (nazwa = \"nazwa_pozycji\" and wartosc like \"%$fraza%\") or (nazwa=\"autor\" and wartosc like \"%$fraza%\") ";
$sql_result = pwykonaj($sql);
//print $sql;
$ideki[] = array();
$tmp="";
$wyniki = array();
if (pnumrows($sql_result)>0) { //sa wyniki
//wyciagnij ideki
for ($i=0;$iwezly_rekurencyjne();
$dziatki = $wezelki["lista_wezlow"];
$d_tab = explode(",",$dziatki);
//auto cut
if (($pos1 = array_search($ids[0],$d_tab))!==false) {
unset($d_tab[$pos1]);
$d_tab = array_values($d_tab);
}
$wyniki = array_intersect($id_wezlow,$d_tab);
} else {
$wyniki = $id_wezlow;
}
}
return $wyniki;
}
//czy wezel jest pod wezlem o id, zwraca bezposredniego id ojca wezla
function jestPod($wezel,$id) {
$pathy = $wezel->pobierzSciezkeDB();
foreach ($pathy as $sc) {
foreach ($sc["idddk"] as $ojcowie) {
#if (!$str1) $str1 = $dzialki[$ojcowie];
if ($ojcowie == $id) {
return $sc["idddk"][0];
}
}
}
return 0;
}
?>
// copyritght VisualTeam v 2.1
// 27.06.2007
//
// metody
// - pobierz_z_bazy() - pobierz z bazy dane o uzytkowniku wszystkie dla danego loginu Jesli nie ma uzytkownika zwraca "brak"
// - set_dane_sessii(tabela z rzadanimi danymi dodatkowymi) - wpisz do sesji zmienna uzytkownik z danymi o uzytkowniku
// - sprawdz_haslo($haslo) - sprawdz ilosc znakow i zgodnosc hasla (bazuje na mysqlowym password())
class uzytkownik
{
//-- publiczne
var $id; //-- id uzytkownika
var $login; //-- login uzytkownika
var $haslo; //-- haslo uzytkownika
var $grupy; //-- grupy praw uzytkownika
var $istnieje; //-- tak/nie - istnienie w bazie uzytkownika
var $tab_daneuzytkownika;
var $aktywny;
//-- prywatne
var $conn; //-- Identyfikator polaczenia z baza
var $tab_uzytkownicy;
var $tab_uzytkownicy_opis;
function uzytkownik($login, $connect, $tab_uzytkownicy, $tab_uzytkownicy_opis)
{
$this->login = $login;
$this->conn = $connect;
$this->tab_uzytkownicy = $tab_uzytkownicy;
$this->tab_uzytkownicy_opis = $tab_uzytkownicy_opis;
}
function pobierz_z_bazy() //-- pobierz z bazy dane o uzytkowniku wszystkie dla danego loginu Jesli nie ma zwraca "brak"
{
//--- pobierze dane uzytkownika
$sql = "
select u.aktywny as u_aktywny, u.id as u_id, u.login as u_login, u.haslo as u_haslo, u.grupy as u_grupy, uo.*
FROM ".$this->tab_uzytkownicy." AS u LEFT JOIN ".$this->tab_uzytkownicy_opis." AS uo ON ( u.id = uo.id_uzytkownicy )
where u.login ='".$this->login."'
";
$wynik = pwykonaj($sql);
$liczba = pnumrows($wynik);
//-- sprawdz czy uzytkownik o takim loginie istnieje
if($liczba != 0)
{
$arr = pfetcharray($wynik, 0);
extract($arr);
$this->id = $u_id;
$this->haslo = $u_haslo;
$this->grupy = $u_grupy;
$this->aktywny = $u_aktywny;
$this->tab_daneuzytkownika = array_slice ($arr, 4);
$this->istnieje = "tak";
}
else $this->istnieje = "nie";
}
function set_dane_sessii($tabela) // -- wpisz do sesji zmienna uzytkownik z danymi o uzytkowniku
{
global $przedrostek;
$uzyt["login"] = $this->login;
$uzyt["id"] = $this->id;
$uzyt["grupy"] = $this->grupy;
// -- przypisz dane o uzytkowniku zarzadane na wejsciu
for($i=0; $i < count($tabela); $i++)
{
$uzyt[$tabela[$i]] = $this->tab_daneuzytkownika[$tabela[$i]];
}
$_SESSION[$przedrostek.'uzytkownik'] = $uzyt;
}
function sprawdz_haslo($haslo)
{
if($istnieje == "nie") return false;
if(strlen($haslo) == 0) return false;
$sql = "select * from ".$this->tab_uzytkownicy." where login=\"".$this->login."\" and haslo=password(\"$haslo\") ";
$sql_result = pwykonaj($sql);
if (pnumrows($sql_result)==0) return false;
//if($this->haslo != md5($haslo)) return false;
return true;
}
}
?>
// wersja 2.1 05.06.2007
/*
tylko dla sessji.
sql wylaczony - czytaj nie istnieje jeszcze
wywolanie Cart(id osoby=0,typ="") - z sesji sam pobiera co mu potrzeba. typ jest doklejany do przedrostka
sesji aby uniknac nadpisywania sie koszykow z roznych poziomow (panel, koszyk z zamowien, inne)
getCart() - zwraca tablice z 5 elementami. 1 el = tablica id produktow, 2 - tablica ilosci, 3 - tablica cen brutto, 4 - ceny netto, 5 vat
getCartStr() - zwraca tablioce z 5 elementami. 1- id produktow oddzielone znakiem , 2 - iolosci , 3 - cena jednstkowa, 4 - cena netto, 5 vat
dodaj(id produkt, ilosc, cena, cena_netto,vat,rabat=0) - dodaje do koszyka element.
dodaj_wiele(tablica) -w tablica zawieraja sie 5 tablice, id, ilosc, cena, cena netto, vat
odejmij($id_produkt,$ilosc) - zmniejsza ilosc produktu w koszyku
ustaw($id_produkt,$ilosc) - ustawia ilosc produktu
setCena(id, cena brutto, cena netto) - zmienia cene dla produktu o podanym id
usun(id) - usuwa z koszyka produkt o zadanym id
getNext() - pobiera kolejny wiersz i zwraca array z 7 eleentami, id, ilosc, cena jednostkowa, nazwa, cen anetto, vat, rabat
restart() - resetuje wskaznik na pozycje pierwsza
reset()- zeruje koszyk
getNames() - na podstawie id produktow wyciaga nazwy z bazy
getCenaTotal() - zwraca calkowita cene brutto rzeczy z koszyka (z uwzglednieniem rabatow na kat i prod)
getCenaTotalNetto() - zwraca calkowia cene netto(z uwzglednieniem rabatow na kat i prod)
zapisz() - zapisuje koszyk do sesji
getIloscTotal() - zwraca ile jest produktow w koszyku
setRabat(id_produkt, rabat) - ustawia rabat dla produktu
*/
class Cart {
var $id_sesja; //(string) identyfikator sesji
var $iterator=0; // (int) wewnetrzny wskaznik uzywany przy getNext()
var $id_osoba=0;// (int) id osoby zalogowanej
var $id_produkt = array (); // (array) tablica id produktow
var $ilosc = array (); // (array) tablica zaw ilosc prosuktow
var $cena_jednostkowa = array (); // (array) tablica zaw cene brutto jednostkowa danego produktu
var $cena_jednostkowa_netto = array (); // (array) tablica zaw cene netto jednostkowa danego produktu
var $rabat = array(); //
var $vat = array(); // (array) tablica zaw vat produktu
var $param1 = array(); // (array) parametry specjalne
var $param2 = array(); // (array) parametry specjalne
var $param3 = array(); // (array) parametry specjalne
var $param4 = array(); // (array) parametry specjalne
var $typ; // (string) typ koszyka : session
var $nazwy = array();
var $tabela_ddk = ""; //nazwa tabeli ddk sklepu
var $tabela_zasob = ""; //nazwa tabeli zasobu do sklepu
//konstruktor.
function Cart($id_osoba=0,$typ=""){
global $przedrostek;
global $sklep_ddk;
global $sklep_zasob;
$this->id_sesja = $przedrostek.$typ;
$this->id_osoba = $id_osoba;
$this->tabela_ddk = $sklep_ddk;
$this->tabela_zasob = $sklep_zasob;
if (!is_array($_SESSION[$przedrostek."_koszyk"])) {
$_SESSION[$przedrostek."_koszyk"][0] = array(); //id produktow
$_SESSION[$przedrostek."_koszyk"][1] = array(); //ilosc
$_SESSION[$przedrostek."_koszyk"][2] = array(); //cena jednostkowa brutto
$_SESSION[$przedrostek."_koszyk"][3] = array(); //cena jednostkowa netto
$_SESSION[$przedrostek."_koszyk"][4] = array(); // wartosc vat
$_SESSION[$przedrostek."_koszyk"][5] = array(); // wielkosc rabatu na prod
$_SESSION[$przedrostek."_koszyk"][6] = array(); // paramentr
$_SESSION[$przedrostek."_koszyk"][7] = array(); // paramentr
$_SESSION[$przedrostek."_koszyk"][8] = array(); // paramentr
$_SESSION[$przedrostek."_koszyk"][9] = array(); // paramentr
$_SESSION[$przedrostek."_koszyk"][10] = array(); // identyfikator id+param1+param2+param3+param4
}
$this->initCartsesja($_SESSION[$przedrostek."_koszyk"]);
}
//inicjalizacja koszyka z sesji. parametrem wejsciowym jest tablica tablic (przechowywana
//bezposrednio w sessji
function initCartsesja($cart) {
if (is_array($cart)) {
$this->id_produkt=$cart[0];
$this->ilosc=$cart[1];
$this->cena_jednostkowa=$cart[2];
$this->cena_jednostkowa_netto=$cart[3];
$this->vat=$cart[4];
$this->rabat=$cart[5];
$this->param1=$cart[6];
$this->param2=$cart[7];
$this->param3=$cart[8];
$this->param4=$cart[9];
$this->identyfikator=$cart[10];
}
$this->typ="session";
$this->save=0;
}
//zwraca tablice 3 elementowa. elemenatmi sa tablice zawierajace id produktow, ilosci i ceny jednostkowe
function getCart() {
$tmp[0]=$this->id_produkt;
$tmp[1]=$this->ilosc;
$tmp[2]=$this->cena_jednostkowa;
$tmp[3]=$this->cena_jednostkowa_netto;
$tmp[4]=$this->vat;
$tmp[5]=$this->rabat;
$tmp[6]=$this->param1;
$tmp[7]=$this->param2;
$tmp[8]=$this->param3;
$tmp[9]=$this->param4;
$tmp[10]=$this->identyfikator;
return $tmp;
}
//zwraca tablice 3 el. el sa stringi
function getCartStr() {
$tmp[0]=implode("|",$this->id_produkt);
$tmp[1]=implode("|",$this->ilosc);
$tmp[2]=implode("|",$this->cena_jednostkowa);
$tmp[3]=implode("|",$this->cena_jednostkowa_netto);
$tmp[4]=implode("|",$this->vat);
$tmp[5]=implode("|",$this->rabat);
$tmp[6]=implode("|",$this->param1);
$tmp[7]=implode("|",$this->param2);
$tmp[8]=implode("|",$this->param3);
$tmp[9]=implode("|",$this->param4);
$tmp[10]=implode("|",$this->identyfikator);
return $tmp;
}
//dodaje produkt do koszyka. parametrami sa: id produkty, ilosc, i cena jednostkowa
function dodaj($id_produkt,$ilosc,$cena=0,$cena_netto=0,$vat=0,$rabat=0,$param1="0",$param2="0",$param3="0",$param4="0") {
//print "dodaj: $id_produkt,$ilosc,$cena
";
$identyfikator = $id_produkt.".".$param1.".".$param2.".".$param3.".".$param4;
if (!$id_produkt) return;
if (($pos = array_search($identyfikator,$this->identyfikator))===false) {
$this->id_produkt[]=$id_produkt;
$this->ilosc[]=$ilosc;
$this->cena_jednostkowa[]=$cena;
$this->cena_jednostkowa_netto[]=$cena_netto;
$this->vat[]=$vat;
$this->rabat[] =$rabat;
$this->param1[] =$param1;
$this->param2[] =$param2;
$this->param3[] =$param3;
$this->param4[] =$param4;
$this->identyfikator[] =$identyfikator;
} else {
$this->ilosc[$pos] = $this->ilosc[$pos]+$ilosc;
}
//print_r($this);
$this->zapisz();
}
//dodaje wiele produktow przekazywanych w tablicy.
function dodaj_wiele($tablica) {
$tmp=$tablica[0];
$tmp1=$tablica[1];
$tmp2=$tablica[2];
$tmp3=$tablica[3];
$tmp4=$tablica[4];
$tmp5=$tablica[5];
$tmp6=$tablica[6];
$tmp7=$tablica[7];
$tmp8=$tablica[8];
$tmp9=$tablica[9];
$tmp10=$tablica[10];
for ($i=0;$idodaj($tmp[$i],$tmp1[$i],$tmp2[$i],$tmp3[$i],$tmp4[$i],$tmp5[$i],$tmp6[$i],$tmp7[$i],$tmp8[$i],$tmp9[$i],$tmp10[$i]);
}
$this->zapisz();
}
// funkcja odejmuje produkt z koszyka
function odejmij($id_produkt,$ilosc,$identyfikator) {
if (($pos = array_search($identyfikator,$this->identyfikator))!==false) {
if ($ilosc<$this->ilosc[$pos])
$this->ilosc[$pos] = $this->ilosc[$pos]-$ilosc;
else {
$this->id_produkt=$this->usunelement($pos,$this->id_produkt);
$this->ilosc=$this->usunelement($pos,$this->ilosc);
$this->cena_jednostkowa=$this->usunelement($pos,$this->cena_jednostkowa);
$this->cena_jednostkowa_netto=$this->usunelement($pos,$this->cena_jednostkowa_netto);
$this->vat=$this->usunelement($pos,$this->vat);
$this->rabat=$this->usunelement($pos,$this->rabat);
$this->param1=$this->usunelement($pos,$this->param1);
$this->param2=$this->usunelement($pos,$this->param2);
$this->param3=$this->usunelement($pos,$this->param3);
$this->param4=$this->usunelement($pos,$this->param4);
$this->identyfikator=$this->usunelement($pos,$this->identyfikator);
}
}
$this->zapisz();
}
// funkcja ustawia ilosc produktu i id na podany
function ustaw($id_produkt,$ilosc) {
if ($ilosc==0) $this->usun($id_produkt);
else {
if (($pos = array_search($id_produkt,$this->id_produkt))!==false) {
$this->ilosc[$pos] = $ilosc;
}
$this->zapisz();
}
}
//usuwa produkt z koszyka
function usun($id_produkt,$identyfikator) {
if (($pos = array_search($identyfikator,$this->identyfikator))!==false) {
$this->id_produkt=$this->usunelement($pos,$this->id_produkt);
$this->ilosc=$this->usunelement($pos,$this->ilosc);
$this->cena_jednostkowa=$this->usunelement($pos,$this->cena_jednostkowa);
$this->cena_jednostkowa_netto=$this->usunelement($pos,$this->cena_jednostkowa_netto);
$this->vat=$this->usunelement($pos,$this->vat);
$this->rabat=$this->usunelement($pos,$this->rabat);
$this->param1=$this->usunelement($pos,$this->param1);
$this->param2=$this->usunelement($pos,$this->param2);
$this->param3=$this->usunelement($pos,$this->param3);
$this->param4=$this->usunelement($pos,$this->param4);
$this->identyfikator=$this->usunelement($pos,$this->identyfikator);
}
$this->zapisz();
}
function usunelement($pos,$tab) {
$tmp = array_slice($tab,0,$pos);
$tmp1 = array_slice ($tab,$pos+1);
return array_merge($tmp,$tmp1);
}
// funkcja zwraca pozycje koszyka bazujac na wewnetrzynym iteratorze
function getNext() {
if ($this->iterator==count($this->id_produkt)) {
$tmp="";
//$tmp[1]="";
//$tmp[2]="";
} else {
$tmp[0]=$this->id_produkt[$this->iterator];
$tmp[1]=$this->ilosc[$this->iterator];
$tmp[2]=$this->cena_jednostkowa[$this->iterator];
$tmp[3]=$this->nazwy[$this->id_produkt[$this->iterator]];
$tmp[4]=$this->cena_jednostkowa_netto[$this->iterator];
$tmp[5]=$this->vat[$this->iterator];
$tmp[6]=$this->rabat[$this->iterator];
$tmp[7]=sprintf("%.2f",$tmp[2]*(100/(100-$tmp[6])));
$tmp[8]=sprintf("%.2f",$tmp[4]*(100/(100-$tmp[6])));
$tmp[9]=$this->param1[$this->iterator];
$tmp[10]=$this->param2[$this->iterator];
$tmp[11]=$this->param3[$this->iterator];
$tmp[12]=$this->param4[$this->iterator];
$tmp[13]=$this->identyfikator[$this->iterator];
$this->iterator++;
}
return $tmp;
}
// restartuje iterator
function restart() {
$this->iterator=0;
}
//resetuje koszyk
function reset() {
$this->id_produkt = array ();
$this->ilosc = array ();
$this->cena_jednostkowa = array ();
$this->cena_jednostkowa_netto=array();
$this->vat=array();
$this->rabat=array();
$this->param1=array();
$this->param2=array();
$this->param3=array();
$this->param4=array();
$this->identyfikator=array();
$this->zapisz();
}
//zwraca calkowita cene brutto z uwzglednieniem rabatow na produkt .
function getCenaTotal() {
$cena=0;
for($i=0;$iid_produkt);$i++) {
$cena = sprintf ("%.2f",$cena+$this->cena_jednostkowa[$i]*$this->ilosc[$i]);
}
return $cena;
}
//zwraca calkowita cene netto z uwzglednieniem rabatow na produkt .
function getCenaTotalNetto() {
$cena=0;
for($i=0;$iid_produkt);$i++) {
$cena = sprintf ("%.2f",$cena+$this->cena_jednostkowa_netto[$i]*$this->ilosc[$i]);
}
return $cena;
}
//zwraca calkowita cene brutto bez uwzglednienia rabatow
function getCenaTotalFull() {
$cena = 0;
for($i=0;$iid_produkt);$i++) {
$pelna_cena = sprintf("%.2f",$this->cena_jednostkowa[$i]*(100/(100-$this->rabat[$i])));
$cena = sprintf ("%.2f",$cena+$pelna_cena*$this->ilosc[$i]);
}
return $cena;
}
//zwraca calkowita cene netto bez uwzglednienia rabatow
function getCenaTotalNettoFull() {
$cena = 0;
for($i=0;$iid_produkt);$i++) {
$pelna_cena = sprintf("%.2f",$this->cena_jednostkowa_netto[$i]*(100/(100-$this->rabat[$i])));
$cena = sprintf ("%.2f",$cena+$pelna_cena*$this->ilosc[$i]);
}
return $cena;
}
//zwraca ilosc produktow w koszyku
function getIloscTotal() {
$ilosc=0;
for($i=0;$iid_produkt);$i++) {
$ilosc+=$this->ilosc[$i];
}
return $ilosc;
}
//zmienia cene dla produktu o id
function setCena($id_produkt,$cena, $cena_netto) {
if (($pos = array_search($id_produkt,$this->id_produkt))!==false) {
$this->cena_jednostkowa[$pos] = $cena;
$this->cena_jednostkowa_netto[$pos] = $cena_netto;
}
$this->zapisz();
}
//ustawia rabat na produkt
function setRabat($id_produkt,$rabat) {
if (($pos = array_search($id_produkt,$this->id_produkt))!==false) {
$this->rabat[$pos] = $rabat;
}
$this->zapisz();
}
//zapisuje koszyk do sesji
function zapisz() {
//print_r($this);
$_SESSION[$this->id_sesja."_koszyk"][0] = $this->id_produkt;
$_SESSION[$this->id_sesja."_koszyk"][1] = $this->ilosc;
$_SESSION[$this->id_sesja."_koszyk"][2] = $this->cena_jednostkowa;
$_SESSION[$this->id_sesja."_koszyk"][3] = $this->cena_jednostkowa_netto;
$_SESSION[$this->id_sesja."_koszyk"][4] = $this->vat;
$_SESSION[$this->id_sesja."_koszyk"][5] = $this->rabat;
$_SESSION[$this->id_sesja."_koszyk"][6] = $this->param1;
$_SESSION[$this->id_sesja."_koszyk"][7] = $this->param2;
$_SESSION[$this->id_sesja."_koszyk"][8] = $this->param3;
$_SESSION[$this->id_sesja."_koszyk"][9] = $this->param4;
$_SESSION[$this->id_sesja."_koszyk"][10] = $this->identyfikator;
}
//pobiera nazwy produktow z bazy
function getNames() {
if (count($this->id_produkt)>0) {
$sql="select * from ".$this->tabela_zasob." where id in(".implode(",",$this->id_produkt).")";
//echo $sql;
$sql_result = pwykonaj($sql);
for ($i=0;$inazwy[$row['id']] = $row['nazwa'];
}
}
}
}
// numerki.php v 1.0 15.09.2006
// numerki_przelicz($liczba, $wspolczynnik="brak",$wspdziesiec="brak")
// $tab_num["prev"] , $tab_num["poprzednie"] , $tab_num["cyferki"] , $tab_num["nastepne"] , $tab_num["next"]
// $zwrot[0] = $odilu;
// $zwrot[1] = $doilu;
// $zwrot[2] = $tab_num;
function prepare_numerki($ciag,$ktory,$ktoryktory){
$ciag = str_replace("%ktory%",$ktory,$ciag);
$ciag = str_replace("%ktoryktory%",$ktoryktory,$ciag);
return $ciag;
}
function numerki_przelicz($liczba, $wspolczynnik="brak",$wspdziesiec="brak")
{
$REQUEST_URI = $_SERVER['REQUEST_URI'];
//if ($typ=="sklep" || $typ=="filmy") {
//sklep-2,7-0-0-0-Szpiegowanie.html
$tmp = explode("-",$REQUEST_URI);
$_GET['ktory']=$tmp[2];
$_GET['ktoryktory']=$tmp[3];
$tmp[2] = "%ktory%";
$tmp[3] = "%ktoryktory%";
$strona = implode("-",$tmp);
//}
//$REQUEST_URI = $_SERVER['REQUEST_URI'];
$ktory = $_GET['ktory'];
$ktoryktory = $_GET['ktoryktory'];
// $strona = $REQUEST_URI;
// $strona = eregi_replace("ktory.*$","",$strona);
if($wspolczynnik=="brak") $wspolczynnik = 7; //--- Ilosc wyswietlanych rekrordow
if($wspdziesiec=="brak") $wspdziesiec = 10; //---- Ilosc wyswietlanych numerkow
// $numerlink = $strona.$dodatek; // -- powinien tu byc adres tej strony
if(!$ktoryktory) $ktoryktory = 0;
$ile = $liczba/$wspolczynnik;
$dodoile = $ktoryktory * $wspdziesiec + $wspdziesiec;
$ododile = $ktoryktory * $wspdziesiec + 1;
if($dodoile>$ile) {$dodoile = $ile;$nas="nie";}
$ktoryktoryM = $ktoryktory +1;
$ktoryktoryL = $ktoryktory -1;
if(!$ktory) $ktory = $ododile;
$odilu=($ktory-1)*$wspolczynnik;
$doilu=$ktory*$wspolczynnik;
if($doilu > $liczba) $doilu = $liczba;
//--------- Generowanie wyswietlania numerkow
if($ile >1 && !$odilu) {$odilu = 0; $doilu = $wspolczynnik;}
if($ile <1 && !$odilu) {$odilu = 0; $doilu = $liczba;}
//print "numerki.php: odilu=$odilu|doilu=$doilu|ktory=$ktory
";
$numerwyswietl="";
if($ktoryktory >0) $poprzednie = "<<poprzednie ";
//$poprzednie = "<<poprzedni ";
if($ile > 1)
{
for($i=$ododile;$i < $dodoile+1; $i++)
{
if($i==$ktory) $numerwyswietl .= "[$i] ";
else $numerwyswietl .= "$i ";
//$numerwyswietl .= "$i ";
}
}
if(($ktoryktory >0 || $ile>$wspdziesiec) && $nas!="nie") $nastepne = "następne>>";
//$nastepne = "następny>>";
//-------- Generowanie wynikow zwrotnych
if ($ktory>1) {
$ktoryktoryPrev = $ktoryktory;
if (($wspdziesiec*$ktoryktory)==$ktory-1) $ktoryktoryPrev--;
$tab_num["prev"] = "<";
//$tab_num["prev"] = "<";
$tab_num["prevhref"] =prepare_numerki($strona,$ktory-1,$ktoryktoryPrev);
//$tab_num["prevhref"] ="{$numerlink}ktory=".($ktory-1)."&ktoryktory=$ktoryktoryPrev";
}
$tab_num["poprzednie"] = $poprzednie;
$tab_num["cyferki"] = $numerwyswietl;
$tab_num["nastepne"] = $nastepne;
if ($ktory<$ile) {
$ktoryktoryNext = $ktoryktory;
if ((($ktoryktory+1)*$wspdziesiec)==$ktory) $ktoryktoryNext++;
$tab_num["next"] = ">";
// /$tab_num["next"] = ">";
$tab_num["nexthref"]=prepare_numerki($strona,$ktory+1,$ktoryktoryNext);
//$tab_num["nexthref"]="{$numerlink}ktory=".($ktory+1)."&ktoryktory=$ktoryktoryNext";
}
//
// $tab_num["prev"] = str_replace("&","&",$tab_num["prev"]);
// $tab_num["prevhref"] = str_replace("&","&",$tab_num["prevhref"]);
// $tab_num["poprzednie"] = str_replace("&","&",$tab_num["poprzednie"]);
// $tab_num["cyferki"] = str_replace("&","&",$tab_num["cyferki"]);
// $tab_num["nastepne"] = str_replace("&","&",$tab_num["nastepne"]);
// $tab_num["nexthref"] = str_replace("&","&",$tab_num["nexthref"]);
// $tab_num["next"] = str_replace("&","&",$tab_num["next"]);
$zwrot[0] = $odilu;
$zwrot[1] = $doilu;
$zwrot[2] = $tab_num;
return($zwrot);
}
?>