diff --git a/website/ajax/action.design.auto-enter.inc b/website/ajax/action.design.auto-enter.inc new file mode 100644 index 000000000..6cb605857 --- /dev/null +++ b/website/ajax/action.design.auto-enter.inc @@ -0,0 +1,58 @@ +beginTransaction(); + +try { + // Get all eligible racers + $stmt = $db->query('SELECT racerid FROM RegistrationInfo WHERE exclude = 0'); + $racers = $stmt->fetchAll(PDO::FETCH_COLUMN); + + // For each racer, check if they're already in this award category + // If not, add them to it + $check_stmt = $db->prepare('SELECT COUNT(*) FROM DesignEntries + WHERE racerid = :racerid AND awardid = :awardid'); + $insert_stmt = $db->prepare('INSERT INTO DesignEntries (racerid, awardid) + VALUES (:racerid, :awardid)'); + + $racers_added = 0; + foreach ($racers as $racerid) { + $check_stmt->execute(array(':racerid' => $racerid, ':awardid' => $awardid)); + $exists = $check_stmt->fetchColumn(); + + if (!$exists) { + $insert_stmt->execute(array( + ':racerid' => $racerid, + ':awardid' => $awardid + )); + $racers_added++; + } + } + + // Commit the transaction + $db->commit(); + + // Return count of added racers for feedback + json_out('racers_added', $racers_added); + json_success(); + +} catch (Exception $e) { + // Roll back on error + $db->rollBack(); + json_failure('database', $e->getMessage()); +} +?> diff --git a/website/ajax/action.design.save-entries.inc b/website/ajax/action.design.save-entries.inc new file mode 100644 index 000000000..035d3b61f --- /dev/null +++ b/website/ajax/action.design.save-entries.inc @@ -0,0 +1,49 @@ +beginTransaction(); + +try { + // First delete all existing entries for this racer + $stmt = $db->prepare('DELETE FROM DesignEntries WHERE racerid = :racerid'); + $stmt->execute(array(':racerid' => $racerid)); + + // Then add the new entries + $insert_stmt = $db->prepare('INSERT INTO DesignEntries (racerid, awardid) VALUES (:racerid, :awardid)'); + + foreach ($entries as $entry) { + if ($entry['selected']) { + $insert_stmt->execute(array( + ':racerid' => $racerid, + ':awardid' => $entry['awardid'] + )); + } + } + + // Commit the transaction + $db->commit(); + + json_success(); +} catch (Exception $e) { + // Roll back on error + $db->rollBack(); + json_failure('database', $e->getMessage()); +} +?> diff --git a/website/ajax/action.design.toggle-entry.inc b/website/ajax/action.design.toggle-entry.inc new file mode 100644 index 000000000..85e911b64 --- /dev/null +++ b/website/ajax/action.design.toggle-entry.inc @@ -0,0 +1,25 @@ +prepare('INSERT OR IGNORE INTO DesignEntries (racerid, awardid) VALUES (:racerid, :awardid)'); + $stmt->execute(array(':racerid' => $racerid, ':awardid' => $awardid)); + } else { + $stmt = $db->prepare('DELETE FROM DesignEntries WHERE racerid = :racerid AND awardid = :awardid'); + $stmt->execute(array(':racerid' => $racerid, ':awardid' => $awardid)); + } + json_success(); +} catch (Exception $e) { + json_failure('database', $e->getMessage()); +} +?> diff --git a/website/ajax/query.award.design-list.inc b/website/ajax/query.award.design-list.inc new file mode 100644 index 000000000..80c7d777c --- /dev/null +++ b/website/ajax/query.award.design-list.inc @@ -0,0 +1,30 @@ +query('SELECT a.awardid, a.awardname, a.classid, a.rankid, at.awardtype + FROM Awards a + INNER JOIN AwardTypes at ON a.awardtypeid = at.awardtypeid + WHERE at.awardtype IN ("Design General", "Design Trophy") + ORDER BY a.sort'); + +$awards = array(); +foreach ($stmt as $row) { + $awards[] = array( + 'awardid' => (int)$row['awardid'], // Ensure integer type + 'awardname' => $row['awardname'], + 'classid' => (int)$row['classid'], + 'rankid' => (int)$row['rankid'], + 'awardtype' => $row['awardtype'] + ); +} + +// Log the results for debugging +error_log("Design awards query found " . count($awards) . " awards"); +foreach ($awards as $award) { + error_log("Design award ID: " . $award['awardid'] . ", Name: " . $award['awardname']); +} + +json_out('awards', $awards); +json_success(); +?> diff --git a/website/ajax/query.award.eligible-racers.inc b/website/ajax/query.award.eligible-racers.inc new file mode 100644 index 000000000..6ff9a4b6b --- /dev/null +++ b/website/ajax/query.award.eligible-racers.inc @@ -0,0 +1,89 @@ + $awardid)); + +error_log("Is design award check result: " . $is_design); + +// Get award information (classid, rankid) +$award = read_single_row('SELECT classid, rankid FROM Awards WHERE awardid = :awardid', + array(':awardid' => $awardid), PDO::FETCH_ASSOC); + +if ($is_design > 0) { + // Fix the SQL query for carphoto + $carphoto_field = (schema_version() < 2) ? '\'\' as carphoto' : 'r.carphoto'; + + // For design awards, only show racers who have entered this category + $sql = "SELECT r.racerid, r.firstname, r.lastname, r.carnumber, r.carname, + r.classid, r.rankid, r.imagefile, $carphoto_field + FROM RegistrationInfo r + INNER JOIN DesignEntries de ON r.racerid = de.racerid + WHERE de.awardid = :awardid AND r.exclude = 0 AND r.passedinspection = 1 + ORDER BY r.lastname, r.firstname"; + + error_log("Design award SQL: " . $sql); + + $stmt = $db->prepare($sql); + $stmt->execute(array(':awardid' => $awardid)); + + // Count results for debugging + $racers_count = 0; +} else { + // For non-design awards, show racers based on class/rank eligibility + $sql = 'SELECT racerid, firstname, lastname, carnumber, carname, classid, rankid, + imagefile, ' . (schema_version() < 2 ? '\'\' as ' : '') . ' carphoto + FROM RegistrationInfo + WHERE exclude = 0 AND passedinspection = 1'; + + // Add class/rank filters if specified for the award + if ($award && $award['classid'] > 0) { + $sql .= ' AND classid = ' . $award['classid']; + } + if ($award && $award['rankid'] > 0) { + $sql .= ' AND rankid = ' . $award['rankid']; + } + + $sql .= ' ORDER BY lastname, firstname'; + $stmt = $db->query($sql); +} + +$racers = array(); +foreach ($stmt as $row) { + $racers_count++; + $carphoto_url = ''; + if (!empty($row['carphoto'])) { + $carphoto_url = car_photo_repository()->lookup(RENDER_JUDGING)->render_url($row['carphoto']); + } + + $racers[] = array( + 'racerid' => (int)$row['racerid'], // Ensure integer type + 'name' => $row['firstname'] . ' ' . $row['lastname'], + 'firstname' => $row['firstname'], + 'lastname' => $row['lastname'], + 'carnumber' => $row['carnumber'], + 'carname' => $row['carname'], + 'classid' => (int)$row['classid'], + 'rankid' => (int)$row['rankid'], + 'carphoto' => $carphoto_url + ); +} + +error_log("Found $racers_count eligible racers for award ID: $awardid"); + +json_out('eligible_racers', $racers); +json_success(); +?> diff --git a/website/ajax/query.design.entries.inc b/website/ajax/query.design.entries.inc new file mode 100644 index 000000000..070c542b0 --- /dev/null +++ b/website/ajax/query.design.entries.inc @@ -0,0 +1,22 @@ +prepare('SELECT de.awardid, a.awardname + FROM DesignEntries de + INNER JOIN Awards a ON de.awardid = a.awardid + WHERE de.racerid = :racerid'); +$stmt->execute(array(':racerid' => $racerid)); + +$entries = array(); +foreach ($stmt as $row) { + $entries[] = array( + 'awardid' => $row['awardid'], + 'awardname' => $row['awardname'] + ); +} + +json_out('entries', $entries); +json_success(); +?> diff --git a/website/ajax/query.design.entry-count.inc b/website/ajax/query.design.entry-count.inc new file mode 100644 index 000000000..cbaaa10cb --- /dev/null +++ b/website/ajax/query.design.entry-count.inc @@ -0,0 +1,11 @@ + $awardid)); + +json_out('entry_count', $count); +json_success(); +?> diff --git a/website/ajax/query.racer.by-design-category.inc b/website/ajax/query.racer.by-design-category.inc new file mode 100644 index 000000000..ce38c4af0 --- /dev/null +++ b/website/ajax/query.racer.by-design-category.inc @@ -0,0 +1,47 @@ +prepare($sql); +$stmt->execute(array(':awardid' => $awardid)); + +$racers = array(); +$rowno = 0; +foreach ($stmt as $rs) { + $rowno++; + $racers[] = array( + 'racerid' => $rs['racerid'], + 'carnumber' => $rs['carnumber'], + 'lastname' => $rs['lastname'], + 'firstname' => $rs['firstname'], + 'carname' => $rs['carname'], + 'classid' => $rs['classid'], + 'rankid' => $rs['rankid'], + 'headshot' => headshot_repository()->lookup(RENDER_TINY)->get_url_for_racer_icon($rs['racerid'], $rs['imagefile']), + 'rowno' => $rowno + ); +} + +json_out('racers', $racers); +json_success(); +?> diff --git a/website/awards-editor.php b/website/awards-editor.php index 3fd32698a..9b572acbd 100644 --- a/website/awards-editor.php +++ b/website/awards-editor.php @@ -23,7 +23,7 @@ - + @@ -122,6 +122,31 @@ +
+