function dwz($dwz, $sid, $Liga) { //////////////////////////// // Joomla Modifizierungen // //////////////////////////// global $mainframe; // Check for request forgeries JRequest::checkToken() or die('Invalid Token'); $db =& JFactory::getDBO(); $cid = JRequest::getVar('cid', array(), '', 'array'); $option = JRequest::getCmd('option'); $section = JRequest::getVar('section'); JArrayHelper::toInteger($cid); $sql = ' SELECT `id` as `liga_id`, `sieg`, `remis`, `nieder`, `antritt`' . ' FROM #__clm_liga' . ' WHERE `sid` = "' . $sid . '"'; if ($Liga != 0) { $sql .= ' AND `id` = "' . $Liga . '"'; } $db->setQuery($sql); $ligapunkte_liste = $db->loadObjectList(); $Turnier = $sid; $Saison = $sid; // Log schreiben $clmLog = new CLMLog(); $clmLog->aktion = JText::_('RUNDE_LOG_DWZ'); $clmLog->nr_aktion = 101; //klkl $clmLog->params = array('sid' => $Saison, 'lid' => $Liga, 'cids' => $cids); $clmLog->write(); ////////////////////////// // Ende Modifizierungen // ////////////////////////// // Direkt geht es leider nicht. Wenn Du eine Idee hast, wie ich das aktuelle Jahr ermitteln kann, bitte $Jahr = getdate(); $Jahr = $Jahr['year']; //////////////////////////// ///////////// Konstanten /// //////////////////////////// $db =& JFactory::getDBO(); $prefix = $db->getPrefix(); $Tabelle_Einzelergebnisse = $prefix . 'clm_rnd_spl'; $Spalten_Einzelergebnisse = array('Saison' => 'sid', 'Turnier' => 'sid', 'Liga' => 'lid', 'SZPS' => 'zps', 'SMgl' => 'spieler', 'GZPS' => 'gzps', 'GMgl' => 'gegner', 'Erg' => 'punkte', 'KL' => 'kampflos', 'Egb' => 'ergebnis'); $Tabelle_SpielerDWZ = $prefix . 'clm_dwz_spieler'; $Spalten_DWZListe = array('ZPS' => 'ZPS', 'Mgl' => 'Mgl_Nr', 'Jahr' => 'Geburtsjahr', 'R0' => 'DWZ', 'I0' => 'DWZ_Index', 'Saison' => 'sid', 'Turnier' => 'sid'); $Tabelle_Meldeliste = $prefix . 'clm_meldeliste_spieler'; $Spalten_Meldeliste = array('ZPS' => 'zps', 'Mgl' => 'mgl_nr', 'Saison' => 'sid', 'Turnier' => 'sid', 'Liga' => 'lid'); ///////////////////////////////////////////////////////////////////////////////////////////////////////// foreach ($_GET as $var => $value) { ${$var} = $value; } unset($var); /** Die Variablen in Konstanten und login lasse ich mir nicht �berschreiben: **/ /********************************************************************* Sicherheit: Mit der Festsetzung auf Zahlen ist es schwieriger (vielleicht unm�glich) hier unerw�nschte Parameter zu �bergeben. Mit der Funktion mysql_real_escape_string() wird aus dem Argument _eine_ Zeichenkette im Sinne der SQL-Parameter. Damit kann man nur aus einer Tabelle Daten abfragen, und diese Abfrage nicht illegal erweitern: Stichwort: SQL Injection *********************************************************************/ if (!is_numeric($Liga)) { settype($Liga, 'integer'); } if (!is_numeric($Turnier)) { settype($Turnier, 'integer'); } $Spalten_Einzelergebnisse['Turnier'] = mysql_real_escape_string($Spalten_Einzelergebnisse['Turnier']); /********************************************************************* Alle Abfragen sind ausbauf�hig gestaltet, falls sich die Spalten noch �ndern sollten. Der "Ausbau" ist in Konsten.php zu machen. *********************************************************************/ $query = 'SELECT ' . $Spalten_Einzelergebnisse['SZPS'] . ',' . $Spalten_Einzelergebnisse['SMgl'] . ',' . $Spalten_Einzelergebnisse['GZPS'] . ',' . $Spalten_Einzelergebnisse['GMgl'] . ',' . $Spalten_Einzelergebnisse['Erg'] . ',' . $Spalten_Einzelergebnisse['KL'] . ',' . $Spalten_Einzelergebnisse['Egb'] . ',' . $Spalten_Einzelergebnisse['Liga'] . ' FROM ' . mysql_real_escape_string($Tabelle_Einzelergebnisse) . ' WHERE ' . $Spalten_Einzelergebnisse['Turnier'] . '=' . $Turnier; if ($Liga > 0) { $query = $query . ' AND ' . $Spalten_Einzelergebnisse['Liga'] . '=' . $Liga; } /* JError::raiseWarning( 500, JText::_( ' ! ' ) ); $link = 'index.php?option='.$option.'§ion='.$section; $mainframe->redirect($link,$query); */ $result = CLMControllerRunden::Abfrage($query); if (!$result) { //exit('keine DWZ-Berechnung, da keine Ergebnisse'); echo '<br><b>keine DWZ-Berechnung, da keine Ergebnisse</b>'; } else { /********************************************************************* Die folgenden 4 if-Bl�cke stellen sicher, da� der jeweilige Variablen-Typ korrekt ist. Falls mehr als eine Korrektur erforderlich w�re, ist eine permutierte Abfrage schneller, aber im Code un�bersichlich, da man 15 Abfragen machen m�sste. Dies ist nur eingebaut, da sich die Seite noch im Aubau befindet. Wenn die Tabellen ihre entg�ltigen Typendefinitionen haben, kann man die If-Abfrage entfernen. Ob das auch f�r die settype-Anweisung und die Schleife gilt, h�ngt von dem Variablentyp ab. *********************************************************************/ if (!is_string($result[0][$Spalten_Einzelergebnisse['SZPS']])) { foreach ($result as &$row) { settype($row[$Spalten_Einzelergebnisse['SZPS']], 'string'); } } if (!is_integer($result[0][$Spalten_Einzelergebnisse['SMgl']])) { foreach ($result as &$row) { settype($row[$Spalten_Einzelergebnisse['SMgl']], 'integer'); } } if (!is_string($result[0][$Spalten_Einzelergebnisse['GZPS']])) { foreach ($result as &$row) { settype($row[$Spalten_Einzelergebnisse['GZPS']], 'string'); } } if (!is_integer($result[0][$Spalten_Einzelergebnisse['GMgl']])) { foreach ($result as &$row) { settype($row[$Spalten_Einzelergebnisse['GMgl']], 'integer'); } } /********************************************************************* Ich habe mich entschieden, in den Schritten lieber eine neue Tabelle aufzubauen, denn die alte zu modifizieren. Daher l�sche ich danach auch das alte Array *********************************************************************/ $Ergebnisse = array(); for ($i = 0; $i < sizeof($result); $i++) { $Partie = $result[$i][$Spalten_Einzelergebnisse['Erg']]; $Egb = $result[$i][$Spalten_Einzelergebnisse['Egb']]; $KL = $result[$i][$Spalten_Einzelergebnisse['KL']]; $liga_id = $result[$i][$Spalten_Einzelergebnisse['Liga']]; /* if (($Partie==1.0) and ($KL==0)) $Partie='1'; ElseIf (($Partie==0.0) and ($KL==0)) $Partie='0'; ElseIf (($Partie==0.5) and ($KL==0)) $Partie='5'; ElseIf (($Partie==1.0) and ($KL==1)) $Partie='+'; ElseIf (($Partie==0.0) and ($KL==1)) $Partie='-'; ElseIf (($Partie==0.5) and ($KL==1)) $Partie='*'; Else $Partie='?'; */ // Anpassung an flexible Punkteverteilung: // richtige Liga finden foreach ($ligapunkte_liste as $lpunkte) { if ($lpunkte->liga_id == $liga_id) { $ligapunkte = $lpunkte; break; } } // Fallback, falls die SQL-Abfrage oben nicht funktioniert if (!isset($ligapunkte)) { $ligapunkte = new stdObj(); $ligapunkte->sieg = 1; $ligapunkte->remis = 0.5; $ligapunkte->nieder = 0; $ligapunkte->antritt = 0; } // Punkte zur DWZ-Auswertung in Standardwertung ueberfuehren if ($Partie == $ligapunkte->sieg + $ligapunkte->antritt && $KL == 0) { $Partie = '1'; } elseif ($Partie == $ligapunkte->sieg + $ligapunkte->antritt && $KL == 1) { $Partie = '+'; } elseif ($Partie == $ligapunkte->remis + $ligapunkte->antritt && $KL == 0) { $Partie = '5'; } elseif ($Partie == $ligapunkte->remis + $ligapunkte->antritt && $KL == 1) { $Partie = '*'; } elseif ($Partie == $ligapunkte->nieder + $ligapunkte->antritt && $KL == 0) { $Partie = '0'; } elseif ($Partie == $ligapunkte->nieder && $KL == 1) { $Partie = '-'; } else { $Partie = '?'; } if ($result[$i][$Spalten_Einzelergebnisse['SZPS']] > "10000" and $result[$i][$Spalten_Einzelergebnisse['SZPS']] < "ZZZZZ" and $result[$i][$Spalten_Einzelergebnisse['SZPS']] != "NULL") { $Ergebnisse[$i][] = array($result[$i][$Spalten_Einzelergebnisse['SZPS']], $result[$i][$Spalten_Einzelergebnisse['SMgl']], $result[$i][$Spalten_Einzelergebnisse['GZPS']], $result[$i][$Spalten_Einzelergebnisse['GMgl']], $Partie); } } unset($Partie, $KL); unset($ligapunkte); sort($Ergebnisse); //arraydump($Ergebnisse); $i = 0; $TempArrAuswertung = array(); $TempArrAuswertung[0][0] = array($Ergebnisse[0][0][0], $Ergebnisse[0][0][1]); foreach ($Ergebnisse as &$EinePartie) { if ($TempArrAuswertung[$i][0] != array($EinePartie[0][0], $EinePartie[0][1])) { $i++; $TempArrAuswertung[$i][0] = array($EinePartie[0][0], $EinePartie[0][1]); } $TempArrAuswertung[$i][] = array($EinePartie[0][2], $EinePartie[0][3], $EinePartie[0][4]); } unset($Ergebnisse, $EinePartie); /** Diese For-Schleife k�nnte man auch mit der folgenden foreach-Schleife kombinieren Man h�tte ein wenig Geschwindigkeitsgewinn. ***/ unset($result1); $result1 = array(); $key1 = ''; $key2 = ''; $key99 = ''; for ($i = 0; $i < sizeof($TempArrAuswertung); $i++) { for ($j = sizeof($TempArrAuswertung[$i]) - 1; 0 <= $j; $j--) { $key1 = $TempArrAuswertung[$i][$j][0]; //!=$result[$k]['ZPS']) $key2 = $TempArrAuswertung[$i][$j][1]; //!=$result[$k]['Mgl_Nr']))) if (strlen($key2) == 1) { $key2 = "00" . $key2; } if (strlen($key2) == 2) { $key2 = "0" . $key2; } $key99 = $key1 . $key2; if (!isset($result1[$key99])) { $query = 'SELECT ' . $Spalten_DWZListe['ZPS'] . ',' . $Spalten_DWZListe['Mgl'] . ',' . $Spalten_DWZListe['Jahr'] . ',' . $Spalten_DWZListe['R0'] . ',' . $Spalten_DWZListe['I0'] . ' ' . 'FROM ' . mysql_real_escape_string($Tabelle_SpielerDWZ) . ' ' . 'WHERE ' . $Spalten_DWZListe['Saison'] . '=' . $Saison . ' ' . 'AND ' . $Spalten_DWZListe['ZPS'] . '=' . "'" . $key1 . "'" . ' ' . 'AND ' . $Spalten_DWZListe['Mgl'] . '=' . $key2; $db =& JFactory::getDBO(); $db->setQuery($query); $result = $db->loadObjectList(); if (!$result) { // nichts } else { $result1[$key99] = $result; } } else { //nichts } if (isset($result1[$key99])) { //$TempArrAuswertung[$i][$j]['DWZ']=array($result1[$key1.$key2]['DWZ'],$result1[$key1.$key2]['DWZ_Index'],$result1[$key1.$key2]['Geburtsjahr']); $TempArrAuswertung[$i][$j]['DWZ'] = array($result1[$key99][0]->DWZ, $result1[$key99][0]->DWZ_Index, $result1[$key99][0]->Geburtsjahr); } else { $TempArrAuswertung[$i][$j]['DWZ'] = array(0, 0, 0); } } } unset($j, $k, $result1); $ArrUebergabeDWZ = array(); foreach ($TempArrAuswertung as $EinSpieler) { $alter = $Jahr - $EinSpieler[0]['DWZ'][2]; if ($alter < 0) { $alter = 0; } elseif ($alter < 21) { $alter = 1; } elseif ($alter < 26) { $alter = 2; } else { $alter = 3; } $Gegner = array(); for ($i = 1; $i < sizeof($EinSpieler); $i++) { $Gegner[] = array($EinSpieler[$i]['DWZ'][0], $EinSpieler[$i][2]); } $ArrUebergabeDWZ[] = array(array('zps' => $EinSpieler[0][0], 'mgl_nr' => $EinSpieler[0][1]), CLMControllerRunden::DWZRechner($EinSpieler[0]['DWZ'][0], $EinSpieler[0]['DWZ'][1], $alter, $Gegner)); } unset($alter, $Gegner, $i, $Jahr, $TempArrAuswertung); foreach ($ArrUebergabeDWZ as $EinSpieler) { if ($dwz == 0) { $query = 'UPDATE ' . $Tabelle_Meldeliste . ' ' . 'SET DWZ=' . (int) $EinSpieler[1][0] . ', ' . 'I0=' . $EinSpieler[1][1] . ', ' . 'Punkte=' . round($EinSpieler[1][2] / 1000, 1) . ', ' . 'Partien=' . $EinSpieler[1][3] . ', ' . 'We=' . round($EinSpieler[1][4] / 1000, 3) . ', ' . 'Leistung=' . $EinSpieler[1][5] . ', ' . 'EFaktor=' . $EinSpieler[1][6] . ', ' . 'Niveau=' . $EinSpieler[1][7] . ' ' . 'WHERE ' . $Spalten_Meldeliste['Turnier'] . '=' . $Turnier . ' ' . 'AND ' . $Spalten_Meldeliste['ZPS'] . '=' . "'" . $EinSpieler[0]['zps'] . "'" . ' ' . 'AND ' . $Spalten_Meldeliste['Mgl'] . '=' . $EinSpieler[0]['mgl_nr'] . ' ' . 'AND ' . $Spalten_Meldeliste['Saison'] . '=' . $Saison; // Die Spalten, die ich angelegt habe, bzw Du anlegst, nehme ich als konstant an. if ($Liga > 0) { $query = $query . ' AND ' . $Spalten_Einzelergebnisse['Liga'] . '=' . $Liga; } if ($EinSpieler[1][0] == 'Restp.' or $EinSpieler[1][0] > 0) { $result = mysql_query($query); if (!$result) { $query = "INSERT INTO {$Tabelle_Meldeliste} " . 'SET ' . $Spalten_Meldeliste['ZPS'] . '=' . "'" . $EinSpieler[0]['zps'] . "'" . ', ' . $Spalten_Meldeliste['Mgl'] . '=' . $EinSpieler[0]['mgl_nr'] . ' ON DUPLICATE KEY UPDATE ' . $Spalten_Meldeliste['Turnier'] . '=' . $Turnier . ', ' . $Spalten_Meldeliste['Saison'] . '=' . $Saison . 'DWZ=' . (int) $EinSpieler[1][0] . ', ' . 'I0=' . $EinSpieler[1][1] . ', ' . 'Punkte=' . $EinSpieler[1][2] . ', ' . 'Partien=' . $EinSpieler[1][3] . ', ' . 'We=' . $EinSpieler[1][4] . ', ' . 'Leistung=' . $EinSpieler[1][5] . ', ' . 'EFaktor=' . $EinSpieler[1][6] . ', ' . 'Niveau=' . $EinSpieler[1][7]; $result = mysql_query($query); if ($result) { if (Entwanzen) { echo 'Insert von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' erfolgreich!<br>'; } else { trigger_error($EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' wurde vom SQL goes DWZ-Script in die Meldeliste eingetragen', E_User_notice); } } else { if (Entwanzen) { echo 'Insert von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' gescheitert!'; } //,E_USER_NOTICE); } } else { if (Entwanzen) { echo 'Update von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' erfolgreich!<br>'; } } } } if ($dwz == 1) { $query = 'UPDATE ' . $Tabelle_SpielerDWZ . ' ' . 'SET DWZ_neu=' . (int) $EinSpieler[1][0] . ', ' . 'I0=' . $EinSpieler[1][1] . ', ' . 'Punkte=' . round($EinSpieler[1][2] / 1000, 1) . ', ' . 'Partien=' . $EinSpieler[1][3] . ', ' . 'We=' . round($EinSpieler[1][4] / 1000, 3) . ', ' . 'Leistung=' . $EinSpieler[1][5] . ', ' . 'EFaktor=' . $EinSpieler[1][6] . ', ' . 'Niveau=' . $EinSpieler[1][7] . ' ' . 'WHERE ' . $Spalten_DWZListe['Turnier'] . '=' . $Turnier . ' ' . 'AND ' . $Spalten_DWZListe['ZPS'] . '=' . "'" . $EinSpieler[0]['zps'] . "'" . ' ' . 'AND ' . $Spalten_DWZListe['Mgl'] . '=' . $EinSpieler[0]['mgl_nr'] . ' ' . 'AND ' . $Spalten_DWZListe['Saison'] . '=' . $Saison; // Die Spalten, die ich angelegt habe, bzw Du anlegst, nehme ich als konstant an. if ($EinSpieler[1][0] == 'Restp.' or $EinSpieler[1][0] > 0) { $result = mysql_query($query); if (!$result) { $query = "INSERT INTO {$Tabelle_SpielerDWZ} " . 'SET ' . $Spalten_Meldeliste['ZPS'] . '=' . "'" . $EinSpieler[0]['zps'] . "'" . ', ' . $Spalten_Meldeliste['Mgl'] . '=' . $EinSpieler[0]['mgl_nr'] . ' ON DUPLICATE KEY UPDATE ' . $Spalten_Meldeliste['Turnier'] . '=' . $Turnier . ', ' . $Spalten_Meldeliste['Saison'] . '=' . $Saison . 'DWZ_neu=' . (int) $EinSpieler[1][0] . ', ' . 'I0=' . $EinSpieler[1][1] . ', ' . 'Punkte=' . $EinSpieler[1][2] . ', ' . 'Partien=' . $EinSpieler[1][3] . ', ' . 'We=' . $EinSpieler[1][4] . ', ' . 'Leistung=' . $EinSpieler[1][5] . ', ' . 'EFaktor=' . $EinSpieler[1][6] . ', ' . 'Niveau=' . $EinSpieler[1][7]; $result = mysql_query($query); if ($result) { if (Entwanzen) { echo 'Insert von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' erfolgreich!<br>'; } else { trigger_error($EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' wurde vom SQL goes DWZ-Script in die Meldeliste eingetragen', E_User_notice); } } else { if (Entwanzen) { echo 'Insert von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' gescheitert!'; } //,E_USER_NOTICE); } } else { if (Entwanzen) { echo 'Update von ' . $EinSpieler[0]['zps'] . '-' . $EinSpieler[0]['mgl_nr'] . ' erfolgreich!<br>'; } } } } } unset($EinSpieler, $result, $ArrUebergabeDWZ, $query); } //Label: Sinnslos /*Beim Einsetzen in die Seite mu� evtl hier das Aufr�umen getrichen werden. Das mu� man aber in der realen Version testen. */ }