Ejemplo n.º 1
0
 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.'&section='.$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.                       */
 }