Požadavek #965
otevřenýNeomezený konec přerušení
0%
Popis
Pokud není v nastavení nastaveno horní omezení trvání přesměrování, mělo by být možné nastavit přesměrování do "nekonečna".
Lze to udělat přidáním zaškrtávacího tlačítka s popiskem: neomezeno.
V DB by se ukládala hodnota 9999-12-31, takže by zásah zbytek systému neovlivnil, jelikož SQL dotazy s touto hodnotou umí pracovat.
Zaškrtávací tlačítko by mělo být hned za polem pro zadání horního intervalu a pomocí JS by se mělo zajistit, aby při jeho zaškrtnutí nebylo možné hodnotu pole měnit. Tuto funkcionalitu by chtělo udělat nějak obecněji, jelikož se bude hodit i u jiných požadavků (#954).
Aktualizováno uživatelem Ondřej Fibich před téměř 9 roky(ů)
- Popis aktualizován (rozdíl)
- Přiřazeno nastaven na David Raška
- Odhadovaná doba změněn z 5:00hod na 3:00hod
Aktualizováno uživatelem Ondřej Fibich před téměř 9 roky(ů)
Když ve Form_Date
přetížíš metodu __get
, tak se ti může podařit následující kód do Form_Date
:
if (isset($form_data["to_infinity"]) && $form_data["to_infinity"] != "1")
{
$to = date('Y-m-d', $form_data['to']);
}
else
{
$to = '9999-12-31';
}
Pokud zaškrtnu volbu "nekonečno", pak by se měl datum v tlačítku změnit na 9999-12-31, nebo prostě by neměl asi vidět ten starý co jsem tam zadal.
Zároveň bych zkusil implementaci provést bez závislosti na rodičovský formulář. Něco jako $form->date('to', TRUE)
. S tím že si checkbox přidáš pomocí html_element
metody. Nejsem si úplně jistý jestli to půjde, ale pak by to bylo super :-).
Aktualizováno uživatelem David Raška před téměř 9 roky(ů)
Toto řešení bohužel néni možné, zkusil sem neco podobného. Problém je v tom, že by bylo nutné přepsat veškeré validátory, helpery a další, jelikož v nich používáme PHP funkce, které neumíja dělat s datem větším jak 2038 (přeteče unix timestamp).
Aktualizováno uživatelem Ondřej Fibich před téměř 9 roky(ů)
David Raška napsal:
Toto řešení bohužel néni možné, zkusil sem neco podobného. Problém je v tom, že by bylo nutné přepsat veškeré validátory, helpery a další, jelikož v nich používáme PHP funkce, které neumíja dělat s datem větším jak 2038 (přeteče unix timestamp).
Tak to můžeš vrazit do samostatné get_value_with_infinite()
metody Form_Date
a tu budeme volat.
Aktualizováno uživatelem David Raška před téměř 9 roky(ů)
Ondřej Fibich napsal:
Zároveň bych zkusil implementaci provést bez závislosti na rodičovský formulář. Něco jako
$form->date('to', TRUE)
. S tím že si checkbox přidáš pomocíhtml_element
metody. Nejsem si úplně jistý jestli to půjde, ale pak by to bylo super :-).
A toto řešení sem taky zkusil a taky nefunguje, jelikož pak onen checkbox není v interních strukturách Forge
a nedojde k validaci a načtení hodnot odeslaného formuláře. Pak by bylo nutné data tahat z $_POST$ místo @form->as_array()
.
Ziskani hodnoty je teda ted pres funkci get_string_value_with_infinite()
. Schvalne sem zduraznil string, protoze normalne Form_Date
vraci timestamp.
Aktualizováno uživatelem Ondřej Fibich před více než 8 roky(ů)
A co upravit Form_Date
tak aby nepoužíval strtotime
?
Řádek 280:
$timeObj = new DateTime($time);
$this->data['value'] = $timeObj->format('U');
Řádek 150: to si domyslíš...
Nemám po ruce žádný 32bit, na kterém bych to vyzkoušel..
David Raška napsal:
Toto řešení bohužel néni možné, zkusil sem neco podobného. Problém je v tom, že by bylo nutné přepsat veškeré validátory, helpery a další, jelikož v nich používáme PHP funkce, které neumíja dělat s datem větším jak 2038 (přeteče unix timestamp).
Aktualizováno uživatelem David Raška před více než 8 roky(ů)
Ondřej Fibich napsal:
A co upravit
Form_Date
tak aby nepoužívalstrtotime
?Řádek 280: [...]
Řádek 150: to si domyslíš...
Zkusil sem, format('U') sice vrátí správný timestamp aj pro 9999-12-31, ale přepsání validátorů a helperů to neeřeší. Vracá to totiž string a drtivá většina funkcí pracuje s integerem který je ale pořád 32bitový ať použiješ funkci jaků chceš.
A co sem teď testoval na 64bitu, tak není potřeba DateTime ani používat, protože funkce date
a mktime
umí s velkým datumem pracovat bez problému. Jediný problém je teda enom v datovém typu int
, který jde vyřešit asi jedině použitím 64 bitového systému.