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); } ?>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(); } } ?>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; } ?>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; } } ?>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']; } } } } $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); } ?>