PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/toolsajax.server.php

https://bitbucket.org/photografixgit/all4sps-git
PHP | 1698 lines | 1243 code | 287 blank | 168 comment | 223 complexity | 78628cdc041003f849a25c0b9ea922cf MD5 | raw file
  1. <?php
  2. /**
  3. * copyright (c) 2006-2010 JTL-Software-GmbH, all rights reserved
  4. *
  5. * this file may not be redistributed in whole or significant part
  6. * and is subject to the JTL-Software-GmbH license.
  7. *
  8. * license: http://jtl-software.de/jtlshop3license.html
  9. */
  10. require_once("includes/globalinclude.php");
  11. $session = new Session();
  12. require_once(PFAD_ROOT . PFAD_INCLUDES . "smartyInlcude.php");
  13. require_once("toolsajax.common.php");
  14. $cAktuelleSeite = substr(strrchr($_SERVER['HTTP_REFERER'], "/"), 1, strlen(strrchr($_SERVER['HTTP_REFERER'], "/")));
  15. if($cAktuelleSeite == "ajaxcheckout.php?" || $cAktuelleSeite == "warenkorb.php?" || substr(strrchr($_SERVER['PHP_SELF'], "/"), 1, strlen(strrchr($_SERVER['PHP_SELF'], "/"))) == "ajaxcheckout.php")
  16. {
  17. $Einstellungen = getEinstellungen(array(CONF_GLOBAL,CONF_NAVIGATIONSFILTER,CONF_RSS,CONF_KUNDEN,CONF_KAUFABWICKLUNG,CONF_KUNDENFELD,CONF_KUNDENWERBENKUNDEN,CONF_TRUSTEDSHOPS,CONF_AUSWAHLASSISTENT,CONF_METAANGABEN));
  18. $GlobaleEinstellungen = $Einstellungen['global'];
  19. }
  20. function gibFinanzierungInfo($kArtikel, $fPreis)
  21. {
  22. global $smarty;
  23. require_once(PFAD_ROOT . PFAD_INCLUDES_EXT . 'finanzierung_inc.php');
  24. $oArtikel = new stdClass;
  25. $objResponse = new xajaxResponse();
  26. $oArtikel->Preise = new stdClass;
  27. $oArtikel->kArtikel = $kArtikel;
  28. $oArtikel->Preise->fVK = array($fPreis);
  29. gibFinanzierung($oArtikel);
  30. if (isset($oArtikel->oRateMin))
  31. {
  32. $smarty->assign('Artikel', $oArtikel);
  33. $smarty->assign('Einstellungen', getEinstellungen(array(CONF_ARTIKELDETAILS)));
  34. $cText = $smarty->fetch('tpl_inc/artikel_finanzierung.tpl');
  35. $cTable = $smarty->fetch('tpl_inc/artikel_finanzierung_popup.tpl');
  36. $objResponse->assign("commerz_financing", "innerHTML", $cText);
  37. $objResponse->assign("popupf" . $kArtikel, "innerHTML", $cTable);
  38. }
  39. $objResponse->assign("commerz_financing", "style.display", isset($oArtikel->oRateMin) ? "block" : "none");
  40. return $objResponse;
  41. }
  42. function billpayRates()
  43. {
  44. global $smarty;
  45. require_once(PFAD_ROOT . PFAD_INCLUDES_MODULES . 'PaymentMethod.class.php');
  46. $oAjax = new xajaxResponse();
  47. $oResponse = new stdClass;
  48. $oResponse->nType = 0;
  49. $oBillpay = PaymentMethod::create('za_billpay_jtl');
  50. if ($oBillpay)
  51. {
  52. $oRates = $oBillpay->calculateRates($_SESSION['Warenkorb']);
  53. if (is_object($oRates))
  54. {
  55. $oResponse->nType = 2;
  56. $oResponse->cRateHTML_arr = array();
  57. $oResponse->nRates_arr = $oRates->nAvailable_arr;
  58. // special link
  59. $cPortalHash = md5($oBillpay->getSetting('pid'));
  60. $cBillpayTermsURL = BILLPAY_TERMS_RATE;
  61. $cBillpayTermsURL = str_replace('%pidhash%', $cPortalHash, $cBillpayTermsURL);
  62. foreach ($oRates->aRates_arr as $oRate)
  63. {
  64. // rate
  65. $smarty->assign('oRate', $oRate);
  66. $smarty->assign('nRate_arr', $oRates->nAvailable_arr);
  67. // links
  68. $smarty->assign('cBillpayTermsURL', $cBillpayTermsURL);
  69. $smarty->assign('cBillpayPrivacyURL', BILLPAY_PRIVACY);
  70. $smarty->assign('cBillpayTermsPaymentURL', BILLPAY_TERMS_PAYMENT);
  71. $oResponse->cRateHTML_arr[$oRate->nRate] = utf8_encode($smarty->fetch('tpl_inc/modules/billpay/raten.tpl'));
  72. }
  73. }
  74. else
  75. {
  76. $oResponse->nType = 1;
  77. }
  78. }
  79. $oAjax->script("this.response = " . json_encode($oResponse) . ";");
  80. return $oAjax;
  81. }
  82. function gibVergleichsliste($nVLKeys = 0, $bWarenkorb = true)
  83. {
  84. global $smarty;
  85. require_once("includes/vergleichsliste_inc.php");
  86. $objResponse = new xajaxResponse();
  87. //session starten
  88. $session = new Session();
  89. $Einstellungen_Vergleichsliste = getEinstellungen(array(CONF_VERGLEICHSLISTE,CONF_ARTIKELDETAILS));
  90. //url
  91. $requestURL = baueURL($Link,URLART_SEITE);
  92. $sprachURL = baueSprachURLS($Link,URLART_SEITE);
  93. $oVergleichsliste = new Vergleichsliste();
  94. // Falls $nVLKeys 1 ist, nimm die kArtikel von $_SESSION['nArtikelUebersichtVLKey_arr'] und baue eine neue TMP Vergleichsliste
  95. if($nVLKeys == 1 && isset($_SESSION['nArtikelUebersichtVLKey_arr']) && is_array($_SESSION['nArtikelUebersichtVLKey_arr']) && count($_SESSION['nArtikelUebersichtVLKey_arr']) > 0)
  96. {
  97. $oVergleichsliste->oArtikel_arr = array();
  98. foreach($_SESSION['nArtikelUebersichtVLKey_arr'] as $nArtikelUebersichtVLKey)
  99. $oVergleichsliste->fuegeEin($nArtikelUebersichtVLKey, false);
  100. // Laufe erneut die fertigen Artikel durch lösche Vaterartikel von der Vergleichsliste, da diese nicht verglichen werden dürfen
  101. /*
  102. if(count($oVergleichsliste->oArtikel_arr) > 0)
  103. {
  104. $nCount = count($oVergleichsliste->oArtikel_arr);
  105. for($i = 0; $i < $nCount; $i++)
  106. {
  107. if($oVergleichsliste->oArtikel_arr[$i]->nIstVater == 1)
  108. unset($oVergleichsliste->oArtikel_arr[$i]);
  109. }
  110. $oVergleichsliste->oArtikel_arr = array_merge($oVergleichsliste->oArtikel_arr);
  111. }
  112. */
  113. }
  114. elseif ($nVLKeys != 0 && strlen($nVLKeys) > 0)
  115. {
  116. $nVLKey_arr = explode(';', $nVLKeys);
  117. if (is_array($nVLKey_arr))
  118. {
  119. for ($i = 0; $i < count($nVLKey_arr); $i+=2)
  120. {
  121. $oVergleichsliste->fuegeEin($nVLKey_arr[$i], false, $nVLKey_arr[$i+1]);
  122. }
  123. }
  124. }
  125. $oMerkVaria_arr = baueMerkmalundVariation($oVergleichsliste);
  126. // Füge den Vergleich für Statistikzwecke in die DB ein
  127. setzeVergleich($oVergleichsliste);
  128. $cExclude = array();
  129. for($i=0; $i<8; $i++)
  130. {
  131. $cElement = gibMaxPrioSpalteV($cExclude, $Einstellungen_Vergleichsliste);
  132. if(strlen($cElement) > 1)
  133. {
  134. array_push($cExclude, $cElement);
  135. }
  136. }
  137. // Spaltenbreite
  138. $nBreiteAttribut = 100;
  139. if(intval($Einstellungen_Vergleichsliste['vergleichsliste']['vergleichsliste_spaltengroesseattribut']) > 0)
  140. $nBreiteAttribut = intval($Einstellungen_Vergleichsliste['vergleichsliste']['vergleichsliste_spaltengroesseattribut']);
  141. $nBreiteArtikel = 200;
  142. if(intval($Einstellungen_Vergleichsliste['vergleichsliste']['vergleichsliste_spaltengroesse']) > 0)
  143. $nBreiteArtikel = intval($Einstellungen_Vergleichsliste['vergleichsliste']['vergleichsliste_spaltengroesse']);
  144. $nBreiteTabelle = $nBreiteArtikel * count($oVergleichsliste->oArtikel_arr) + $nBreiteAttribut;
  145. //spezifische assigns
  146. $smarty->assign('nBreiteTabelle', $nBreiteTabelle);
  147. $smarty->assign('cPrioSpalten_arr', $cExclude);
  148. $smarty->assign('oMerkmale_arr', $oMerkVaria_arr[0]);
  149. $smarty->assign('oVariationen_arr', $oMerkVaria_arr[1]);
  150. $smarty->assign('oVergleichsliste', $oVergleichsliste);
  151. $smarty->assign('Navigation',createNavigation($AktuelleSeite, 0, 0));
  152. $smarty->assign('Einstellungen',$GLOBALS['GlobaleEinstellungen']);
  153. $smarty->assign('Einstellungen_Vergleichsliste', $Einstellungen_Vergleichsliste);
  154. $smarty->assign("NettoPreise", $_SESSION['Kundengruppe']->nNettoPreise);
  155. $smarty->assign('bAjax', true);
  156. $smarty->assign('bWarenkorb', $bWarenkorb);
  157. // Hook
  158. executeHook(HOOK_VERGLEICHSLISTE_PAGE);
  159. $cHTML = $smarty->fetch('vergleichsliste.tpl');
  160. $cHTML = utf8_encode($cHTML); // FIX!!!
  161. $cHTML = json_encode($cHTML);
  162. //$objResponse->assign('compare_list_wrapper_ajax', 'innerHTML', $cHTML);
  163. $objResponse->script("this.compareHTML = ".$cHTML.";");
  164. return $objResponse;
  165. }
  166. function ermittleVersandkostenAjax($oArtikel_arr)
  167. {
  168. $objResponse = new xajaxResponse();
  169. $oResponse = new stdClass();
  170. $oResponse->cText = utf8_encode(ermittleVersandkostenExt($oArtikel_arr));
  171. $oResponse->cText .= ' (' . $_SESSION['shipping_count']++ . ')';
  172. $objResponse->script("this.response = " . json_encode($oResponse).";");
  173. return $objResponse;
  174. }
  175. function loescheWarenkorbPosAjax($nPos)
  176. {
  177. $objResponse = new xajaxResponse();
  178. require_once("classes/class.JTL-Shop.Artikel.php");
  179. //wurden Positionen gelöscht?
  180. if ($_SESSION["Warenkorb"]->PositionenArr[intval($nPos)]->nPosTyp == 1)
  181. {
  182. unset($_SESSION["Warenkorb"]->PositionenArr[intval($nPos)]);
  183. $_SESSION["Warenkorb"]->PositionenArr = array_merge($_SESSION["Warenkorb"]->PositionenArr);
  184. loescheAlleSpezialPos();
  185. if(!$_SESSION["Warenkorb"]->enthaltenSpezialPos(C_WARENKORBPOS_TYP_ARTIKEL))
  186. $_SESSION["Warenkorb"] = new Warenkorb();
  187. // Lösche Position aus dem WarenkorbPersPos
  188. if($_SESSION['Kunde']->kKunde > 0)
  189. {
  190. $oWarenkorbPers = new WarenkorbPers($_SESSION['Kunde']->kKunde);
  191. $oWarenkorbPers->entferneAlles();
  192. $oWarenkorbPers->bauePersVonSession();
  193. }
  194. }
  195. return $objResponse;
  196. }
  197. function fuegeEinInWarenkorbAjax($kArtikel, $anzahl, $oEigenschaftwerte_arr = "")
  198. {
  199. global $Einstellungen, $Kunde, $smarty;
  200. require_once("classes/class.JTL-Shop.Artikel.php");
  201. require_once("classes/class.JTL-Shop.Sprache.php");
  202. require_once('includes/boxen.php');
  203. require_once('includes/artikel_inc.php');
  204. require_once('includes/sprachfunktionen.php');
  205. $oResponse = new stdClass;
  206. $objResponse = new xajaxResponse();
  207. $GLOBALS['oSprache'] = new Sprache(false);
  208. $GLOBALS['oSprache']->autoload();
  209. $kArtikel = intval($kArtikel);
  210. if ($anzahl>0 && $kArtikel>0)
  211. {
  212. $redirectParam = array();
  213. $Artikel = new Artikel();
  214. unset($oArtikelOptionen);
  215. $oArtikelOptionen->nMerkmale = 0;
  216. $oArtikelOptionen->nAttribute = 0;
  217. $oArtikelOptionen->nArtikelAttribute = 0;
  218. $oArtikelOptionen->nDownload = 1;
  219. $Artikel->fuelleArtikel($kArtikel, $oArtikelOptionen);
  220. $Artikel->holArtikelAttribute();
  221. // Falls der Artikel ein Variationskombikind ist, hole direkt seine Eigenschaften
  222. if(isset($Artikel->kEigenschaftKombi) && $Artikel->kEigenschaftKombi > 0)
  223. $oEigenschaftwerte_arr = gibVarKombiEigenschaftsWerte($Artikel->kArtikel);
  224. if (intval($anzahl)!=$anzahl && $Artikel->cTeilbar!="Y")
  225. $anzahl = max(intval($anzahl), 1);
  226. // Prüfung
  227. $redirectParam = pruefeFuegeEinInWarenkorb($Artikel, $anzahl, $oEigenschaftwerte_arr);
  228. if (count($redirectParam)>0)
  229. {
  230. /*
  231. if(isset($_SESSION['variBoxAnzahl_arr']))
  232. {
  233. $oResponse->nType = 0;
  234. $oResponse->cNachricht = "Weiterleitung erfolgt";
  235. $objResponse->script("this.response = ".json_encode($oResponse).";");
  236. return $objResponse;
  237. }
  238. */
  239. $add = "&".SID;
  240. $location = "";
  241. $cRedirectParam = implode(',', $redirectParam);
  242. baueArtikelhinweise($cRedirectParam);
  243. $smarty->assign('cHinweis_arr', $GLOBALS['Artikelhinweise']);
  244. $oResponse->cPopup = utf8_encode($smarty->fetch('tpl_inc/artikel_weiterleitung.tpl'));
  245. //redirekt zum artikel, um variation/en zu wählen / MBM beachten
  246. if($Artikel->nIstVater == 1)
  247. $location = 'navi.php?a='.$Artikel->kArtikel."&n=".$anzahl."&r=".implode(",",$redirectParam).$add;
  248. else if($Artikel->kEigenschaftKombi > 0)
  249. $location = 'navi.php?a=' . $Artikel->kVaterArtikel . '&a2='.$Artikel->kArtikel."&n=".$anzahl."&r=".implode(",",$redirectParam).$add;
  250. else
  251. $location = 'index.php?a='.$Artikel->kArtikel."&n=".$anzahl."&r=".implode(",",$redirectParam).$add;
  252. $oResponse->nType = 1;
  253. $oResponse->cLocation = $location;
  254. $oResponse->oArtikel = $Artikel;
  255. $objResponse->script("this.response = ".json_encode($oResponse).";");
  256. return $objResponse;
  257. }
  258. $_SESSION["Warenkorb"]->fuegeEin($kArtikel, $anzahl, $oEigenschaftwerte_arr);
  259. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_VERSANDPOS);
  260. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_VERSANDZUSCHLAG);
  261. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_VERSAND_ARTIKELABHAENGIG);
  262. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_ZAHLUNGSART);
  263. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_ZINSAUFSCHLAG);
  264. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_BEARBEITUNGSGEBUEHR);
  265. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_NEUKUNDENKUPON);
  266. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_NACHNAHMEGEBUEHR);
  267. $_SESSION['Warenkorb']->loescheSpezialPos(C_WARENKORBPOS_TYP_TRUSTEDSHOPS);
  268. unset($_SESSION['VersandKupon']);
  269. unset($_SESSION['NeukundenKupon']);
  270. unset($_SESSION['Versandart']);
  271. unset($_SESSION['Zahlungsart']);
  272. unset($_SESSION['TrustedShops']);
  273. // Wenn Kupon vorhanden und prozentual auf ganzen Warenkorb,
  274. // dann verwerfen und neu anlegen
  275. altenKuponNeuBerechnen();
  276. setzeLinks();
  277. // Persistenter Warenkorb
  278. if(!isset($_POST["login"]))
  279. fuegeEinInWarenkorbPers($kArtikel, $anzahl, $oEigenschaftwerte_arr, $add);
  280. $smarty->assign('Boxen', $GLOBALS['Boxen']);
  281. $warensumme[0]=gibPreisStringLocalized($_SESSION["Warenkorb"]->gibGesamtsummeWarenExt(array(C_WARENKORBPOS_TYP_ARTIKEL),1));
  282. $warensumme[1]=gibPreisStringLocalized($_SESSION["Warenkorb"]->gibGesamtsummeWarenExt(array(C_WARENKORBPOS_TYP_ARTIKEL),0));
  283. $smarty->assign('WarenkorbWarensumme', $warensumme);
  284. $kKundengruppe = $_SESSION['Kundengruppe']->kKundengruppe;
  285. if(isset($_SESSION['Kunde']->kKundengruppe) && $_SESSION['Kunde']->kKundengruppe > 0)
  286. $kKundengruppe = $_SESSION['Kunde']->kKundengruppe;
  287. $smarty->assign('WarenkorbVersandkostenfreiHinweis', baueVersandkostenfreiString(gibVersandkostenfreiAb($kKundengruppe), $_SESSION["Warenkorb"]->gibGesamtsummeWaren(1,1)));
  288. $smarty->assign('WarenkorbVersandkostenfreiLaenderHinweis', baueVersandkostenfreiLaenderString(gibVersandkostenfreiAb($kKundengruppe), $_SESSION["Warenkorb"]->gibGesamtsummeWaren(1,1)));
  289. $smarty->assign('oArtikel', $Artikel); // deprecated 3.12
  290. $smarty->assign('zuletztInWarenkorbGelegterArtikel', $Artikel);
  291. $smarty->assign('fAnzahl', $anzahl);
  292. $smarty->assign("NettoPreise", $_SESSION['Kundengruppe']->nNettoPreise);
  293. $oXSelling = gibArtikelXSelling($kArtikel);
  294. $smarty->assign('Xselling', $oXSelling);
  295. $oResponse->nType = 2;
  296. $oResponse->cWarenkorbText = utf8_encode(lang_warenkorb_warenkorbEnthaeltXArtikel($_SESSION["Warenkorb"]));
  297. $oResponse->cWarenkorbLabel = utf8_encode(lang_warenkorb_warenkorbLabel($_SESSION["Warenkorb"]));
  298. //$oResponse->cNachricht = utf8_encode(sprintf($GLOBALS['oSprache']->gibWert('basketAjaxAdded', 'messages'), $Artikel->cName, $anzahl));
  299. $oResponse->cPopup = utf8_encode($smarty->fetch('tpl_inc/artikel_hinzugefuegt.tpl'));
  300. $oResponse->cWarenkorbMini = utf8_encode($smarty->fetch('tpl_inc/warenkorb_mini.tpl'));
  301. $oResponse->oArtikel = utf8_convert_recursive($Artikel, true);
  302. $objResponse->script("this.response = ".json_encode($oResponse).";");
  303. // Kampagne
  304. if(isset($_SESSION['Kampagnenbesucher']))
  305. setzeKampagnenVorgang(KAMPAGNE_DEF_WARENKORB, $kArtikel, $anzahl); // Warenkorb
  306. if ($GLOBALS['GlobaleEinstellungen']['global']['global_warenkorb_weiterleitung'] == "Y" && $nWeiterleitung == 0)
  307. {
  308. $add="?".SID;
  309. $oResponse->nType = 1;
  310. $oResponse->cLocation = 'warenkorb.php' . $add;
  311. $objResponse->script("this.response = ".json_encode($oResponse).";");
  312. return $objResponse;
  313. }
  314. }
  315. return $objResponse;
  316. }
  317. function setzeErweiterteDarstellung($nED)
  318. {
  319. global $Einstellungen;
  320. $objResponse = new xajaxResponse();
  321. require_once("includes/filter_inc.php");
  322. // Hole alle aktiven Sprachen
  323. if (isset($NaviFilter->oSprache_arr))
  324. unset($NaviFilter->oSprache_arr);
  325. if (!isset($NaviFilter))
  326. $NaviFilter = new stdClass;
  327. $NaviFilter->oSprache_arr = new stdClass;
  328. $NaviFilter->oSprache_arr = $GLOBALS['DB']->executeQuery("SELECT kSprache FROM tsprache", 2);
  329. $NaviFilter = baueNaviFilter($NaviFilter, array());
  330. gibErweiterteDarstellung($Einstellungen, $NaviFilter, $nED);
  331. return $objResponse;
  332. }
  333. // Kundenformular Ajax PLZ
  334. /*
  335. Params:
  336. $cFormValue => Textfeld Wert vom Kundenfomular input Feldes
  337. $cLandISO => Ausgewähltes Land in der DropDown Box
  338. */
  339. function gibPLZInfo($cFormValue, $cLandISO)
  340. {
  341. $objResponse = new xajaxResponse();
  342. $oPlz_arr = array();
  343. if (strlen($cFormValue) >= 4)
  344. {
  345. $oPlz_arr = $GLOBALS['DB']->executeQuery("SELECT cOrt
  346. FROM tplz
  347. WHERE cPLZ='" . StringHandler::htmlentities(filterXSS($cFormValue)) . "'
  348. AND cLandISO='" . StringHandler::htmlentities(filterXSS($cLandISO)) . "'", 2);
  349. }
  350. foreach ($oPlz_arr as $i => $oPlz)
  351. $oPlz_arr[$i]->cOrt = utf8_encode($oPlz->cOrt);
  352. $objResponse->script("this.plz_data = ".json_encode($oPlz_arr).";");
  353. // Hook
  354. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_KUNDENFORMULARPLZ);
  355. return $objResponse;
  356. }
  357. // Kundenformular Ajax PLZ
  358. /*
  359. Params:
  360. $cFormValue => Textfeld Wert vom Kundenfomular input Feldes
  361. $cLandISO => Ausgewähltes Land in der DropDown Box
  362. */
  363. function aenderKundenformularPLZ($cFormValue, $cLandISO)
  364. {
  365. $objResponse = new xajaxResponse();
  366. if(strlen($cFormValue) >= 4)
  367. {
  368. $oPlz = $GLOBALS['DB']->executeQuery("SELECT cOrt
  369. FROM tplz
  370. WHERE cPLZ='" . StringHandler::htmlentities(filterXSS($cFormValue)) . "'
  371. AND cLandISO='" . StringHandler::htmlentities(filterXSS($cLandISO)) . "'", 1);
  372. if(strlen($oPlz->cOrt) > 0)
  373. $objResponse->assign("kundenformular_ort", "value", $oPlz->cOrt);
  374. }
  375. // Hook
  376. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_KUNDENFORMULARPLZ);
  377. return $objResponse;
  378. }
  379. function gibRegionzuLand($cLandIso)
  380. {
  381. $objResponse = new xajaxResponse();
  382. if (strlen($cLandIso) == 2) {
  383. $cRegion_arr = Staat::getRegions($cLandIso);
  384. $cRegion_arr = utf8_convert_recursive($cRegion_arr);
  385. $objResponse->script("this.response = " . json_encode($cRegion_arr) . ";");
  386. }
  387. return $objResponse;
  388. }
  389. // Textfeld Ajax Suche
  390. /*
  391. Params:
  392. $cValue => Textfeld Wert (input) des Suchfeldes
  393. $nkeyCode => Geklickter Tastenwert
  394. $cElemSearchID => Suchfeld (input)
  395. $cElemSuggestID => DIV an dem die Suchvorschläge angegeben werden
  396. $cElemSubmitID => Form die abgeschickt werden soll
  397. */
  398. function suchVorschlag($cValue, $nkeyCode, $cElemSearchID, $cElemSuggestID, $cElemSubmitID)
  399. {
  400. $nkeyCode = intval($nkeyCode);
  401. $cValue = StringHandler::htmlentities(filterXSS($cValue));
  402. $cElemSearchID = StringHandler::htmlentities(filterXSS($cElemSearchID));
  403. $cElemSuggestID = StringHandler::htmlentities(filterXSS($cElemSuggestID));
  404. $cElemSubmitID = StringHandler::htmlentities(filterXSS($cElemSubmitID));
  405. global $Einstellungen;
  406. // Maximale Suchvorschläge
  407. $nMaxAnzahl = 10;
  408. if(intval($Einstellungen['artikeluebersicht']['suche_ajax_anzahl']) > 0)
  409. $nMaxAnzahl = intval($Einstellungen['artikeluebersicht']['suche_ajax_anzahl']);
  410. $objResponse = new xajaxResponse();
  411. $objResponse->assign($cElemSuggestID, "innerHTML", '');
  412. if(strlen($cValue) >= 3)
  413. {
  414. $oSuchanfrage_arr = $GLOBALS["DB"]->executeQuery("SELECT cSuche, nAnzahlTreffer
  415. FROM tsuchanfrage
  416. WHERE cSuche LIKE '" . $cValue . "%'
  417. AND nAktiv=1
  418. AND kSprache = " . $_SESSION['kSprache'] . "
  419. ORDER BY nAnzahlGesuche DESC, cSuche
  420. LIMIT " . $nMaxAnzahl, 2);
  421. if(is_array($oSuchanfrage_arr) && count($oSuchanfrage_arr) > 0)
  422. {
  423. $cSuche = "";
  424. foreach($oSuchanfrage_arr as $i => $oSuchanfrage)
  425. {
  426. $onClick = 'document.getElementById("' . $cElemSearchID . '").value = "' . $oSuchanfrage->cSuche . '"; document.' . $cElemSubmitID . '.submit();';
  427. $cSuchwort = str_replace($cValue, '<b>' .$cValue. '</b>', $oSuchanfrage->cSuche);
  428. $cSuche .= "<div class='suggestions' id='" . $cElemSuggestID . $i . "' onclick='" . $onClick . "'>" . $cSuchwort . " <span class='suggestion_count'>(" . $oSuchanfrage->nAnzahlTreffer . ")</span></div>";
  429. $cSuche .= "<input id='" . $cElemSuggestID . "value" . $i . "' name='" . $cElemSuggestID . "value" . $i . "' type='hidden' value='" . $oSuchanfrage->cSuche . "'>";
  430. }
  431. $objResponse->assign($cElemSuggestID, "innerHTML", $cSuche);
  432. $objResponse->script("
  433. resizeContainer('" . $cElemSearchID . "', '" . $cElemSuggestID . "');
  434. nAnzahlSuggests = " . (count($oSuchanfrage_arr)-1) . ";");
  435. }
  436. }
  437. // Hook
  438. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_SUCHVORSCHLAG, array("cValue" => &$cValue, "nkeyCode" => &$nkeyCode, "cElemSearchID" => &$cElemSearchID, "cElemSuggestID" => &$cElemSuggestID, "cElemSubmitID" => &$cElemSubmitID, "objResponse" => &$objResponse));
  439. return $objResponse;
  440. }
  441. function suggestions($cValue)
  442. {
  443. global $Einstellungen;
  444. $cSuch_arr = array();
  445. $cValue = filterXSS($cValue);
  446. // Maximale Suchvorschläge
  447. $nMaxAnzahl = 10;
  448. if (intval($Einstellungen['artikeluebersicht']['suche_ajax_anzahl']) > 0)
  449. $nMaxAnzahl = intval($Einstellungen['artikeluebersicht']['suche_ajax_anzahl']);
  450. $objResponse = new xajaxResponse();
  451. if(strlen($cValue) >= 3)
  452. {
  453. $oSuchanfrage_arr = $GLOBALS["DB"]->executeQuery("SELECT cSuche, nAnzahlTreffer
  454. FROM tsuchanfrage
  455. WHERE cSuche LIKE '" . $cValue . "%'
  456. AND nAktiv=1
  457. AND kSprache = " . $_SESSION['kSprache'] . "
  458. ORDER BY nAnzahlGesuche DESC, cSuche
  459. LIMIT " . $nMaxAnzahl, 2);
  460. if(is_array($oSuchanfrage_arr) && count($oSuchanfrage_arr) > 0)
  461. {
  462. foreach($oSuchanfrage_arr as $i => $oSuchanfrage)
  463. {
  464. $cSuche = utf8_encode($oSuchanfrage->cSuche);
  465. $i = count($cSuch_arr);
  466. $cSuch_arr[$i]['value'] = $cSuche . ' <span class="ac_resultcount">' . $oSuchanfrage->nAnzahlTreffer . ' ' . StringHandler::htmlentities( $GLOBALS['oSprache']->gibWert('matches', 'global') ) . ' </span>';
  467. $cSuch_arr[$i]['result'] = $cSuche;
  468. }
  469. }
  470. }
  471. // Hook
  472. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_SUCHVORSCHLAG, array("cValue" => &$cValue, "objResponse" => &$objResponse, "cSuch_arr" => &$cSuch_arr));
  473. $objResponse->script("this.ac_data = ".json_encode($cSuch_arr).";");
  474. return $objResponse;
  475. }
  476. function loescheStepAjax($nStep)
  477. {
  478. loescheSession($nStep);
  479. }
  480. // Main Handler
  481. function Handler($aFormValues)
  482. {
  483. global $Kunde, $step, $smarty, $hinweis, $Einstellungen;
  484. $hinweis = "";
  485. $step = 'accountwahl';
  486. $objResponse = new xajaxResponse();
  487. // Login
  488. if (intval($aFormValues["login"])==1)
  489. {
  490. globaleAssigns();
  491. loescheSession(0);
  492. $nLoginStatus = plausiAccountwahlLogin($aFormValues["userLogin"], $aFormValues["passLogin"]);
  493. if($nLoginStatus == 10)
  494. {
  495. loescheSession(1);
  496. setzeSesssionAccountwahlLogin($Kunde);
  497. if($Einstellungen['kaufabwicklung']['bestellvorgang_kaufabwicklungsmethode'] == "O" || $Einstellungen['kaufabwicklung']['bestellvorgang_kaufabwicklungsmethode'] == "A")
  498. {
  499. // Ajax EinKlick prüfen
  500. $nAjaxEinKlickStatus = pruefeAjaxEinKlick();
  501. if($nAjaxEinKlickStatus > 0 && $Einstellungen['kaufabwicklung']['bestellvorgang_kaufabwicklungsmethode'] == "O")
  502. {
  503. $objResponse->script("nEnabled = " . $nAjaxEinKlickStatus . ";");
  504. $_SESSION['ajaxcheckout']->nEnabled = $nAjaxEinKlickStatus;
  505. ladeAjaxEinKlick();
  506. setzeSmartyAccountwahl();
  507. setzeSmartyRechnungsadresse(0);
  508. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  509. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  510. $objResponse->assign("div_boxRechnungsadresse", "style.display", "block");
  511. $objResponse->assign("div_rechnungsadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_rechnungsadresse.tpl"));
  512. $objResponse->script("aendereStatus();");
  513. if($nAjaxEinKlickStatus >= 3)
  514. {
  515. setzeSmartyLieferadresse();
  516. setzeSmartyVersandart();
  517. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  518. $objResponse->assign("div_boxLieferadresse", "style.display", "block");
  519. $objResponse->assign("div_lieferadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_lieferadresse.tpl"));
  520. $objResponse->assign("div_boxVersandart", "style.display", "block");
  521. }
  522. if($nAjaxEinKlickStatus >= 4)
  523. {
  524. setzeSmartyZahlungsart();
  525. $objResponse->assign("3-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_versandart.tpl"));
  526. $objResponse->assign("div_boxVersandart", "style.display", "block");
  527. $objResponse->assign("div_versandart_box", "innerHTML", $_SESSION['Versandart']->angezeigterName[$_SESSION['cISOSprache']]);
  528. $objResponse->assign("4-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_zahlung.tpl"));
  529. }
  530. if($nAjaxEinKlickStatus == 5)
  531. {
  532. setzeSmartyBestaetigung();
  533. $objResponse->assign("5-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_bestaetigung.tpl"));
  534. $objResponse->assign("div_boxZahlungsart", "style.display", "block");
  535. $objResponse->assign("div_zahlungsart_box", "innerHTML", $_SESSION['Zahlungsart']->angezeigterName[$_SESSION['cISOSprache']]);
  536. }
  537. }
  538. else
  539. {
  540. $objResponse->script("nEnabled = 2;");
  541. $_SESSION['ajaxcheckout']->nEnabled = 2;
  542. loescheSession(2);
  543. setzeSmartyAccountwahl();
  544. setzeSmartyRechnungsadresse(0);
  545. setzeSmartyLieferadresse();
  546. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  547. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  548. $objResponse->assign("div_boxRechnungsadresse", "style.display", "block");
  549. $objResponse->assign("div_rechnungsadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_rechnungsadresse.tpl"));
  550. $objResponse->script("aendereStatus();");
  551. }
  552. }
  553. }
  554. else
  555. {
  556. setzeFehlerSmartyAccountwahl($GLOBALS['oSprache']->gibWert('incorrectLogin', 'global'));
  557. $objResponse->script("nEnabled = 0;");
  558. $_SESSION['ajaxcheckout']->nEnabled = 0;
  559. $objResponse->assign("0-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_accountwahl.tpl"));
  560. }
  561. }
  562. // Kundenkonto erstellen
  563. else if(intval($aFormValues["neueskundenkonto"]) == 1)
  564. {
  565. globaleAssigns();
  566. $step = "neueskundenkonto";
  567. $objResponse->script("nEnabled = 1;");
  568. $_SESSION['ajaxcheckout']->nEnabled = 1;
  569. loescheSession(0);
  570. setzeSmartyRechnungsadresse(1);
  571. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  572. }
  573. // Kundenkonto eintragen
  574. else if(intval($aFormValues["neukundeEintragen"]) == 1)
  575. {
  576. globaleAssigns();
  577. // NeuKunde will unregistiert bestellen ohne seinen Account zu speichern (!isset(ajaxeueskontoPassCheck))
  578. if(!$aFormValues['editRechnungsadresse'] && !$aFormValues['ajaxeueskontoPassCheck'] && $Einstellungen['kaufabwicklung']['bestellvorgang_unregistriert'] == "Y")
  579. {
  580. $cFehlendeEingaben_arr = plausiRechnungsadresse($aFormValues, 1); // Plausibilitätsprüfung
  581. if(is_array($cFehlendeEingaben_arr) && count($cFehlendeEingaben_arr) == 0)
  582. {
  583. $objResponse->script("nEnabled = 2;");
  584. $_SESSION['ajaxcheckout']->nEnabled = 2;
  585. setzeSessionRechnungsadresse($aFormValues, $cFehlendeEingaben_arr);
  586. setzeSmartyRechnungsadresse(1);
  587. setzeSmartyLieferadresse();
  588. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  589. $objResponse->assign("div_boxRechnungsadresse", "style.display", "block");
  590. $objResponse->assign("div_rechnungsadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_rechnungsadresse.tpl"));
  591. $objResponse->script("aendereStatus();");
  592. }
  593. else
  594. {
  595. $objResponse->script("nEnabled = 1;");
  596. $_SESSION['ajaxcheckout']->nEnabled = 1;
  597. loescheSession(1);
  598. setzeFehlerSmartyRechnungsadresse($cFehlendeEingaben_arr, 1, $aFormValues);
  599. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  600. }
  601. }
  602. else // Neukundenregistrierung mit Speicherung des Accounts
  603. {
  604. $aFormValues['ajaxcheckout_return'] = 1;
  605. $editRechnungsadresse = $aFormValues['editRechnungsadresse'];
  606. $cFehlendeEingaben_arr = kundeSpeichern($aFormValues); // Kundenaccount speichern
  607. if(!is_array($cFehlendeEingaben_arr) && $cFehlendeEingaben_arr) // Alles OK
  608. {
  609. $objResponse->script("nEnabled = 2;");
  610. $_SESSION['ajaxcheckout']->nEnabled = 2;
  611. setzeSessionRechnungsadresse($aFormValues, $cFehlendeEingaben_arr);
  612. setzeSmartyRechnungsadresse(0);
  613. setzeSmartyLieferadresse();
  614. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  615. $objResponse->assign("div_boxRechnungsadresse", "style.display", "block");
  616. $objResponse->assign("div_rechnungsadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_rechnungsadresse.tpl"));
  617. $objResponse->script("aendereStatus();");
  618. }
  619. else
  620. {
  621. $objResponse->script("nEnabled = 1;");
  622. $_SESSION['ajaxcheckout']->nEnabled = 1;
  623. loescheSession(1);
  624. if($editRechnungsadresse)
  625. {
  626. $smarty->assign("step", "rechnungsdaten");
  627. setzeFehlerSmartyRechnungsadresse($cFehlendeEingaben_arr, 0, $aFormValues);
  628. }
  629. else
  630. {
  631. $smarty->assign("step", "formular");
  632. setzeFehlerSmartyRechnungsadresse($cFehlendeEingaben_arr, 1, $aFormValues);
  633. }
  634. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  635. }
  636. }
  637. }
  638. // Rechnungsadresse editieren
  639. else if(intval($aFormValues['editRechnungsadresse']) == 1)
  640. {
  641. globaleAssigns();
  642. $objResponse->script("nEnabled = 1;");
  643. $_SESSION['ajaxcheckout']->nEnabled = 1;
  644. loescheSession(1);
  645. setzeSmartyRechnungsadresse(0);
  646. $objResponse->assign("1-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_registrieren.tpl"));
  647. }
  648. // Liederadresse editieren
  649. else if(intval($aFormValues['editLieferadresse']) == 1)
  650. {
  651. globaleAssigns();
  652. $objResponse->script("nEnabled = 2;");
  653. $_SESSION['ajaxcheckout']->nEnabled = 2;
  654. loescheSession(2);
  655. setzeSmartyRechnungsadresse(0);
  656. setzeSmartyLieferadresse();
  657. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  658. }
  659. // Versandart abgeschickt
  660. else if (intval($aFormValues['versandartwahl'])==1)
  661. {
  662. globaleAssigns();
  663. if(plausiVersandart($aFormValues['Versandart'], $aFormValues))
  664. {
  665. $objResponse->script("nEnabled = 4;");
  666. $_SESSION['ajaxcheckout']->nEnabled = 4;
  667. loescheSession(4);
  668. setzeSmartyVersandart();
  669. setzeSmartyZahlungsart();
  670. $objResponse->assign("4-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_zahlung.tpl"));
  671. $objResponse->assign("div_boxVersandart", "style.display", "block");
  672. $objResponse->assign("div_versandart_box", "innerHTML", $_SESSION['Versandart']->angezeigterName[$_SESSION['cISOSprache']]);
  673. }
  674. else
  675. {
  676. loescheSession(3);
  677. $objResponse->script("nEnabled = 3;");
  678. $_SESSION['ajaxcheckout']->nEnabled = 3;
  679. setzeSmartyLieferadresse();
  680. setzeSmartyVersandart();
  681. setzeFehlerSmartyVersandart();
  682. $objResponse->assign("3-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_versandart.tpl"));
  683. }
  684. }
  685. // Lieferadresse abgeschickt
  686. else if (intval($aFormValues['lieferdaten']) == 1)
  687. {
  688. globaleAssigns();
  689. $cFehlendeEingaben_arr = plausiLieferadresse($aFormValues);
  690. if(is_array($cFehlendeEingaben_arr) && count($cFehlendeEingaben_arr) == 0)
  691. {
  692. loescheSession(3);
  693. $objResponse->script("nEnabled = 3;");
  694. $_SESSION['ajaxcheckout']->nEnabled = 3;
  695. setzeSessionLieferadresse($aFormValues);
  696. setzeSmartyLieferadresse();
  697. setzeSmartyVersandart();
  698. pruefeVersandkostenfreiKuponVorgemerkt();
  699. $objResponse->assign("3-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_versandart.tpl"));
  700. $objResponse->assign("div_boxLieferadresse", "style.display", "block");
  701. $objResponse->assign("div_lieferadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_lieferadresse.tpl"));
  702. }
  703. else
  704. {
  705. $objResponse->script("nEnabled = 2;");
  706. $_SESSION['ajaxcheckout']->nEnabled = 2;
  707. loescheSession(2);
  708. setzeFehlerSmartyLieferadresse($cFehlendeEingaben_arr, $aFormValues);
  709. $objResponse->assign("2-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_lieferadresse.tpl"));
  710. $objResponse->script("aendereStatus(true);");
  711. }
  712. }
  713. // Zahlungsart abgeschickt
  714. else if(intval($aFormValues['zahlungsartwahl']) == 1)
  715. {
  716. globaleAssigns();
  717. if(intval($aFormValues['zahlungsartzusatzschritt']) == 1)
  718. {
  719. $oZahlungsart = gibZahlungsart(intval($aFormValues['Zahlungsart']));
  720. $cFehlendeEingaben_arr = plausiZahlungsartZusatz($oZahlungsart, $aFormValues);
  721. if(is_array($cFehlendeEingaben_arr) && count($cFehlendeEingaben_arr) == 0)
  722. {
  723. setzeSmartyLieferadresse();
  724. setzeSmartyVersandart();
  725. setzeSmartyZahlungsart();
  726. setzeSmartyBestaetigung();
  727. setzeSmartyZahlungsart();
  728. setzeSmartyBestaetigung();
  729. $objResponse->script("nEnabled = 5;");
  730. $_SESSION['ajaxcheckout']->nEnabled = 5;
  731. //evtl genutztes guthaben anpassen
  732. pruefeGuthabenNutzen();
  733. $objResponse->assign("5-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_bestaetigung.tpl"));
  734. $objResponse->assign("div_boxZahlungsart", "style.display", "block");
  735. $objResponse->assign("div_zahlungsart_box", "innerHTML", $_SESSION['Zahlungsart']->angezeigterName[$_SESSION['cISOSprache']]);
  736. }
  737. else
  738. {
  739. setzeSmartyZahlungsartZusatz($aFormValues, $cFehlendeEingaben_arr);
  740. $objResponse->assign("4-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_zahlung_zusatzschritt.tpl"));
  741. }
  742. }
  743. else
  744. {
  745. // Zusatzschritt?
  746. switch(plausiZahlungsart($aFormValues))
  747. {
  748. case 0:
  749. setzeSmartyZahlungsart();
  750. setzeFehlerSmartyZahlungsart();
  751. loescheSession(4);
  752. $objResponse->assign("4-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_zahlung.tpl"));
  753. break;
  754. case 1:
  755. setzeSmartyZahlungsartZusatz($aFormValues);
  756. $objResponse->assign("4-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_zahlung_zusatzschritt.tpl"));
  757. break;
  758. case 2:
  759. $_SESSION['ajaxcheckout']->nEnabled = 5;
  760. setzeSmartyLieferadresse();
  761. setzeSmartyVersandart();
  762. setzeSmartyZahlungsart();
  763. setzeSmartyBestaetigung();
  764. $objResponse->script("nEnabled = 5;");
  765. $_SESSION['ajaxcheckout']->nEnabled = 5;
  766. //evtl genutztes guthaben anpassen
  767. pruefeGuthabenNutzen();
  768. $objResponse->assign("5-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_bestaetigung.tpl"));
  769. $objResponse->assign("div_boxZahlungsart", "style.display", "block");
  770. $objResponse->assign("div_zahlungsart_box", "innerHTML", $_SESSION['Zahlungsart']->angezeigterName[$_SESSION['cISOSprache']]);
  771. break;
  772. }
  773. }
  774. }
  775. // Kupon eingegeben
  776. else if (intval($aFormValues['pruefekupon']) == 1 || intval($aFormValues['guthaben']) == 1)
  777. {
  778. globaleAssigns();
  779. if(intval($aFormValues['pruefekupon']) == 1)
  780. $smarty->assign("cKuponfehler_arr", plausiKupon($aFormValues));
  781. else if(intval($aFormValues['guthaben']) == 1)
  782. plausiGuthaben($aFormValues);
  783. //evtl genutztes guthaben anpassen
  784. pruefeGuthabenNutzen();
  785. setzeSmartyLieferadresse();
  786. setzeSmartyVersandart();
  787. setzeSmartyZahlungsart();
  788. setzeSmartyBestaetigung();
  789. $objResponse->script("nEnabled = 5;");
  790. $_SESSION['ajaxcheckout']->nEnabled = 5;
  791. $objResponse->assign("5-content", "innerHTML", $smarty->fetch("tpl_inc/ajaxcheckout_bestaetigung.tpl"));
  792. $objResponse->assign("div_boxZahlungsart", "style.display", "block");
  793. $objResponse->assign("div_zahlungsart_box", "innerHTML", $_SESSION['Zahlungsart']->angezeigterName[$_SESSION['cISOSprache']]);
  794. }
  795. $objResponse->assign("div_rechnungsadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_rechnungsadresse.tpl") . "<br><input type='submit' value='" .$GLOBALS['oSprache']->gibWert('ajaxcheckoutChangemethode', 'global') . "' class='button' onclick='nEnabled=1; toggleState(); xajax_loescheStepAjax(1);'>");
  796. $objResponse->assign("div_lieferadresse_box", "innerHTML", $smarty->fetch("tpl_inc/inc_lieferadresse.tpl") . "<br><input type='button' value='" .$GLOBALS['oSprache']->gibWert('ajaxcheckoutChangemethode', 'global') . "' class='button' onclick='nEnabled=2; toggleState(); xajax_loescheStepAjax(2);'>");
  797. $objResponse->assign("div_versandart_box", "innerHTML", $_SESSION['Versandart']->angezeigterName[$_SESSION['cISOSprache']] . "<br><input type='button' value='" .$GLOBALS['oSprache']->gibWert('ajaxcheckoutChangemethode', 'global') . "' class='button' onclick='nEnabled=3; toggleState(); xajax_loescheStepAjax(3);'>");
  798. $objResponse->assign("div_zahlungsart_box", "innerHTML", $_SESSION['Zahlungsart']->angezeigterName[$_SESSION['cISOSprache']] . "<br><input type='button' value='" .$GLOBALS['oSprache']->gibWert('ajaxcheckoutChangemethode', 'global') . "' class='button' onclick='nEnabled=4; toggleState(); xajax_loescheStepAjax(4);'>");
  799. $objResponse->script("toggleState();");
  800. return $objResponse;
  801. }
  802. function tauscheVariationKombi($aFormValues, $nVater=0, $kEigenschaft=0, $kEigenschaftWert=0, $bSpeichern = false)
  803. {
  804. require_once(PFAD_ROOT . PFAD_INCLUDES . "artikel_inc.php");
  805. global $smarty;
  806. $GLOBALS['AktuelleSeite'] = "ARTIKEL";
  807. $GLOBALS['nSeitenTyp'] = PAGE_ARTIKEL;
  808. $objResponse = new xajaxResponse();
  809. $cVariationKombiKind = "";
  810. $Einstellungen = "";
  811. $Einstellungen = getEinstellungen(array(CONF_GLOBAL,CONF_NAVIGATIONSFILTER,CONF_RSS,CONF_ARTIKELDETAILS,CONF_PREISVERLAUF,CONF_BEWERTUNG,CONF_BOXEN,CONF_PREISVERLAUF,CONF_METAANGABEN));
  812. $GLOBALS['Einstellungen'] = $Einstellungen;
  813. //hole aktuellen Vater Artikel
  814. if($aFormValues['a'] > 0)
  815. {
  816. unset($oVaterArtikel);
  817. $oVaterArtikel = new Artikel();
  818. unset($oArtikelOptionen);
  819. if($nVater)
  820. {
  821. $oArtikelOptionen->nMerkmale = 1;
  822. $oArtikelOptionen->nAttribute = 1;
  823. $oArtikelOptionen->nArtikelAttribute = 1;
  824. $oArtikelOptionen->nMedienDatei = 1;
  825. }
  826. $oArtikelOptionen->nVariationKombi = 1;
  827. $oArtikelOptionen->nVariationKombiKinder = 1;
  828. $oArtikelOptionen->nDownload = 1;
  829. $oArtikelOptionen->nKonfig = 1;
  830. $oArtikelOptionen->nMain = 1;
  831. $oArtikelOptionen->nWarenlager = 1;
  832. //if(intval($Einstellungen['artikeldetails']['artikeldetails_varikombi_anzahl']) > 0)
  833. $oArtikelOptionen->nVariationDetailPreis = 1;
  834. if($Einstellungen['artikeldetails']['artikeldetails_warenkorbmatrix_anzeige'] == "Y") // Warenkorbmatrix nötig? => Varikinder mit Preisen holen
  835. $oArtikelOptionen->nWarenkorbmatrix = 1;
  836. if($Einstellungen['artikeldetails']['artikeldetails_stueckliste_anzeigen'] == "Y") // Stückliste nötig? => Stücklistenkomponenten holen
  837. $oArtikelOptionen->nStueckliste = 1;
  838. if($Einstellungen['artikeldetails']['artikeldetails_produktbundle_nutzen'] == "Y")
  839. $oArtikelOptionen->nProductBundle = 1;
  840. $oArtikelOptionen->nFinanzierung = 1;
  841. $oVaterArtikel->fuelleArtikel(intval($aFormValues['a']), $oArtikelOptionen, intval($aFormValues['kKundengruppe']), intval($aFormValues['kSprache']));
  842. $oVaterArtikel->holeBewertungDurchschnitt(1);
  843. $bKindVorhanden = false;
  844. if(!$nVater)
  845. {
  846. if(is_array($oVaterArtikel->Variationen) && count($oVaterArtikel->Variationen) > 0)
  847. {
  848. $nGueltig = 1;
  849. $kVariationKombi_arr = array();
  850. foreach($oVaterArtikel->Variationen as $oVariation)
  851. {
  852. if($oVariation->cTyp != "FREIFELD" && $oVariation->cTyp != "PFLICHT-FREIFELD")
  853. {
  854. if(intval($aFormValues['eigenschaftwert_' . $oVariation->kEigenschaft]) > 0)
  855. $kVariationKombi_arr[$oVariation->kEigenschaft] = intval($aFormValues['eigenschaftwert_' . $oVariation->kEigenschaft]);
  856. }
  857. }
  858. if ($bSpeichern)
  859. $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr = $kVariationKombi_arr;
  860. $oArtikelTMP = gibArtikelByVariationen($oVaterArtikel->kArtikel, $kVariationKombi_arr);
  861. if($oArtikelTMP->kArtikel > 0)
  862. {
  863. require_once(PFAD_INCLUDES."artikel_inc.php");
  864. require_once(PFAD_ROOT.PFAD_CLASSES_CORE."class.core.NiceMail.php");
  865. $AktuelleSeite = "ARTIKEL";
  866. $bKindVorhanden = true;
  867. // Bewertungsguthaben
  868. $fBelohnung = 0.0;
  869. if($GLOBALS['Einstellungen']['bewertung']['bewertung_guthaben_nutzen'] == "Y")
  870. {
  871. if($GLOBALS['Einstellungen']['bewertung']['bewertung_stufe2_anzahlzeichen'] <= $_GET['strl'])
  872. $fBelohnung = $GLOBALS['Einstellungen']['bewertung']['bewertung_stufe2_guthaben'];
  873. else
  874. $fBelohnung = $GLOBALS['Einstellungen']['bewertung']['bewertung_stufe1_guthaben'];
  875. }
  876. // Hinweise und Fehler sammeln
  877. $cHinweis = mappingFehlerCode(verifyGPDataString('cHinweis'), $fBelohnung);
  878. $cFehler = mappingFehlerCode(verifyGPDataString('cFehler'));
  879. unset($oArtikel);
  880. unset($oArtikelOptionen);
  881. $oArtikel = new Artikel();
  882. $oArtikelOptionen->nMerkmale = 1;
  883. $oArtikelOptionen->nAttribute = 1;
  884. $oArtikelOptionen->nArtikelAttribute = 1;
  885. $oArtikelOptionen->nMedienDatei = 1;
  886. $oArtikelOptionen->nVariationKombi = 1;
  887. $oArtikelOptionen->nKeinLagerbestandBeachten = 1;
  888. $oArtikelOptionen->nKonfig = 1;
  889. $oArtikelOptionen->nDownload = 1;
  890. $oArtikelOptionen->nFinanzierung = 1;
  891. $oArtikelOptionen->nMain = 1;
  892. $oArtikelOptionen->nWarenlager = 1;
  893. if($Einstellungen['artikeldetails']['artikeldetails_produktbundle_nutzen'] == "Y")
  894. $oArtikelOptionen->nProductBundle = 1;
  895. $oArtikel->fuelleArtikel($oArtikelTMP->kArtikel, $oArtikelOptionen, $aFormValues['kKundengruppe'], $aFormValues['kSprache']);
  896. $oArtikel->kArtikelVariKombi = $oArtikel->kArtikel;
  897. // Hole EigenschaftWerte zur gewählten VariationKombi
  898. $oVariationKombiKind_arr = $GLOBALS['DB']->executeQuery("SELECT teigenschaftkombiwert.kEigenschaftWert, teigenschaftkombiwert.kEigenschaft
  899. FROM teigenschaftkombiwert
  900. JOIN tartikel ON tartikel.kEigenschaftKombi = teigenschaftkombiwert.kEigenschaftKombi
  901. AND tartikel.kVaterArtikel = " . $oVaterArtikel->kArtikel . "
  902. AND tartikel.kArtikel = " . $oArtikel->kArtikelVariKombi . "
  903. LEFT JOIN tartikelsichtbarkeit ON tartikel.kArtikel = tartikelsichtbarkeit.kArtikel
  904. AND tartikelsichtbarkeit.kKundengruppe=" . $_SESSION['Kundengruppe']->kKundengruppe . "
  905. WHERE tartikelsichtbarkeit.kArtikel IS NULL
  906. ORDER BY tartikel.kArtikel", 2);
  907. $kVariationKombiKind_arr = array();
  908. if(is_array($oVariationKombiKind_arr) && count($oVariationKombiKind_arr) > 0)
  909. {
  910. foreach($oVariationKombiKind_arr as $f => $oVariationKombiKind)
  911. {
  912. if($f > 0)
  913. $cVariationKombiKind .= ";" . $oVariationKombiKind->kEigenschaft . "_" . $oVariationKombiKind->kEigenschaftWert;
  914. else
  915. $cVariationKombiKind .= $oVariationKombiKind->kEigenschaft . "_" . $oVariationKombiKind->kEigenschaftWert;
  916. }
  917. }
  918. $oArtikel->kArtikel = $oVaterArtikel->kArtikel;
  919. $oArtikel->cVaterVKLocalized = $oVaterArtikel->Preise->cVKLocalized;
  920. $oArtikel->nIstVater = $oVaterArtikel->nIstVater;
  921. //$oArtikel->Variationen = $oVaterArtikel->Variationen;
  922. $oArtikel->fDurchschnittsBewertung = $oVaterArtikel->fDurchschnittsBewertung;
  923. $oArtikel->Bewertungen = $oVaterArtikel->Bewertungen;
  924. $oArtikel->HilfreichsteBewertung = $oVaterArtikel->HilfreichsteBewertung;
  925. $oArtikel->oVariationKombiVorschau_arr = $oVaterArtikel->oVariationKombiVorschau_arr;
  926. $oArtikel->oVariationDetailPreis_arr = $oVaterArtikel->oVariationDetailPreis_arr;
  927. $oArtikel->nVariationKombiNichtMoeglich_arr = $oVaterArtikel->nVariationKombiNichtMoeglich_arr;
  928. $oArtikel->oVariationKombiVorschauText = $oVaterArtikel->oVariationKombiVorschauText;
  929. $oArtikel->cVaterURL = $oVaterArtikel->cURL;
  930. $oArtikel->VaterFunktionsAttribute = $oVaterArtikel->FunktionsAttribute;
  931. // Kind mit uebergeben
  932. $oArtikel->kVariKindArtikel = $oArtikel->kArtikelVariKombi;
  933. $xPost_arr = $_POST;
  934. baueArtikelDetail($oArtikel, $xPost_arr);
  935. if (isset($aFormValues['kEditKonfig']))
  936. $smarty->assign('kEditKonfig', $aFormValues['kEditKonfig']);
  937. $cArtikelTemplate = 'artikel_inc.tpl';
  938. if (isset($oArtikel->FunktionsAttribute[FKT_ATTRIBUT_ARTIKELDETAILS_TPL]))
  939. $cArtikelTemplate = $oArtikel->FunktionsAttribute[FKT_ATTRIBUT_ARTIKELDETAILS_TPL];
  940. $objResponse->assign("contentmid", "innerHTML", $smarty->fetch("tpl_inc/" . $cArtikelTemplate));
  941. $objResponse->assign("popUps", "innerHTML", $smarty->fetch("tpl_inc/artikel_popups.tpl"));
  942. if(isset($_SESSION['oVarkombiAuswahl']) && getTemplateVersion() > 311)
  943. {
  944. $objResponse->script("setzeEigenschaftWerte('" . $cVariationKombiKind . "');");
  945. }
  946. // Hole alle Eigenschaften des Artikels
  947. $oEigenschaft_arr = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaft WHERE kArtikel='{$oVaterArtikel->kArtikel}' AND (cTyp = 'RADIO' OR cTyp = 'SELECTBOX') ORDER BY nSort ASC, cName ASC", 2);
  948. // Durchlaufe alle Eigenschaften
  949. $oEigenschaftWert_arr = array();
  950. foreach ($oEigenschaft_arr as $i => $oEigenschaft)
  951. $oEigenschaftWert_arr[$i] = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaftwert WHERE kEigenschaft='{$oEigenschaft->kEigenschaft}'", 2);
  952. // Baue mögliche Kindartikel
  953. $oKombiFilter_arr = gibMoeglicheVariationen($oVaterArtikel->kArtikel, $oEigenschaftWert_arr, $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr);
  954. if(is_array($oKombiFilter_arr) && count($oKombiFilter_arr) > 0)
  955. {
  956. $objResponse->script("schliesseAlleEigenschaftFelder();");
  957. foreach ($oKombiFilter_arr as $oKombiFilter)
  958. $objResponse->script("aVC(" . $oKombiFilter->kEigenschaftWert . ");");
  959. }
  960. $objResponse->script('setBindingsArtikel();');
  961. if ($oArtikel->bHasKonfig && count($oArtikel->oKonfig_arr) > 0)
  962. {
  963. $cArtikelJSTemplate = 'artikel_konfigurator_js.tpl';
  964. if (isset($oArtikel->FunktionsAttribute[FKT_ATTRIBUT_ARTIKELKONFIG_TPL_JS]))
  965. $cArtikelJSTemplate = $oArtikel->FunktionsAttribute[FKT_ATTRIBUT_ARTIKELKONFIG_TPL_JS];
  966. $cKonfigJS = $smarty->fetch("tpl_inc/" . $cArtikelJSTemplate);
  967. // remove script header
  968. $cKonfigJS = str_replace('<script type="text/javascript">', '', $cKonfigJS);
  969. $cKonfigJS = str_replace('</script>', '', $cKonfigJS);
  970. $objResponse->script($cKonfigJS);
  971. }
  972. foreach($oVariationKombiKind_arr as $f => $oVariationKombiKind)
  973. {
  974. $kNichtGesetzteEigenschaft = $oVariationKombiKind->kEigenschaft;
  975. // hole eigenschaftswerte
  976. $kBereitsGesetzt = array();
  977. $oEigenschaftWert_arr = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaftwert WHERE kEigenschaft='{$kNichtGesetzteEigenschaft}'", 2);
  978. foreach ($oEigenschaftWert_arr as $oEigenschaftWert)
  979. {
  980. $kMoeglicheEigenschaftWert_arr = $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr;
  981. $kMoeglicheEigenschaftWert_arr[$kNichtGesetzteEigenschaft] = $oEigenschaftWert->kEigenschaftWert;
  982. $oTMPArtikel = gibArtikelByVariationen($oVaterArtikel->kArtikel, $kMoeglicheEigenschaftWert_arr);
  983. if ($oTMPArtikel && $oTMPArtikel->kArtikel > 0)
  984. {
  985. if (in_array($oTMPArtikel->kArtikel, $kBereitsGesetzt))
  986. continue;
  987. $kBereitsGesetzt[] = $oTMPArtikel->kArtikel;
  988. $oTestArtikel = new Artikel();
  989. $oArtikelOptionen->nMerkmale = 0;
  990. $oArtikelOptionen->nAttribute = 0;
  991. $oArtikelOptionen->nArtikelAttribute = 0;
  992. $oArtikelOptionen->nMedienDatei = 0;
  993. $oArtikelOptionen->nVariationKombi = 0;
  994. $oArtikelOptionen->nKeinLagerbestandBeachten = 1;
  995. $oArtikelOptionen->nKonfig = 0;
  996. $oArtikelOptionen->nDownload = 0;
  997. $oArtikelOptionen->nFinanzierung = 0;
  998. $oArtikelOptionen->nMain = 0;
  999. $oArtikelOptionen->nWarenlager = 0;
  1000. $oTestArtikel->fuelleArtikel($oTMPArtikel->kArtikel, $oArtikelOptionen, gibAktuelleKundengruppe(), $_SESSION['kSprache']);
  1001. if ($oTestArtikel->cLagerBeachten == 'Y' && $oTestArtikel->cLagerKleinerNull != 'Y' && $oTestArtikel->fLagerbestand == 0)
  1002. $objResponse->script("setzeVarInfo({$oEigenschaftWert->kEigenschaftWert}, '{$oTestArtikel->Lageranzeige->AmpelText}', '{$oTestArtikel->Lageranzeige->nStatus}');");
  1003. }
  1004. }
  1005. }
  1006. }
  1007. }
  1008. }
  1009. if(!$bKindVorhanden)
  1010. {
  1011. $xPost_arr = $_POST;
  1012. baueArtikelDetail($oVaterArtikel, $xPost_arr);
  1013. $objResponse->assign("contentmid", "innerHTML", $smarty->fetch("tpl_inc/artikel_inc.tpl"));
  1014. $objResponse->script('setBindingsArtikel();');
  1015. $cVariationKombiKind = "{$kEigenschaft}_{$kEigenschaftWert}";
  1016. $objResponse->script("setzeEigenschaftWerte('" . $cVariationKombiKind . "');");
  1017. // Kein Kind vorhanden, gesetzte Werte zurücksetzen
  1018. $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr = array($kEigenschaft => $kEigenschaftWert);
  1019. $kArtikel = intval($aFormValues['a']);
  1020. //$objResponse->script("xajax_checkVarkombiDependencies({$kArtikel}, '', {$kEigenschaft}, {$kEigenschaftWert});");
  1021. checkVarkombiDependencies($kArtikel, '', $kEigenschaft, $kEigenschaftWert, array('objResponse' => $objResponse));
  1022. // Nachricht an den Benutzer
  1023. $cMessage = $GLOBALS['oSprache']->gibWert('selectionNotAvailable', 'productDetails');
  1024. $objResponse->script("setBuyfieldMessage('{$cMessage}');");
  1025. }
  1026. }
  1027. // Hook
  1028. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_TAUSCHEVARIATIONKOMBI, array("objResponse" => &$objResponse));
  1029. return $objResponse;
  1030. }
  1031. function baueArtikelDetail($oArtikel, $xPost_arr)
  1032. {
  1033. global $kKategorie, $Einstellungen, $AktuelleKategorie, $smarty;
  1034. //setze seitentyp
  1035. setzeSeitenTyp(PAGE_ARTIKEL);
  1036. // Letzten angesehenden Artikel hinzufügen
  1037. if($Einstellungen['boxen']['box_zuletztangesehen_anzeigen'] == "Y")
  1038. fuegeArtikelZuletzteAngesehenEin($oArtikel->kArtikel, $Einstellungen['boxen']['box_zuletztangesehen_anzahl']);
  1039. //$oArtikel->fGewicht = Trennzeichen::getUnit(JTLSEPARATER_WEIGHT, $_SESSION['kSprache'], $oArtikel->fGewicht);
  1040. //$oArtikel->fArtikelgewicht = Trennzeichen::getUnit(JTLSEPARATER_WEIGHT, $_SESSION['kSprache'], $oArtikel->fArtikelgewicht);
  1041. //Besuch setzen
  1042. //setzeBesuch("kArtikel",$oArtikel->kArtikel);
  1043. $oArtikel->berechneSieSparenX($Einstellungen['artikeldetails']['sie_sparen_x_anzeigen']);
  1044. $Artikelhinweise = array();
  1045. baueArtikelhinweise();
  1046. if (intval($xPost_arr['fragezumprodukt'])==1)
  1047. bearbeiteFrageZumProdukt($oArtikel);
  1048. elseif (intval($xPost_arr['benachrichtigung_verfuegbarkeit'])==1)
  1049. bearbeiteBenachrichtigung($oArtikel);
  1050. elseif (intval($xPost_arr['artikelweiterempfehlen'])==1 && $_SESSION['Kunde']->kKunde > 0)
  1051. bearbeiteArtikelWeiterempfehlen($oArtikel);
  1052. /*
  1053. elseif (intval($xPost_arr['kommentarformular'])==1)
  1054. bearbeiteKommentarFormular($oArtikel,$_SESSION['Kunde']->kKunde);
  1055. */
  1056. //url
  1057. $requestURL = baueURL($oArtikel,URLART_ARTIKEL);
  1058. $sprachURL = baueSprachURLS($oArtikel,URLART_ARTIKEL);
  1059. //hole aktuelle Kategorie, falls eine gesetzt
  1060. $kKategorie = $oArtikel->gibKategorie();
  1061. $AktuelleKategorie = new Kategorie($kKategorie);
  1062. $AufgeklappteKategorien = new KategorieListe();
  1063. $AufgeklappteKategorien->getOpenCategories($AktuelleKategorie);
  1064. $startKat = new Kategorie();
  1065. $startKat->kKategorie=0;
  1066. $arAlleEinstellungen = array_merge($Einstellungen, $GLOBALS["GlobaleEinstellungen"]);
  1067. // Bewertungen holen
  1068. $bewertung_seite = intval(verifyGPCDataInteger('btgseite'));
  1069. $bewertung_sterne = intval(verifyGPCDataInteger('btgsterne'));
  1070. $nAnzahlBewertungen = 0;
  1071. // Hat Artikel einen Preisverlauf?
  1072. $smarty->assign('bPreisverlauf', true);
  1073. if ($Einstellungen['preisverlauf']['preisverlauf_anzeigen'] == "Y")
  1074. {
  1075. require_once(PFAD_CLASSES."class.JTL-Shop.Preisverlauf.php");
  1076. $kArtikel = $oArtikel->kVariKindArtikel > 0 ? $oArtikel->kVariKindArtikel : $oArtikel->kArtikel;
  1077. $oPreisverlauf = new Preisverlauf();
  1078. $oPreisverlauf = $oPreisverlauf->gibPreisverlauf($kArtikel, $oArtikel->Preise->kKundengruppe, intval($Einstellungen['preisverlauf']['preisverlauf_anzahl_monate']));
  1079. if (count($oPreisverlauf) < 2)
  1080. $smarty->assign('bPreisverlauf', false);
  1081. }
  1082. // Sortierung der Bewertungen
  1083. $nSortierung = verifyGPCDataInteger('sortierreihenfolge');
  1084. // Dient zum aufklappen des Tabmenüs
  1085. $bewertung_anzeigen = intval(verifyGPCDataInteger('bewertung_anzeigen'));
  1086. if($bewertung_seite || $bewertung_sterne || $bewertung_anzeigen)
  1087. $BewertungsTabAnzeigen = 1;
  1088. if($bewertung_seite == 0)
  1089. $bewertung_seite = 1;
  1090. // Bewertungen holen
  1091. $oArtikel->holeBewertung($_SESSION['kSprache'], $Einstellungen['bewertung']['bewertung_anzahlseite'], $bewertung_seite, $bewertung_sterne, $Einstellungen['bewertung']['bewertung_freischalten'], $nSortierung);
  1092. $oArtikel->holehilfreichsteBewertung($_SESSION['kSprache']);
  1093. $oArtikel->Bewertungen->Sortierung = $nSortierung;
  1094. if($bewertung_sterne == 0)
  1095. //$nAnzahlBewertungen = $oArtikel->Bewertungen->oBewertungGesamt->nAnzahl;
  1096. $nAnzahlBewertungen = $oArtikel->Bewertungen->nAnzahlSprache;
  1097. else
  1098. $nAnzahlBewertungen = $oArtikel->Bewertungen->nSterne_arr[5-$bewertung_sterne];
  1099. // Baue Blätter Navigation
  1100. $oBlaetterNavi = baueBewertungNavi($bewertung_seite, $bewertung_sterne, $nAnzahlBewertungen, $Einstellungen['bewertung']['bewertung_anzahlseite']);
  1101. // Baue Gewichte für Smarty
  1102. $oTrennzeichen = Trennzeichen::getUnit(JTLSEPARATER_WEIGHT, $_SESSION['kSprache']);
  1103. baueGewicht(array($oArtikel), $oTrennzeichen->getDezimalstellen(), $oTrennzeichen->getDezimalstellen());
  1104. //baueGewicht(array($oArtikel), $Einstellungen['artikeldetails']['artikeldetails_artikelgewicht_stellenanzahl'], $Einstellungen['artikeldetails']['artikeldetails_gewicht_stellenanzahl']);
  1105. //spezifische assigns
  1106. $smarty->assign('Navigation', createNavigation("ARTIKEL", $AufgeklappteKategorien, $oArtikel));
  1107. $smarty->assign('Ueberschrift',$oArtikel->cName);
  1108. $smarty->assign('UeberschriftKlein',$oArtikel->cKurzBeschreibung);
  1109. $smarty->assign('UVPlocalized',gibPreisStringLocalized($oArtikel->fUVP));
  1110. $smarty->assign('Einstellungen',$arAlleEinstellungen);
  1111. $smarty->assign('Artikel', $oArtikel);
  1112. //$smarty->assign('1Artikel',$oArtikel);
  1113. $smarty->assign('Xselling',gibArtikelXSelling($oArtikel->kVariKindArtikel));
  1114. $smarty->assign('requestURL',$requestURL);
  1115. $smarty->assign('sprachURL',$sprachURL);
  1116. $smarty->assign('Artikelhinweise',$Artikelhinweise);
  1117. $smarty->assign('verfuegbarkeitsBenachrichtigung',gibVerfuegbarkeitsformularAnzeigen($oArtikel,$Einstellungen['artikeldetails']['benachrichtigung_nutzen']));
  1118. $smarty->assign('code_fragezumprodukt',generiereCaptchaCode($Einstellungen['artikeldetails']['produktfrage_abfragen_captcha']));
  1119. $smarty->assign('code_kommentarformular',generiereCaptchaCode($Einstellungen['global']['kommentarformular_abfragen_captcha']));
  1120. $smarty->assign('code_benachrichtigung_verfuegbarkeit',generiereCaptchaCode($Einstellungen['artikeldetails']['benachrichtigung_abfragen_captcha']));
  1121. $smarty->assign('ProdukttagHinweis',bearbeiteProdukttags($oArtikel));
  1122. $smarty->assign('ProduktTagging',holeProduktTagging($oArtikel));
  1123. $smarty->assign('BlaetterNavi', $oBlaetterNavi);
  1124. $smarty->assign('BewertungsTabAnzeigen', $BewertungsTabAnzeigen);
  1125. $smarty->assign('hinweis', $cHinweis);
  1126. $smarty->assign('fehler', $cFehler);
  1127. $smarty->assign('nRedirectRecommend', R_LOGIN_ARTIKELWEITEREMPFEHLEN);
  1128. $smarty->assign('PFAD_IMAGESLIDER', URL_SHOP . "/" . PFAD_IMAGESLIDER);
  1129. $smarty->assign('PFAD_MEDIAFILES', URL_SHOP . "/" . PFAD_MEDIAFILES);
  1130. $smarty->assign('PFAD_FLASHPLAYER', URL_SHOP . "/" . PFAD_FLASHPLAYER);
  1131. $smarty->assign('PFAD_BILDER', URL_SHOP . "/" . PFAD_BILDER);
  1132. $smarty->assign('KONFIG_ITEM_TYP_ARTIKEL', KONFIG_ITEM_TYP_ARTIKEL);
  1133. $smarty->assign('KONFIG_ITEM_TYP_SPEZIAL', KONFIG_ITEM_TYP_SPEZIAL);
  1134. $smarty->assign('KONFIG_ANZEIGE_TYP_CHECKBOX', KONFIG_ANZEIGE_TYP_CHECKBOX);
  1135. $smarty->assign('KONFIG_ANZEIGE_TYP_RADIO', KONFIG_ANZEIGE_TYP_RADIO);
  1136. $smarty->assign('KONFIG_ANZEIGE_TYP_DROPDOWN', KONFIG_ANZEIGE_TYP_DROPDOWN);
  1137. $smarty->assign('KONFIG_ANZEIGE_TYP_DROPDOWN_MULTI', KONFIG_ANZEIGE_TYP_DROPDOWN_MULTI);
  1138. $smarty->assign('FKT_ATTRIBUT_ARTIKELDETAILS_TPL', FKT_ATTRIBUT_ARTIKELDETAILS_TPL);
  1139. $smarty->assign('FKT_ATTRIBUT_ARTIKELKONFIG_TPL', FKT_ATTRIBUT_ARTIKELKONFIG_TPL);
  1140. $smarty->assign('FKT_ATTRIBUT_ARTIKELKONFIG_TPL_JS', FKT_ATTRIBUT_ARTIKELKONFIG_TPL_JS);
  1141. /*
  1142. $arNichtErlaubteEigenschaftswerte = array();
  1143. if ($oArtikel->Variationen)
  1144. {
  1145. foreach ($oArtikel->Variationen as $Variation)
  1146. {
  1147. if ($Variation->Werte && $Variation->cTyp!="FREIFELD")
  1148. {
  1149. foreach ($Variation->Werte as $Wert)
  1150. {
  1151. $arNichtErlaubteEigenschaftswerte[$Wert->kEigenschaftWert] = gibNichtErlaubteEigenschaftswerte($Wert->kEigenschaftWert);
  1152. }
  1153. }
  1154. }
  1155. $smarty->assign('arNichtErlaubteEigenschaftswerte',$arNichtErlaubteEigenschaftswerte);
  1156. }
  1157. */
  1158. //navi blättern
  1159. if ($Einstellungen['artikeldetails']['artikeldetails_navi_blaettern']=="Y")
  1160. {
  1161. $smarty->assign('NavigationBlaettern',gibNaviBlaettern($oArtikel->kArtikel, $AktuelleKategorie->kKategorie));
  1162. }
  1163. require_once(PFAD_INCLUDES."letzterInclude.php");
  1164. //Meta
  1165. $smarty->assign('meta_title',gibMetaTitle($oArtikel));
  1166. $smarty->assign('meta_description',gibMetaDescription($oArtikel, $AufgeklappteKategorien));
  1167. $smarty->assign('meta_keywords',gibMetaKeywords($oArtikel));
  1168. // Hook
  1169. executeHook(HOOK_TOOLSAJAXSERVER_PAGE_ARTIKELDETAIL);
  1170. }
  1171. function setSelectionWizardAnswerAjax($kMerkmalWert, $kAuswahlAssistentFrage, $nFrage, $kKategorie)
  1172. {
  1173. global $smarty;
  1174. require_once(PFAD_ROOT . PFAD_INCLUDES_EXT . "auswahlassistent_ext_inc.php");
  1175. $Einstellungen = getEinstellungen(array(CONF_GLOBAL,CONF_RSS,CONF_NAVIGATIONSFILTER,CONF_ARTIKELUEBERSICHT,CONF_AUSWAHLASSISTENT));
  1176. $objResponse = new xajaxResponse();
  1177. $bMerkmalFilterVorhanden = false;
  1178. $bFragenEnde = false;
  1179. $oSuchergebnisse;
  1180. $NaviFilter;
  1181. processSelectionWizard($kMerkmalWert, $nFrage, $kKategorie, $bFragenEnde, $oSuchergebnisse, $NaviFilter, $bMerkmalFilterVorhanden);
  1182. if(!$bFragenEnde && $bMerkmalFilterVorhanden && $oSuchergebnisse->GesamtanzahlArtikel > 1)
  1183. {
  1184. // TPL Changes
  1185. $smarty->assign('Einstellungen', $Einstellungen);
  1186. $smarty->assign('NaviFilter', $NaviFilter);
  1187. $smarty->assign('oAuswahlAssistent', $_SESSION['AuswahlAssistent']->oAuswahlAssistent);
  1188. $objResponse->assign("selection_wizard", "innerHTML", $smarty->fetch("tpl_inc/auswahlassistent_inc.tpl"));
  1189. $objResponse->script("aaDeleteSelectBTN();");
  1190. foreach($_SESSION['AuswahlAssistent']->oAuswahl_arr as $i => $oAuswahl)
  1191. {
  1192. $cAusgabe = $oAuswahl->cWert;
  1193. if($_SESSION['AuswahlAssistent']->nFrage > $i)
  1194. $cAusgabe .= " <div class='edit' title='" . $GLOBALS['oSprache']->gibWert('edit', 'global') . "' onClick='return resetSelectionWizardAnswer(" . $i . ", " . $kKategorie . ");'></div>";
  1195. if($i != $_SESSION['AuswahlAssistent']->nFrage)
  1196. $objResponse->assign("answer_" . $_SESSION['AuswahlAssistent']->oAuswahlAssistent->oAuswahlAssistentFrage_arr[$i]->kAuswahlAssistentFrage, "innerHTML", $cAusgabe);
  1197. }
  1198. }
  1199. // Abbruch
  1200. elseif(!$bFragenEnde || $oSuchergebnisse->GesamtanzahlArtikel == 1 || !$bMerkmalFilterVorhanden)
  1201. {
  1202. if(!$kKategorie)
  1203. unset($_POST["mf1"]);
  1204. $cParameter_arr['MerkmalFilter_arr'] = setzeMerkmalFilter();
  1205. $NaviFilter = baueNaviFilter($NaviFilter, $cParameter_arr);
  1206. //header("Location: " . gibNaviURL($NaviFilter, false, NULL));
  1207. $objResponse->script("window.location.href='" . StringHandler::htmlentitydecode(gibNaviURL($NaviFilter, $GLOBALS['bSeo'], NULL)) . "';");
  1208. unset($_SESSION['AuswahlAssistent']);
  1209. }
  1210. return $objResponse;
  1211. }
  1212. function resetSelectionWizardAnswerAjax($nFrage, $kKategorie)
  1213. {
  1214. global $smarty;
  1215. require_once(PFAD_ROOT . PFAD_INCLUDES_EXT . "auswahlassistent_ext_inc.php");
  1216. $Einstellungen = getEinstellungen(array(CONF_GLOBAL,CONF_RSS,CONF_NAVIGATIONSFILTER,CONF_ARTIKELUEBERSICHT,CONF_AUSWAHLASSISTENT));
  1217. $objResponse = new xajaxResponse();
  1218. $_SESSION['AuswahlAssistent']->nFrage = $nFrage;
  1219. $_SESSION['AuswahlAssistent']->oAuswahlAssistent = AuswahlAssistent::getGroupsByLocation($_SESSION['AuswahlAssistent']->oAuswahlAssistentOrt->cKey, $_SESSION['AuswahlAssistent']->oAuswahlAssistentOrt->kKey, $_SESSION['kSprache']);
  1220. // Bereits ausgewaehlte Antworten loeschen
  1221. foreach($_SESSION['AuswahlAssistent']->oAuswahl_arr as $i => $oAuswahl)
  1222. {
  1223. if($i >= $nFrage)
  1224. {
  1225. unset($_SESSION['AuswahlAssistent']->oAuswahl_arr[$i]);
  1226. unset($_SESSION['AuswahlAssistent']->kMerkmalGesetzt_arr[$i]);
  1227. }
  1228. }
  1229. // Filter
  1230. $NaviFilter;
  1231. $FilterSQL;
  1232. $oSuchergebnisse;
  1233. $nArtikelProSeite;
  1234. $nLimitN;
  1235. baueFilterSelectionWizard($kKategorie, $NaviFilter, $FilterSQL, $oSuchergebnisse, $nArtikelProSeite, $nLimitN);
  1236. filterSelectionWizard($oSuchergebnisse->MerkmalFilter, $bMerkmalFilterVorhanden);
  1237. // TPL Changes
  1238. $smarty->assign('Einstellungen', $Einstellungen);
  1239. $smarty->assign('NaviFilter', $NaviFilter);
  1240. $smarty->assign('oAuswahlAssistent', $_SESSION['AuswahlAssistent']->oAuswahlAssistent);
  1241. $objResponse->assign("selection_wizard", "innerHTML", $smarty->fetch("tpl_inc/auswahlassistent_inc.tpl"));
  1242. $objResponse->script("aaDeleteSelectBTN();");
  1243. foreach($_SESSION['AuswahlAssistent']->oAuswahl_arr as $i => $oAuswahl)
  1244. {
  1245. if($i < $_SESSION['AuswahlAssistent']->nFrage)
  1246. $objResponse->assign("answer_" . $_SESSION['AuswahlAssistent']->oAuswahlAssistent->oAuswahlAssistentFrage_arr[$i]->kAuswahlAssistentFrage, "innerHTML", $oAuswahl->cWert . " <div class='edit' onClick='return resetSelectionWizardAnswer(" . $i . ", " . $kKategorie . ");'></div>");
  1247. }
  1248. return $objResponse;
  1249. }
  1250. function getValidVarkombis($kVaterArtikel, $kGesetzteEigeschaftWert_arr)
  1251. {
  1252. $oKombiFilter_arr = $GLOBALS['DB']->executeQuery("SELECT distinct(teigenschaftkombiwert.kEigenschaftWert) as kEigenschaftWert
  1253. FROM
  1254. (
  1255. SELECT teigenschaftkombiwert.kEigenschaftKombi
  1256. FROM tartikel
  1257. JOIN teigenschaftkombiwert on teigenschaftkombiwert.kEigenschaftKombi = tartikel.kEigenschaftKombi
  1258. WHERE tartikel.kVaterartikel = " . $kVaterArtikel . "
  1259. AND teigenschaftkombiwert.kEigenschaftWert IN (" . implode(",", $kGesetzteEigeschaftWert_arr) . ")
  1260. GROUP BY teigenschaftkombiwert.kEigenschaftKombi
  1261. HAVING count(*) = " . count($kGesetzteEigeschaftWert_arr) . "
  1262. ) as sub
  1263. JOIN teigenschaftkombiwert ON teigenschaftkombiwert.kEigenschaftKombi = sub.kEigenschaftKombi", 2);
  1264. return $oKombiFilter_arr;
  1265. }
  1266. function checkVarkombiDependencies($kVaterArtikel, $cVaterURL, $kEigenschaft = 0, $kEigenschaftWert = 0, $oParam_arr = array())
  1267. {
  1268. $objResponse;
  1269. if(isset($oParam_arr['objResponse']))
  1270. $objResponse = $oParam_arr['objResponse'];
  1271. else
  1272. $objResponse = new xajaxResponse();
  1273. $kVaterArtikel = intval($kVaterArtikel);
  1274. $kEigenschaft = intval($kEigenschaft);
  1275. $kEigenschaftWert = intval($kEigenschaftWert);
  1276. $objResponse->script("loescheVarInfo();");
  1277. $objResponse->script("hideBuyfieldMessage();");
  1278. if($kVaterArtikel > 0)
  1279. {
  1280. // Grad geklickter Eigenschaftswert in die Session aufnehmen
  1281. if($kEigenschaft > 0 && $kEigenschaftWert > 0)
  1282. $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr[$kEigenschaft] = $kEigenschaftWert;
  1283. // Hole alle Eigenschaften des Artikels
  1284. $oEigenschaft_arr = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaft WHERE kArtikel='{$kVaterArtikel}' AND (cTyp = 'RADIO' OR cTyp = 'SELECTBOX') ORDER BY nSort ASC, cName ASC", 2);
  1285. // Durchlaufe alle Eigenschaften
  1286. $oEigenschaftWert_arr = array();
  1287. foreach ($oEigenschaft_arr as $i => $oEigenschaft)
  1288. $oEigenschaftWert_arr[$i] = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaftwert WHERE kEigenschaft='{$oEigenschaft->kEigenschaft}'", 2);
  1289. // Baue mögliche Kindartikel
  1290. $oKombiFilter_arr = gibMoeglicheVariationen($kVaterArtikel, $oEigenschaftWert_arr, $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr);
  1291. if(is_array($oKombiFilter_arr) && count($oKombiFilter_arr) > 0)
  1292. {
  1293. $objResponse->script("schliesseAlleEigenschaftFelder();");
  1294. foreach ($oKombiFilter_arr as $oKombiFilter)
  1295. $objResponse->script("aVC(" . $oKombiFilter->kEigenschaftWert . ");");
  1296. }
  1297. // Wenn nur noch eine Variation fehlt
  1298. if ($_SESSION['oVarkombiAuswahl']->nVariationOhneFreifeldAnzahl == count($_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr) + 1)
  1299. {
  1300. $oArtikel = new Artikel();
  1301. $oArtikelOptionen->nMerkmale = 0;
  1302. $oArtikelOptionen->nAttribute = 0;
  1303. $oArtikelOptionen->nArtikelAttribute = 0;
  1304. $oArtikelOptionen->nMedienDatei = 0;
  1305. $oArtikelOptionen->nVariationKombi = 1;
  1306. $oArtikelOptionen->nKeinLagerbestandBeachten = 1;
  1307. $oArtikelOptionen->nKonfig = 0;
  1308. $oArtikelOptionen->nDownload = 0;
  1309. $oArtikelOptionen->nFinanzierung = 0;
  1310. $oArtikelOptionen->nMain = 1;
  1311. $oArtikelOptionen->nWarenlager = 1;
  1312. $oArtikel->fuelleArtikel($kVaterArtikel, $oArtikelOptionen, gibAktuelleKundengruppe(), $_SESSION['kSprache']);
  1313. $kGesetzeEigenschaft_arr = array_keys($_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr);
  1314. $kNichtGesetzteEigenschaft_arr = array_values(array_diff($oArtikel->kEigenschaftKombi_arr, $kGesetzeEigenschaft_arr));
  1315. $kNichtGesetzteEigenschaft = (int) $kNichtGesetzteEigenschaft_arr[0];
  1316. // hole eigenschaftswerte
  1317. $oEigenschaftWert_arr = $GLOBALS['DB']->executeQuery("SELECT * FROM teigenschaftwert WHERE kEigenschaft='{$kNichtGesetzteEigenschaft}'", 2);
  1318. foreach ($oEigenschaftWert_arr as $oEigenschaftWert)
  1319. {
  1320. $kMoeglicheEigenschaftWert_arr = $_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr;
  1321. $kMoeglicheEigenschaftWert_arr[$kNichtGesetzteEigenschaft] = $oEigenschaftWert->kEigenschaftWert;
  1322. $oTMPArtikel = gibArtikelByVariationen($kVaterArtikel, $kMoeglicheEigenschaftWert_arr);
  1323. if ($oTMPArtikel && $oTMPArtikel->kArtikel > 0)
  1324. {
  1325. $oTestArtikel = new Artikel();
  1326. $oArtikelOptionen->nMerkmale = 0;
  1327. $oArtikelOptionen->nAttribute = 0;
  1328. $oArtikelOptionen->nArtikelAttribute = 0;
  1329. $oArtikelOptionen->nMedienDatei = 0;
  1330. $oArtikelOptionen->nVariationKombi = 0;
  1331. $oArtikelOptionen->nKeinLagerbestandBeachten = 1;
  1332. $oArtikelOptionen->nKonfig = 0;
  1333. $oArtikelOptionen->nDownload = 0;
  1334. $oArtikelOptionen->nFinanzierung = 0;
  1335. $oArtikelOptionen->nMain = 0;
  1336. $oArtikelOptionen->nWarenlager = 0;
  1337. $oTestArtikel->fuelleArtikel($oTMPArtikel->kArtikel, $oArtikelOptionen, gibAktuelleKundengruppe(), $_SESSION['kSprache']);
  1338. if ($oTestArtikel->cLagerBeachten == 'Y' && $oTestArtikel->cLagerKleinerNull != 'Y' && $oTestArtikel->fLagerbestand == 0)
  1339. $objResponse->script("setzeVarInfo({$oEigenschaftWert->kEigenschaftWert}, '{$oTestArtikel->Lageranzeige->AmpelText}', '{$oTestArtikel->Lageranzeige->nStatus}');");
  1340. }
  1341. }
  1342. }
  1343. // Alle Variationen ausgewaehlt? => Ajax Call und Kind laden
  1344. if($_SESSION['oVarkombiAuswahl']->nVariationOhneFreifeldAnzahl == count($_SESSION['oVarkombiAuswahl']->kGesetzteEigeschaftWert_arr) && count($oParam_arr) == 0)
  1345. $objResponse->script("doSwitchVarkombi('{$kEigenschaft}', '{$kEigenschaftWert}');");
  1346. }
  1347. if(count($oParam_arr) == 0)
  1348. return $objResponse;
  1349. }
  1350. function gibMoeglicheVariationen($kVaterArtikel, $oEigenschaftWert_arr, $kGesetzteEigeschaftWert_arr)
  1351. {
  1352. $oMoeglicheEigenschaften_arr = array();
  1353. foreach($oEigenschaftWert_arr as $group)
  1354. {
  1355. $i = 2;
  1356. $cSQL = array();
  1357. foreach($kGesetzteEigeschaftWert_arr as $kEigenschaft => $kEigenschaftWert)
  1358. {
  1359. if ($group[0]->kEigenschaft != $kEigenschaft)
  1360. {
  1361. $cSQL[] = "INNER JOIN teigenschaftkombiwert e{$i} ON e1.kEigenschaftKombi = e{$i}.kEigenschaftKombi AND e{$i}.kEigenschaftWert ={$kEigenschaftWert}";
  1362. $i++;
  1363. }
  1364. }
  1365. $cSQLStr = implode(' ', $cSQL);
  1366. $oEigenschaft_arr = $GLOBALS['DB']->executeQuery("
  1367. SELECT e1.* FROM teigenschaftkombiwert e1
  1368. {$cSQLStr}
  1369. WHERE e1.kEigenschaft ={$group[0]->kEigenschaft}
  1370. GROUP BY e1.kEigenschaft, e1.kEigenschaftWert", 2);
  1371. $oMoeglicheEigenschaften_arr = array_merge($oMoeglicheEigenschaften_arr, $oEigenschaft_arr);
  1372. }
  1373. return $oMoeglicheEigenschaften_arr;
  1374. }
  1375. function gibArtikelByVariationen($kArtikel, $kVariationKombi_arr)
  1376. {
  1377. if(is_array($kVariationKombi_arr) && count($kVariationKombi_arr) > 0)
  1378. {
  1379. $j = 0;
  1380. foreach($kVariationKombi_arr as $i => $kVariationKombi)
  1381. {
  1382. if($j > 0)
  1383. {
  1384. $cSQL1 .= "," . $i;
  1385. $cSQL2 .= "," . $kVariationKombi;
  1386. }
  1387. else
  1388. {
  1389. $cSQL1 .= $i;
  1390. $cSQL2 .= $kVariationKombi;
  1391. }
  1392. $j++;
  1393. }
  1394. }
  1395. $oArtikelTMP = $GLOBALS['DB']->executeQuery("SELECT tartikel.kArtikel
  1396. FROM teigenschaftkombiwert
  1397. JOIN tartikel ON tartikel.kEigenschaftKombi = teigenschaftkombiwert.kEigenschaftKombi
  1398. LEFT JOIN tartikelsichtbarkeit ON tartikel.kArtikel = tartikelsichtbarkeit.kArtikel
  1399. AND tartikelsichtbarkeit.kKundengruppe=" . $_SESSION['Kundengruppe']->kKundengruppe . "
  1400. WHERE teigenschaftkombiwert.kEigenschaft IN (" . $cSQL1 . ")
  1401. AND teigenschaftkombiwert.kEigenschaftWert IN (" . $cSQL2 .")
  1402. AND tartikelsichtbarkeit.kArtikel IS NULL
  1403. AND tartikel.kVaterArtikel = " . $kArtikel . "
  1404. GROUP BY tartikel.kArtikel
  1405. HAVING count(*) = " . count($kVariationKombi_arr), 1);
  1406. return $oArtikelTMP;
  1407. }
  1408. $xajax->processRequest();
  1409. header("Content-Type:text/html;charset:".JTL_CHARSET.";");
  1410. ?>