From 3029796ae7cd07bc90def20be964352d3c5871d7 Mon Sep 17 00:00:00 2001 From: hecht Date: Sun, 10 Sep 2017 14:39:10 +0000 Subject: [PATCH] implemented the frontend stuff for the new auction type --- ag/auktion.php | 142 ++++++++++++++++++++++++--- ag/include/auktion_functions.inc.php | 82 +++++++++++++--- 2 files changed, 199 insertions(+), 25 deletions(-) diff --git a/ag/auktion.php b/ag/auktion.php index 9099788..c1c30e2 100644 --- a/ag/auktion.php +++ b/ag/auktion.php @@ -43,21 +43,32 @@ $dir = $_GET['dir']; $kategorie = $_GET['kategorie']; -function stelleBietenMaskeDar($userid,$auktionsid,$gebot){ +function stelleBietenMaskeDar($userid, $auktionsid, $gebot, $anzahl){ + $auktionsdaten = getEntryInformation($auktionsid); + if ( $auktionsdaten['type'] == 1 ) { + stelleBietenMaskeDarNormal($userid, $auktionsdaten, $gebot); + } else if ($auktionsdaten['type'] == 2) { + stelleBietenMaskeDarInverse($userid, $auktionsdaten, $gebot, $anzahl); + } else { + displayErrorMessage(NULL, 'Auktionstype nicht unterstüzt!!',displayHistoryBackLink()); + } +} + +function stelleBietenMaskeDarNormal($userid,$auktionsdaten,$gebot) { + if ($auktionsdaten === NULL) { + displayErrorMessage(NULL, 'Auktion ist nicht mehr verfügbar!!',displayHistoryBackLink()); + return; + } + if($gebot != NULL && $gebot != ''){ - $errorMsg = biete($userid,$auktionsid,$gebot); + $errorMsg = biete($userid,$auktionsdaten['auktionsid'],$gebot); if($errorMsg == ''){ echo 'Es wurde erfolgreich für das Item geboten!

'; } else{ echo 'Es ist beim Bieten ein Fehler aufgetreten: '.$errorMsg.'!

'; } } - $auktionsdaten = getEntryInformation($auktionsid); - if ($auktionsdaten === NULL) { - displayErrorMessage(NULL, 'Auktion ist nicht mehr verfügbar!!',displayHistoryBackLink()); - return; - } -?> + ?>
@@ -110,9 +121,103 @@ function stelleBietenMaskeDar($userid,$auktionsid,$gebot){

'; + } else{ + echo 'Es ist beim Bieten ein Fehler aufgetreten: '.$errorMsg.'!

'; + } + } + + $listing = array(); + $qry = db_query('select range_from, range_to from inverse_auktion_gebote WHERE bieter = '.$userid.' and auktionsid = '.$auktionsdaten['auktionsid'].' order by range_from asc'); + while ($row = mysqli_fetch_assoc($qry)) { + if ($row['range_from'] == $row['range_to']) { + $listing[] = displayMoney($row['range_from']); + } else { + $listing[] = displayMoney($row['range_from']).'-'.displayMoney($row['range_to']); + } + } + ?> + + +
+ + + '> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item Auktion
Name
Eigenes Gebot
Startgebot
Gebot + + - + +
Gebühr + +
 
INFO: Das kleinste einmalig abgegebene Gebot bekommt den Zuschlag. Für jedes abgegebene Gebot muss eine Gebühr bezahlt werden. Wird der Zuschlag erhalten wird auch noch der Kaufpreis fällig!
+
+ if($id_db_mix != '' && !is_null($id_db_mix)){ @@ -239,14 +344,24 @@ function stelleAuktionsuebersichtDar($userid,$kategorie,$itemnamepart,$entries,$ else{ echo preg_replace(array('/###ORDER###/','/###LABEL###/'), array('order=itemname&dir=ASC','Item'),$orderstring); } +?> + + + @@ -261,9 +376,9 @@ function stelleAuktionsuebersichtDar($userid,$kategorie,$itemnamepart,$entries,$ @@ -293,6 +408,7 @@ function stelleAuktionsuebersichtDar($userid,$kategorie,$itemnamepart,$entries,$ while($aktionentries[$index] != NULL){ echo "\t\t\t\t".''."\n"; echo "\t\t\t\t\t".''.displayItemLink($aktionentries[$index]['tablename'], $aktionentries[$index]['itemid'], $aktionentries[$index]['itemname']).''."\n"; + echo "\t\t\t\t\t".''.($aktionentries[$index]['tablename']==1?'Normal':'Inverse').''."\n"; if($aktionentries[$index]['aktuellesgebot'] != NULL){ echo "\t\t\t\t\t".''.displayMoney($aktionentries[$index]['aktuellesgebot']).''."\n"; } else{ @@ -396,7 +512,7 @@ function zieheAuktionZurueck($userid,$auktionsid,$pay){ if(isset($user_ida['id'])){ // Abfrage der uebergebenen Aktionen if($action == 1){ // Bieten für eine Auktion - stelleBietenMaskeDar($user_ida['id'],$auktionsid, $gebot); + stelleBietenMaskeDar($user_ida['id'],$auktionsid, $gebot, $anzahl); } else if($action == 2){ // Erstellen einer Auktion stelleAuktionErstellenMaskeDar($user_ida['id'],$items,$anzahl,$start); } elseif($action == 3){ // Zurueckziehen einer Auktion diff --git a/ag/include/auktion_functions.inc.php b/ag/include/auktion_functions.inc.php index e3cb965..d19d6fb 100644 --- a/ag/include/auktion_functions.inc.php +++ b/ag/include/auktion_functions.inc.php @@ -22,8 +22,9 @@ include_once(ROOT_PATH.'/include/config.inc.php'); include_once(ROOT_PATH.'/include/messagefunctions.inc.php'); include_once(ROOT_PATH.'/include/semaphore.inc.php'); include_once(ROOT_PATH.'/include/fehlerausgabe.inc.php'); +include_once(ROOT_PATH.'/include/defines.inc.php'); - +defineIfNotDefined('AUCTION_FEE_FACTOR', 0.05); // Funktion um das aktuelle Mindestgebot einer Auktion zu ermitteln! // Returns Mindestgebot @@ -63,7 +64,7 @@ function getUserAvailableMoney($userid) { // Funktion zum bieten für eine Auktion // Returns '' wenn alles ok, ansonsten eine Fehlerausgabe // @Return String -function biete($userid, $auktionsid, $gebot){ +function biete($userid, $auktionsid, $gebot, $anzahl = 0){ // Keine Kommagebote!! Immer Abrunden!! if(!is_numeric($gebot) || floor($gebot) <= 0){ return 'Gebot ungültig!'; @@ -71,23 +72,35 @@ function biete($userid, $auktionsid, $gebot){ $gebot = floor($gebot); $auktionsdaten = getEntryInformation($auktionsid); - $itemname = $auktionsdaten['itemname']; - $aktuellesgebot = $auktionsdaten['aktuellesgebot']; - $startgebot = $auktionsdaten['startgebot']; - $deadline = $auktionsdaten['deadline']; - $zeitdifferenz = $auktionsdaten['zeitdifferenz']; - $bieter = $auktionsdaten['bieter']; - $anbieter = $auktionsdaten['anbieter']; - if($userid == $anbieter){ return 'Sie können nicht auf eigene Items bieten'; } + $zeitdifferenz = $auktionsdaten['zeitdifferenz']; // Nun erstmal pruefen ob noch geboten werden kann if($zeitdifferenz < 0){ return 'Deadline abgelaufen!'; } + $type = $auktionsdaten['type']; + if ($type == 1) { + return biete_normal($userid, $auktionsdaten, $gebot); + } else if ($type == 2) { + return biete_inverse($userid, $auktionsdaten, $gebot, $anzahl); + } + return 'Nicht unterstützer Aktionstyp!'; +} + +function biete_normal($userid, $auktionsdaten, $gebot) { + $auktionsid = $auktionsdaten['auktionsid']; + $itemname = $auktionsdaten['itemname']; + $aktuellesgebot = $auktionsdaten['aktuellesgebot']; + $startgebot = $auktionsdaten['startgebot']; + $deadline = $auktionsdaten['deadline']; + $zeitdifferenz = $auktionsdaten['zeitdifferenz']; + $bieter = $auktionsdaten['bieter']; + $anbieter = $auktionsdaten['anbieter']; + // Was ist das aktuelle startgebot?? Rufe die Funktion auf! $klGebot = aktuellesMindestgebot($auktionsid); @@ -128,6 +141,51 @@ function biete($userid, $auktionsid, $gebot){ // db_query($new_query); // echo '

'.$new_query.'

'; return ''; // Leerer String, also kein Fehler! + +} + +function biete_inverse($userid, $auktionsdaten, $gebot, $gebot2) { + $auktionsid = $auktionsdaten['auktionsid']; + $itemname = $auktionsdaten['itemname']; + $aktuellesgebot = $auktionsdaten['aktuellesgebot']; + $startgebot = $auktionsdaten['startgebot']; + $deadline = $auktionsdaten['deadline']; + $zeitdifferenz = $auktionsdaten['zeitdifferenz']; + $bieter = $auktionsdaten['bieter']; + $anbieter = $auktionsdaten['anbieter']; + + if(!is_numeric($gebot2) || floor($gebot2) < $gebot){ + return 'Gebot ungültig!'; + } + + if($gebot < $startgebot){ + return 'Es muss mindestens '.$startgebot.' geboten werden'; + } + + $fee = ($gebot2 - $gebot + 1) * $startgebot * AUCTION_FEE_FACTOR; + + //Nun muss noch geprueft werden ob der User genug Geld hat und auch mit allen Geboten gesamt nicht in den Minusbereich kommt + $user_a = mysqli_fetch_assoc(db_query('SELECT nickname, geld FROM user WHERE id = '.$userid)); + $usermoney = $user_a['geld']; + $auktionensumme = mysqli_fetch_assoc(db_query('SELECT SUM(aktuellesgebot) as summe FROM auktion WHERE bieter = '.$userid.' AND auktionsid != '.$auktionsid.' GROUP BY bieter')); + $auktionensumme = $auktionensumme['summe']; + + $required_money = $auktionensumme + $gebot + $fee; + + if($usermoney < $required_money){ + return 'Nicht genug Geld!'; + } + + + + db_query('UPDATE user SET geld = geld - '.$fee.' WHERE geld >= '.$required_money); + + if (db_affected_rows() == 0) { + return 'Fehler beim Abbuchen der Gebühr!'; + } + $sql = 'INSERT INTO inverse_auktion_gebote(auktionsid, bieter, range_from, range_to) values('.$auktionsid.','.$userid.','.$gebot.','.$gebot2.')'; + db_query($sql); + return ''; // Leerer String, also kein Fehler! } // Funktion erstellt die Optionen die Auswahl @@ -297,7 +355,7 @@ function getAuktionEntries($kategorie,$itemnamepart,$entriesPerSite,$pageNumber, $stringDelimiter = ' AND itemname LIKE \'%'.$itemnamepart.'%\' '; } $index = 0; - $test = 'SELECT a.auktionsid, u.nickname AS anbietername, u2.nickname AS bietername, a.deadline, a.aktuellesgebot, a.startgebot, a.anzahl, a.itemname, a.bieter, a.anbieter, a.itemid, a.tablename FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE 1 '.$kategorieDelimitier.$stringDelimiter.$priceDelimiter.' AND TIMESTAMPDIFF(Minute,now(),deadline) >= 0 ORDER BY '.$order.' '.$dir.' '.$interval; + $test = 'SELECT u.nickname AS anbietername, u2.nickname AS bietername, a.* FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE 1 '.$kategorieDelimitier.$stringDelimiter.$priceDelimiter.' AND TIMESTAMPDIFF(Minute,now(),deadline) >= 0 ORDER BY '.$order.' '.$dir.' '.$interval; $qry = db_query($test); //echo '
'.$test.'
'; while($result = mysqli_fetch_assoc($qry)){ @@ -308,7 +366,7 @@ function getAuktionEntries($kategorie,$itemnamepart,$entriesPerSite,$pageNumber, function getEntryInformation($auktionsid){ if(!is_numeric($auktionsid)){return;} - $qry = db_query('SELECT u.nickname AS anbietername, u2.nickname AS bietername, a.auktionsid,a.anbieter,a.bieter,a.itemid,a.itemname,a.tablename,a.anzahl,a.startgebot,a.aktuellesgebot,a.deadline,a.startdate,a.cheatingverdacht, TIMESTAMPDIFF(Minute,now(),deadline) AS zeitdifferenz FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE auktionsid = '.$auktionsid); + $qry = db_query('SELECT u.nickname AS anbietername, u2.nickname AS bietername, a.*, TIMESTAMPDIFF(Minute,now(),deadline) AS zeitdifferenz FROM auktion AS a INNER JOIN user as u ON a.anbieter = u.id LEFT JOIN user as u2 ON a.bieter = u2.id WHERE auktionsid = '.$auktionsid); if(mysqli_num_rows($qry) == 0){ return NULL; } return mysqli_fetch_assoc($qry); }