Požadavek #403
uzavřený
Neměnit názvy filtrů, případně to ošetřit, aby to neskončilo chybou (neexistující název filtru ignorovat).
No to je ta jednodušší část, ale co když s v některé tabulce změní třeba název sloupce?
Neměnit ani názvy sloupců :-)
Ne, vážně - je nutné udělat název sloupce nezávislý na názvu filtru - aktuálně nejde použít 2 filtry se stejně pojmenovanými sloupci.
Já zapomněl, že je tam vytvořeno mapování na sloupce DB tabulky..
Jak třeba ale vyřešíme, když se změní struktura SQL dotazu?
- % Hotovo změněn z 0 na 20
- Odhadovaná doba nastaven na 2:00hod
Ve třídě Filter_Form vytvořit metodu is_loaded_from_stored_filter(), která indikuje, zda li je filtr načten z uloženého filtru.
Každý SQL dotaz používající filtry obalit do try .. catch takto:
$f = new Filter_form();
try
{
$model->get_all..();
}
catch (Exception $e)
{
if ($f->is_loaded_from_stored_filter())
{
status::error('Incompatible stored filter');
url::redirect(url::base().url_lang::current());
}
throw $e;
}
Aby to nebylo moc práce, tak bych tak v budoucnu činil jen u SQL dotazů, které se změnily.
- Přiřazeno změněn z Michal Kliment na Ondřej Fibich
Hotovo, aplikováno na Members_Controller#show_all, příklad (kde bude nastávat problém s kompatibilitou aplikuje se podobný úsek kódu):
try
{
$total_members = $model_members->count_all_members($filter_form->as_sql());
// ... some other SQL queries
}
catch (Exception $e)
{
if ($filter_form->is_loaded_from_saved_query())
{
status::error('Invalid saved query');
// disable default query (loop protection)
if ($filter_form->is_loaded_from_default_saved_query())
{
ORM::factory('filter_query')->remove_default($filter_form->get_base_url());
}
$this->redirect(url_lang::current());
}
throw $e;
}
- Stav změněn z Nový na Uzavřený
- % Hotovo změněn z 20 na 100
Také k dispozici: Atom
PDF