diff --git a/_SQL/zmeny_3.4.5.655.sql.php b/_SQL/zmeny_3.4.5.655.sql.php
index 9375ad0..8f044d1 100644
--- a/_SQL/zmeny_3.4.5.655.sql.php
+++ b/_SQL/zmeny_3.4.5.655.sql.php
@@ -16,6 +16,11 @@
# *** pridani sloupcu pro dopravu
$sql[1] = 'ALTER TABLE `'.TBL_RACE.'` ADD `kapacita` SMALLINT NULL DEFAULT NULL AFTER `ubytovani`';
+$sql[2] = 'ALTER TABLE `'.TBL_RACE.'` ADD `prihlasenych` SMALLINT NOT NULL DEFAULT 0 AFTER `kapacita`';
+$sql[3] = 'ALTER TABLE `'.TBL_RACE.'` ENGINE=InnoDB;';
+
+$sql[4] = 'UPDATE `'.TBL_RACE.'` r LEFT JOIN ( SELECT id_zavod, COUNT(*) AS cnt FROM `'.TBL_ZAVXUS.
+'` GROUP BY id_zavod ) z ON z.id_zavod = r.id SET r.prihlasenych = COALESCE(z.cnt, 0);';
//#############################################################################
diff --git a/_terminy_rg.php b/_terminy_rg.php
deleted file mode 100644
index aa869a2..0000000
--- a/_terminy_rg.php
+++ /dev/null
@@ -1,134 +0,0 @@
-
- define("__HIDE_TEST__", "_KeAr_PHP_WEB_"); ?>
-
-
-require_once ('timestamp.inc.php');
-_set_global_RT_Start();
-require_once('cfg/_globals.php');
-require_once ('connect.inc.php');
-require_once ('./version.inc.php');
-require_once ('common.inc.php');
-require_once ('common_rg_race.inc.php');
-
-HTML_Header($g_www_title,'view.css');
-
-db_Connect();
-
-?>
-
';
for($i = 0; $i < $cols; $i++)
{
$row .= '|
-$num_rows = mysqli_num_rows($vysledek);
+
+// Fetch all rows into array
+$zaznamy = $vysledek ? mysqli_fetch_all($vysledek, MYSQLI_ASSOC) : [];
+$num_rows = count ($zaznamy);
if ($num_rows > 0)
{
show_link_to_actual_race($num_rows);
- $data_tbl = new html_table_mc();
- $col = 0;
- $data_tbl->set_header_col($col++,'Datum',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Název',ALIGN_LEFT);
- $data_tbl->set_header_col($col++,'Místo',ALIGN_LEFT);
- $data_tbl->set_header_col_with_help($col++,'Poř.',ALIGN_CENTER,"Pořadatel");
- $data_tbl->set_header_col_with_help($col++,'T',ALIGN_CENTER,"Typ akce");
- $data_tbl->set_header_col_with_help($col++,'S',ALIGN_CENTER,"Sport");
- $data_tbl->set_header_col($col++,'Možnosti',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Platba',ALIGN_CENTER);
-
- echo $data_tbl->get_css()."\n";
- echo $data_tbl->get_header()."\n";
- echo $data_tbl->get_header_row()."\n";
+ $renderer_option['curr_date'] = GetCurrentDate();
+
+ // define table
+ $tbl_renderer = RacesRendererFactory::createTable();
+ $tbl_renderer->addColumns('datum','nazev','misto','oddil','typ0','typ');
+ $tbl_renderer->addColumns(['moznosti',new FormatFieldRenderer ( 'id', function ( $id ) : string {
+ return 'Přehled';
+ })]);
+ $tbl_renderer->addColumns([new DefaultHeaderRenderer('Platba',ALIGN_CENTER),
+ new FormatFieldRenderer ( 'id', function ( $id ) use ($race_amount) : string {
+ return isset($race_amount[$id]) ? $race_amount[$id] : '';
+ })]);
- $i = 1;
- $brk_tbl = false;
- $old_year = 0;
- $year = 0;
- while ($zaznam=mysqli_fetch_array($vysledek))
- {
- $prefix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $suffix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $row = array();
- //----------------------------
- if($zaznam['vicedenni'])
- $datum=Date2StringFT($zaznam['datum'],$zaznam['datum2']);
- else
- $datum=Date2String($zaznam['datum']);
- //----------------------------
- $row[] = $prefix.$datum.$suffix;
- $row[] = "".$prefix.GetFormatedTextDel($zaznam['nazev'], $zaznam['cancelled']).$suffix."";
- $row[] = $prefix.GetFormatedTextDel($zaznam['misto'], $zaznam['cancelled']).$suffix;
- $row[] = $prefix.$zaznam['oddil'].$suffix;
- $row[] = GetRaceType0($zaznam['typ0']);
- $row[] = GetRaceTypeImg($zaznam['typ']).'';
- $row[] = 'Přehled';
- $row[] = isset($race_amount[$zaznam['id']])?$race_amount[$zaznam['id']]:"";
-
- $year = Date2Year($zaznam['datum']);
-
- if (!$brk_tbl && $zaznam['datum'] >= GetCurrentDate())
- {
- if($i != 1)
- echo $data_tbl->get_break_row()."\n";
- $brk_tbl = true;
- }
- else if($i != 1 && $year != $old_year)
- {
- $odkaz = "";
- echo $data_tbl->get_info_row($odkaz)."\n";
- }
+ $tbl_renderer->setRowTextPainter ( new GreyOldPainter() );
+ $tbl_renderer->setRowAttrsExt ( YearExpanderDetector::yearGroupRowAttrsExtender(...));
- //prasacky schovane radky krome posledniho roku
- ($year < date("Y"))?($class = $year."\" style=\"display:none") : ($class = $year);
+ // TODO: breaks are necessary only by some filters
+ $tbl_renderer->addBreak(new YearExpanderDetector());
+ $tbl_renderer->addBreak(new FutureRaceBreakDetector());
- echo $data_tbl->get_new_row_arr($row, $class)."\n";
- $i++;
- $old_year = $year;
- }
- echo $data_tbl->get_footer()."\n";
+ echo $tbl_renderer->render( new html_table_mc(), $zaznamy, $renderer_option );
}
?>
diff --git a/functions.js b/functions.js
index d4cc98e..bf1426b 100644
--- a/functions.js
+++ b/functions.js
@@ -132,10 +132,21 @@ function changeParameterValueInURL(currentUrl, parameter, value)
return url.href;
}
-function toggle_display_by_class(cls) {
- var lst = document.getElementsByClassName(cls);
- for(var i = 0; i < lst.length; ++i) {
- (lst[i].style.display == '')?(lst[i].style.display='none'):(lst[i].style.display='');
+function toggle_expand_by_group(group,el) {
+ var lst = document.querySelectorAll('[data-group="' + group + '"]');
+ var hidden = true;
+ for(var i = 0; i < lst.length; ++i) {
+ hidden = (lst[i].style.display == '');
+ lst[i].style.display=hidden?'none':''
+ }
+
+ // toggle arrow
+ const groupText = el.textContent;
+ if (groupText.includes('▲') || groupText.includes('▼')) {
+ el.textContent =
+ hidden
+ ? groupText.replace('▲', '▼')
+ : groupText.replace('▼', '▲');
}
}
diff --git a/index.php b/index.php
index c15a53a..371c6f8 100644
--- a/index.php
+++ b/index.php
@@ -76,12 +76,13 @@
case 1: //adresar
require_once "./directory.inc.php";
break;
- case 2: //terminovka
- if (!IsLogged())
- require_once './racelist.inc.php';
- else
- require_once "./news.inc.php";
- break;
+ // newer comes here ?
+ // case 2: //terminovka
+ // if (!IsLogged())
+ // require_once './racelist.inc.php';
+ // else
+ // require_once "./news.inc.php";
+ // break;
case 3: //prihlasky clena
if (IsLogged())
require_once './users_races.inc.php';
diff --git a/main.css.php b/main.css.php
index 88563af..ecfd173 100644
--- a/main.css.php
+++ b/main.css.php
@@ -488,6 +488,13 @@
margin-left: 50px;
}
+.year-expander {
+ cursor: pointer;
+ user-select: none;
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
if (!$g_is_release)
{
diff --git a/mn_races.inc.php b/mn_races.inc.php
index 4d1658c..74b9b7e 100644
--- a/mn_races.inc.php
+++ b/mn_races.inc.php
@@ -7,6 +7,7 @@
require_once ("./common_race.inc.php");
require_once ('./url.inc.php');
+require_once ('./ct_renderer_races.inc.php');
$fA = (IsSet($fA) && is_numeric($fA)) ? (int)$fA : 0;
$fB = (IsSet($fB) && is_numeric($fB)) ? (int)$fB : 0;
@@ -17,7 +18,7 @@
//when show all races reverse order
$order = ($fC == 1) ? "desc" : "";
-$query = "SELECT id,datum,datum2,prihlasky,prihlasky1,prihlasky2,prihlasky3,prihlasky4,prihlasky5, nazev,oddil,ranking,typ0,typ,vicedenni,odkaz,misto,cancelled FROM ".TBL_RACE.$sql_sub_query." ORDER BY datum $order, datum2 $order, id $order";
+$query = "SELECT id,datum,datum2,prihlasky,prihlasky1,prihlasky2,prihlasky3,prihlasky4,prihlasky5, nazev,oddil,ranking,typ0,typ,vicedenni,odkaz,misto,kapacita,prihlasenych,cancelled FROM ".TBL_RACE.$sql_sub_query." ORDER BY datum $order, datum2 $order, id $order";
@$vysledek=query_db($query);
?>
@@ -35,86 +36,54 @@ function confirm_delete() {
-$num_rows = ($vysledek != FALSE) ? mysqli_num_rows($vysledek) : 0;
+// Fetch all rows into array
+$zaznamy = $vysledek ? mysqli_fetch_all($vysledek, MYSQLI_ASSOC) : [];
+$num_rows = count ($zaznamy);
+
+$renderer_option['curr_date'] = GetCurrentDate();
+
if ($num_rows > 0)
{
show_link_to_actual_race($num_rows);
- $data_tbl = new html_table_mc();
- $col = 0;
- $data_tbl->set_header_col($col++,'Datum',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Název',ALIGN_LEFT);
- $data_tbl->set_header_col($col++,'Místo',ALIGN_LEFT);
- $data_tbl->set_header_col_with_help($col++,'Poř.',ALIGN_CENTER,"Pořadatel");
- $data_tbl->set_header_col_with_help($col++,'T',ALIGN_CENTER,"Typ akce");
- $data_tbl->set_header_col_with_help($col++,'S',ALIGN_CENTER,"Sport");
- $data_tbl->set_header_col_with_help($col++,'W',ALIGN_CENTER,"Web závodu");
- $data_tbl->set_header_col($col++,'Možnosti',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Přihlášky',ALIGN_CENTER);
-
- echo $data_tbl->get_css()."\n";
- echo $data_tbl->get_header()."\n";
- echo $data_tbl->get_header_row()."\n";
-
- $i = 1;
- $brk_tbl = false;
- $old_year = 0;
- while ($zaznam=mysqli_fetch_array($vysledek))
- {
- $race_is_old = (GetTimeToRace($zaznam['datum']) == -1);
-
- $prefix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $suffix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $row = array();
- //----------------------------
- if($zaznam['vicedenni'])
- $datum=Date2StringFT($zaznam['datum'],$zaznam['datum2']);
- else
- $datum=Date2String($zaznam['datum']);
-
- $prihlasky_curr = raceterms::GetActiveRegDateArr($zaznam);
- $prihlasky=Date2String($prihlasky_curr[0]);
+ // define table
+ $tbl_renderer = RacesRendererFactory::createTable();
+ $tbl_renderer->addColumns('datum','nazev','misto','oddil','typ0','typ','odkaz');
+ if ($g_enable_race_capacity)
+ $tbl_renderer->addColumns('ucast');
+ $tbl_renderer->addColumns(['moznosti', new CallbackRenderer ( function ( RowData $row, array $options ) : string {
+ $race_is_old = (GetTimeToRace($row->rec['datum']) == -1);
+ $prihlasky_curr = raceterms::GetActiveRegDateArr($row->rec);
- if($zaznam['prihlasky'] > 1)
- $prihlasky .= ' / '.$prihlasky_curr[1];
$time_to_reg = GetTimeToReg($prihlasky_curr[0]);
- $prihlasky_out = raceterms::ColorizeTermUser($time_to_reg,$prihlasky_curr,$prihlasky);
$prihl_finish = (($time_to_reg == -1 && $prihlasky_curr[0] != 0) || $race_is_old);
- //----------------------------
- $row[] = $prefix.$datum.$suffix;
- $row[] = "".$prefix.GetFormatedTextDel($zaznam['nazev'], $zaznam['cancelled']).$suffix."";
- $row[] = $prefix.GetFormatedTextDel($zaznam['misto'], $zaznam['cancelled']).$suffix;
- $row[] = $prefix.$zaznam['oddil'].$suffix;
- $row[] = GetRaceType0($zaznam['typ0']);
- $row[] = GetRaceTypeImg($zaznam['typ']);
- $row[] = GetRaceLinkHTML($zaznam['odkaz']);
- $ucast = (GetTimeToRace($zaznam['datum']) <= 0) ? " / Účast" : '';
+ $ucast = (GetTimeToRace($row->rec['datum']) <= 0) ? " / rec['id']."','')\">Účast" : '';
if (!$prihl_finish)
{
- $row[] = "Př-1 / Př-V / Zbr".$ucast;
+ return "rec['id']."&show_ed=1','')\">Př-1 / rec['id']."','')\">Př-V / rec['id']."','')\">Zbr".$ucast;
}
else
{
- $row[] = "Zobrazit".$ucast;
+ return "rec['id']."','')\">Zobrazit".$ucast;
}
- $row[] = $prihlasky_out;
+
+ })]);
+ $tbl_renderer->addColumns('prihlasky');
- if (!$brk_tbl && $zaznam['datum'] >= GetCurrentDate())
- {
- if($i != 1)
- echo $data_tbl->get_break_row()."\n";
- $brk_tbl = true;
- }
- else if($i != 1 && Date2Year($zaznam['datum']) != $old_year)
- {
- echo $data_tbl->get_break_row(true)."\n";
- }
+ $tbl_renderer->setRowTextPainter ( new GreyOldPainter() );
- echo $data_tbl->get_new_row_arr($row)."\n";
- $i++;
- $old_year = Date2Year($zaznam['datum']);
+ if ($fC == 1) {
+ // old races - add breaks
+ $tbl_renderer->addBreak(new YearExpanderDetector());
+ $tbl_renderer->setRowAttrsExt ( YearExpanderDetector::yearGroupRowAttrsExtender(...));
+ }
+ else {
+ // TODO: breaks are necessary only by some filters
+ $tbl_renderer->addBreak(new YearBreakDetector());
+ $tbl_renderer->addBreak(new FutureRaceBreakDetector());
}
- echo $data_tbl->get_footer()."\n";
+
+ echo $tbl_renderer->render( new html_table_mc(), $zaznamy, $renderer_option );
}
?>
diff --git a/mns_races.inc.php b/mns_races.inc.php
index ea2025d..2bbd2d4 100644
--- a/mns_races.inc.php
+++ b/mns_races.inc.php
@@ -7,6 +7,7 @@
require_once ("./common_race.inc.php");
require_once ('./url.inc.php');
+require_once ('./ct_renderer_races.inc.php');
$fA = (IsSet($fA) && is_numeric($fA)) ? (int)$fA : 0;
$fB = (IsSet($fB) && is_numeric($fB)) ? (int)$fB : 0;
@@ -17,7 +18,7 @@
//when show all races reverse order
$order = ($fC == 1) ? "desc" : "";
-$query = "SELECT id,datum,datum2,prihlasky,prihlasky1,prihlasky2,prihlasky3,prihlasky4,prihlasky5, nazev,misto,ranking,typ0,typ,vicedenni,odkaz,oddil,cancelled FROM ".TBL_RACE.$sql_sub_query." ORDER BY datum $order, datum2 $order, id $order";
+$query = "SELECT id,datum,datum2,prihlasky,prihlasky1,prihlasky2,prihlasky3,prihlasky4,prihlasky5, nazev,misto,ranking,typ0,typ,vicedenni,odkaz,oddil,kapacita,prihlasenych,cancelled FROM ".TBL_RACE.$sql_sub_query." ORDER BY datum $order, datum2 $order, id $order";
@$vysledek=query_db($query);
?>
@@ -35,84 +36,53 @@ function confirm_delete() {
-$num_rows = mysqli_num_rows($vysledek);
+
+// Fetch all rows into array
+$zaznamy = $vysledek ? mysqli_fetch_all($vysledek, MYSQLI_ASSOC) : [];
+$num_rows = count ($zaznamy);
+
+$renderer_option['curr_date'] = GetCurrentDate();
+
if ($num_rows > 0)
{
show_link_to_actual_race($num_rows);
- $data_tbl = new html_table_mc();
- $col = 0;
- $data_tbl->set_header_col($col++,'Datum',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Název',ALIGN_LEFT);
- $data_tbl->set_header_col($col++,'Místo',ALIGN_LEFT);
- $data_tbl->set_header_col_with_help($col++,'Poř.',ALIGN_CENTER,"Pořadatel");
- $data_tbl->set_header_col_with_help($col++,'T',ALIGN_CENTER,"Typ akce");
- $data_tbl->set_header_col_with_help($col++,'S',ALIGN_CENTER,"Sport");
- $data_tbl->set_header_col_with_help($col++,'W',ALIGN_CENTER,"Web závodu");
- $data_tbl->set_header_col($col++,'Možnosti',ALIGN_CENTER);
- $data_tbl->set_header_col($col++,'Přihlášky',ALIGN_CENTER);
-
- echo $data_tbl->get_css()."\n";
- echo $data_tbl->get_header()."\n";
- echo $data_tbl->get_header_row()."\n";
-
- $i = 1;
- $brk_tbl = false;
- $old_year = 0;
- while ($zaznam=mysqli_fetch_array($vysledek))
- {
- $race_is_old = (GetTimeToRace($zaznam['datum']) == -1);
-
- $prefix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $suffix = ($zaznam['datum'] < GetCurrentDate()) ? '' : '';
- $row = array();
- //----------------------------
- if($zaznam['vicedenni'])
- $datum=Date2StringFT($zaznam['datum'],$zaznam['datum2']);
- else
- $datum=Date2String($zaznam['datum']);
-
- $prihlasky_curr = raceterms::GetActiveRegDateArr($zaznam);
- $prihlasky=Date2String($prihlasky_curr[0]);
- if($zaznam['prihlasky'] > 1)
- $prihlasky .= ' / '.$prihlasky_curr[1];
+ // define table
+ $tbl_renderer = RacesRendererFactory::createTable();
+ $tbl_renderer->addColumns('datum','nazev','misto','oddil','typ0','typ','odkaz');
+ if ($g_enable_race_capacity)
+ $tbl_renderer->addColumns('ucast');
+ $tbl_renderer->addColumns(['moznosti', new CallbackRenderer ( function ( RowData $row, array $options ) : string {
+ $race_is_old = (GetTimeToRace($row->rec['datum']) == -1);
+ $prihlasky_curr = raceterms::GetActiveRegDateArr($row->rec);
$time_to_reg = GetTimeToReg($prihlasky_curr[0]);
- $prihlasky_out = raceterms::ColorizeTermUser($time_to_reg,$prihlasky_curr,$prihlasky);
$prihl_finish = (($time_to_reg == -1 && $prihlasky_curr[0] != 0) || $race_is_old);
- //----------------------------
- $row[] = $prefix.$datum.$suffix;
- $row[] = "".$prefix.GetFormatedTextDel($zaznam['nazev'], $zaznam['cancelled']).$suffix."";
- $row[] = $prefix.GetFormatedTextDel($zaznam['misto'], $zaznam['cancelled']).$suffix;
- $row[] = $prefix.$zaznam['oddil'].$suffix;
- $row[] = GetRaceType0($zaznam['typ0']);
- $row[] = GetRaceTypeImg($zaznam['typ']);
- $row[] = GetRaceLinkHTML($zaznam['odkaz']);
+
if (!$prihl_finish)
{
- $row[] = "Př-1 / Př-V / Zč / Zbr";
+ return "rec['id']."&show_ed=1','')\">Př-1 / rec['id']."','')\">Př-V / rec['id']."&select=1','')\">Zč / rec['id']."','')\">Zbr";
}
else
{
- $row[] = "Zbr.čl. / Zobrazit";
+ return "rec['id']."&select=1','')\">Zbr.čl. / rec['id']."','')\">Zobrazit";
}
- $row[] = $prihlasky_out;
+ })]);
+ $tbl_renderer->addColumns('prihlasky');
- if (!$brk_tbl && $zaznam['datum'] >= GetCurrentDate())
- {
- if($i != 1)
- echo $data_tbl->get_break_row()."\n";
- $brk_tbl = true;
- }
- else if($i != 1 && Date2Year($zaznam['datum']) != $old_year)
- {
- echo $data_tbl->get_break_row(true)."\n";
- }
+ $tbl_renderer->setRowTextPainter ( new GreyOldPainter() );
- echo $data_tbl->get_new_row_arr($row)."\n";
- $i++;
- $old_year = Date2Year($zaznam['datum']);
+ if ($fC == 1) {
+ // old races - add breaks
+ $tbl_renderer->addBreak(new YearExpanderDetector());
+ $tbl_renderer->setRowAttrsExt ( YearExpanderDetector::yearGroupRowAttrsExtender(...));
+ }
+ else {
+ // TODO: breaks are necessary only by some filters
+ $tbl_renderer->addBreak(new YearBreakDetector());
+ $tbl_renderer->addBreak(new FutureRaceBreakDetector());
}
- echo $data_tbl->get_footer()."\n";
+
+ echo $tbl_renderer->render( new html_table_mc(), $zaznamy, $renderer_option );
}
?>
diff --git a/race_reg_chip.php b/race_reg_chip.php
index d80633c..d591f6e 100644
--- a/race_reg_chip.php
+++ b/race_reg_chip.php
@@ -17,6 +17,7 @@
require_once ("./common_race.inc.php");
require_once ("./common_user.inc.php");
require_once ('./url.inc.php');
+require_once ('./ct_renderer_race.inc.php');
DrawPageTitle('Přiřazení SI čipů pro závod');
@@ -26,13 +27,16 @@
//$query = 'SELECT u.*, z.kat, z.pozn, z.pozn_in, z.si_chip as t_si_chip FROM '.TBL_ZAVXUS.' as z, '.TBL_USER.' as u WHERE z.id_user = u.id AND z.id_zavod='.$id_zav.' AND u.si_chip = 0 AND u.hidden = 0 ORDER BY z.id ASC';
$query = 'SELECT u.*, z.kat, z.pozn, z.pozn_in, z.si_chip as t_si_chip FROM '.TBL_ZAVXUS.' as z, '.TBL_USER.' as u WHERE z.id_user = u.id AND z.id_zavod='.$id_zav.' AND u.hidden = 0 ORDER BY z.id ASC';
-
@$vysledek=query_db($query);
+// Fetch all rows into array
+$zaznamy = $vysledek ? mysqli_fetch_all($vysledek, MYSQLI_ASSOC) : [];
+$num_rows = count ($zaznamy);
@$vysledek_z=query_db("SELECT * FROM ".TBL_RACE." WHERE id=$id_zav LIMIT 1");
$zaznam_z = mysqli_fetch_array($vysledek_z);
-DrawPageSubTitle('Vybraný závod');
+$kapacita = $zaznam_z['kapacita'];
+DrawPageRaceTitle('Vybraný závod',$kapacita,$num_rows);
RaceInfoTable($zaznam_z,'',false,false,true);
?>
@@ -47,46 +51,27 @@
|