reihungst admin edit_gebiet.php: checking that there are same negativpoints for one gebiet and one level before showing offsetpunkte suggestion for RT gebiete

This commit is contained in:
alex
2020-02-17 19:26:55 +01:00
parent 21da8dfb51
commit a063a73c41
2 changed files with 60 additions and 13 deletions
+9 -5
View File
@@ -259,12 +259,16 @@ if ($gebiet_id != '')
echo '<td>Maximale Punkteanzahl</td><td><input type="text" size="5" maxlength="5" name="maxpunkte" value="'.$gebiet->maxpunkte.'">'.$hinweis.'</td>';
echo '</tr><tr>';
// empfohlene offsetpunkte berechnen und anzeigen
$offsethinweis = '';
$offsetpunkte = $gebiet->berechneOffsetpunkte($gebiet_id);
if ($gebiet->offsetpunkte != $offsetpunkte)
$hinweis = ' <span class="error">empfohlene Offsetpunkteanzahl: '.round($offsetpunkte).(round($offsetpunkte) != $offsetpunkte?' ('.$offsetpunkte.' gerundet)':'').'</span>';
else
$hinweis = '';
echo '<td>Offsetpunkte (minimale Punkteanzahl)</td><td><input type="text" size="5" maxlength="5" name="offsetpunkte" value="'.$gebiet->offsetpunkte.'">'.$hinweis.'</td>';
if ($offsetpunkte)
{
$offsetwarnung = strlen($gebiet->errormsg) > 0 ? ' (HINWEIS: '.$gebiet->errormsg.')' : '';
if ($gebiet->offsetpunkte != $offsetpunkte)
$offsethinweis = ' <span class="error">empfohlene Offsetpunkteanzahl: '.round($offsetpunkte).(round($offsetpunkte) != $offsetpunkte ? ' ('.$offsetpunkte.' gerundet)' : '').$offsetwarnung.'</span>';
}
echo '<td>Offsetpunkte (minimale Punkteanzahl)</td><td><input type="text" size="5" maxlength="5" name="offsetpunkte" value="'.$gebiet->offsetpunkte.'">'.$offsethinweis.'</td>';
echo '</tr><tr>';
echo '<td>Maximale Fragenanzahl</td><td><input type="text" size="5" maxlength="5" name="maxfragen" value="'.$gebiet->maxfragen.'"></td>';
echo '</tr><tr>';
+51 -8
View File
@@ -632,6 +632,49 @@ class gebiet extends basis_db
if(!$this->load($gebiet_id))
return false;
$checkqry = "SELECT COUNT (uniquepoints) AS count_uniquepoints
FROM (
SELECT gebiet_id,
level,
count(DISTINCT punkte),
CASE WHEN count(DISTINCT punkte) > 1 THEN FALSE ELSE TRUE END AS uniquepoints
FROM (
SELECT tbl_frage.gebiet_id,
tbl_frage.level,
CASE WHEN multipleresponse THEN sum(punkte) ELSE min(punkte) END AS punkte
FROM testtool.tbl_frage
JOIN testtool.tbl_vorschlag USING (frage_id)
JOIN testtool.tbl_gebiet USING (gebiet_id)
WHERE tbl_vorschlag.aktiv
AND tbl_vorschlag.punkte < 0
AND tbl_frage.demo = false
AND tbl_frage.aktiv
AND gebiet_id = ".$this->db_add_param($gebiet_id, FHC_INTEGER)."
GROUP BY tbl_frage.gebiet_id, multipleresponse, tbl_frage.level, tbl_frage.frage_id
) p
GROUP BY gebiet_id, level
) pu
WHERE uniquepoints = FALSE";
if($this->db_query($checkqry))
{
if($row = $this->db_fetch_object())
{
if (!is_numeric($row->count_uniquepoints) || $row->count_uniquepoints > 0)
$this->errormsg = 'Negativpunkte sind nicht für alle Fragen gleich hoch!';
}
else
{
$this->errormsg = 'Fehler beim Prüfen der Offsetpunkte';
return false;
}
}
else
{
$this->errormsg = 'Fehler beim Prüfen der Offsetpunkte';
return false;
}
$qry = "
WITH fragen AS (
SELECT tbl_frage.frage_id, tbl_frage.gebiet_id, tbl_frage.level, punkte
@@ -688,7 +731,7 @@ class gebiet extends basis_db
AND frage_id = (SELECT min(frage_id) FROM fragen fr WHERE fr.gebiet_id = fragen.gebiet_id AND fr.level = fragen.level)
GROUP BY fragen.gebiet_id, level
) pkteprolevel)
END) *(-1)
END)
WHEN tbl_gebiet.level_start IS NOT NULL THEN
(CASE WHEN tbl_gebiet.multipleresponse=false THEN
(
@@ -696,31 +739,31 @@ class gebiet extends basis_db
FROM fragen
WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id
AND fragen.level = tbl_gebiet.level_start
) * (SELECT fragenanzahl.anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1)
) * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1)
ELSE
(SELECT sum(punkte)
FROM fragen
WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id
AND frage_id = (SELECT min(frage_id) FROM fragen WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id)
AND fragen.level = tbl_gebiet.level_start
)* (SELECT fragenanzahl.anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1)
END) *(-1)
)* (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id AND fragenanzahl.level = tbl_gebiet.level_start LIMIT 1)
END)
ELSE
(CASE WHEN tbl_gebiet.multipleresponse=false THEN
(
SELECT min(punkte)
FROM fragen
WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id
) * (SELECT fragenanzahl.anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1)
) * (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1)
ELSE
(SELECT sum(punkte)
FROM fragen
WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id
AND frage_id = (SELECT min(frage_id) FROM fragen WHERE fragen.gebiet_id = tbl_gebiet.gebiet_id)
)* (SELECT fragenanzahl.anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1)
END) *(-1)
)* (SELECT anzahl FROM fragenanzahl WHERE fragenanzahl.gebiet_id = tbl_gebiet.gebiet_id LIMIT 1)
END)
END) AS offsetpunkte
END) * (-1) AS offsetpunkte
FROM
testtool.tbl_gebiet
WHERE