|
|
inherit Variable.Variable; |
|
|
|
|
|
|
|
|
|
|
|
#define LOCALE(X,Y) \ |
([string](mixed)Locale.translate("roxen_config",roxenp()->locale->get(),X,Y)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
array transform_from_form( string what, mapping vl ) |
{ |
array res = query() + ({}); |
if(sizeof(res)!=5) |
res = ({ 0, 2, 1, 6, 3 }); |
|
res[0] = (int)what; |
for(int i=1; i<5; i++) { |
res[i] = (int)vl[(string)i]; |
res[i] = max( ({ 0, 1, 1, 0, 0 })[i], res[i] ); |
res[i] = min( ({ 2, 23, 9, 7, 23 })[i], res[i] ); |
} |
|
return res; |
} |
|
private string checked( int pos, int alt ) |
{ |
if(alt==query()[pos]) |
return " checked='checked'"; |
return ""; |
} |
|
private mapping next_or_same_day(mapping from, int day, int hour) |
{ |
if(from->wday==day && from->hour<hour) |
return from; |
return next_day(from, day); |
} |
|
private mapping next_day(mapping from, int day) |
{ |
from->hour = 0; |
if(from->wday<day) { |
return localtime(mktime(from) + (day - from->wday)*3600*24); |
} |
return localtime(mktime(from) + (7 - from->wday + day)*3600*24); |
} |
|
private mapping next_or_same_time(mapping from, int hour, void|int delta) |
{ |
if(from->hour==hour) return from; |
return next_time(from, hour, delta); |
} |
|
private mapping next_time(mapping from, int hour, void|int delta) |
{ |
if(from->hour<hour) { |
from->hour = hour; |
return from; |
} |
return localtime(mktime(from) + (24 - from->hour + hour)*3600 + delta); |
} |
|
int get_next( int last ) |
|
|
|
|
|
|
|
|
|
|
|
|
{ |
array vals = query(); |
if( !vals[0] ) |
return -1; |
|
|
if( vals[0] == 1 ) |
if( !last ) |
return time(1); |
else |
return last + 3600 * vals[1]; |
|
mapping m = localtime( last || time(1) ); |
m->min = m->sec = 0; |
if( !vals[3] ) { |
|
if (!last) |
{ |
for(int i; i<vals[2]; i++) |
m = next_or_same_time( m, vals[4] ); |
return mktime(m); |
} |
else |
{ |
for(int i; i<vals[2]; i++) |
m = next_time( m, vals[4] ); |
return mktime(m); |
} |
} |
|
|
if (!last) |
{ |
for(int i; i<vals[2]; i++) |
{ |
m = next_or_same_time( next_or_same_day( m, vals[3]-1, vals[4]+1 ), |
vals[4], 6*24*3600 ); |
} |
} |
else |
{ |
for(int i; i<vals[2]; i++) |
{ |
m = next_or_same_time( next_or_same_day( m, vals[3]-1, vals[4] ), |
vals[4], 6*24*3600 ); |
} |
} |
return mktime(m); |
} |
|
string render_form( RequestID id, void|mapping additional_args ) |
{ |
string res, inp1, inp2, inp3; |
|
res = "<table>" |
"<tr valign='top'><td><input name='" + path() + "' value='0' type='radio' " + |
checked(0,0) + " /></td><td>" + LOCALE(482, "Never") + "</td></tr>\n"; |
|
inp1 = HTML.select(path()+"1", "123456789"/1 + "1011121314151617181920212223"/2, (string)query()[1]); |
|
res += "<tr valign='top'><td><input name='" + path() + "' value='1' type='radio' " + |
checked(0,1) + " /></td><td>" + sprintf( LOCALE(483, "Every %s hour(s)."), inp1) + |
"</td></tr>\n"; |
|
inp1 = HTML.select(path()+"2", "123456789"/1, (string)query()[2]); |
inp2 = HTML.select(path()+"3", ({ |
({ "0", LOCALE(484, "Day") }), |
({ "1", LOCALE(485, "Sunday") }), |
({ "2", LOCALE(486, "Monday") }), |
({ "3", LOCALE(487, "Tuesday") }), |
({ "4", LOCALE(488, "Wednesday") }), |
({ "5", LOCALE(489, "Thursday") }), |
({ "6", LOCALE(490, "Friday") }), |
({ "7", LOCALE(491, "Saturday") }) }), (string)query()[3]); |
inp3 = HTML.select(path()+"4", "000102030405060708091011121314151617181920212223"/2, |
sprintf("%02d", query()[4])); |
|
res += "<tr valign='top'><td><input name='" + path() + "' value='2' type='radio' " + |
checked(0,2) + " /></td>\n<td>" + |
sprintf(LOCALE(492, "Every %s %s at %s o'clock."), inp1, inp2, inp3) + |
"</td></tr>\n</table>"; |
|
return res; |
} |
|
string render_view( RequestID id, void|mapping additional_args ) |
{ |
array res = query(); |
switch(res[0]) { |
case 0: |
return LOCALE(482, "Never"); |
case 1: |
return sprintf(LOCALE(493, "Every %d hour."), res[1]); |
case 2: |
string period = ({ |
LOCALE(484, "Day"), |
LOCALE(485, "Sunday"), |
LOCALE(486, "Monday"), |
LOCALE(487, "Tuesday"), |
LOCALE(488, "Wednesday"), |
LOCALE(489, "Thursday"), |
LOCALE(490, "Friday"), |
LOCALE(491, "Saturday") |
})[query()[3]]; |
|
return sprintf(LOCALE(494, "Every %d %s at %02d:00"), res[2], period, res[4]); |
default: |
return LOCALE(495, "Error in stored value."); |
} |
} |
|
|