460 lines
19 KiB
PHP
460 lines
19 KiB
PHP
<?php
|
|
/**
|
|
* This file contains all Horde_Core_Ui_VarRenderer extensions required for
|
|
* editing tasks.
|
|
*
|
|
* See the enclosed file COPYING for license information (GPL). If you
|
|
* did not receive this file, see http://www.horde.org/licenses/gpl.
|
|
*
|
|
* @package Nag
|
|
*/
|
|
|
|
/**
|
|
* The Horde_Core_Ui_VarRenderer_Nag class provides additional methods for
|
|
* rendering Nag specific fields.
|
|
*
|
|
* @todo Clean this hack up with Horde_Form/H4
|
|
* @author Jan Schneider <jan@horde.org>
|
|
* @package Nag
|
|
*/
|
|
class Horde_Core_Ui_VarRenderer_Nag extends Horde_Core_Ui_VarRenderer_Html
|
|
{
|
|
protected function _renderVarInput_NagAlarm($form, $var, $vars)
|
|
{
|
|
$varname = htmlspecialchars($var->getVarName());
|
|
$value = $var->getValue($vars);
|
|
if (!is_array($value)) {
|
|
if ($value) {
|
|
if ($value % 10080 == 0) {
|
|
$value = array('value' => $value / 10080, 'unit' => 10080);
|
|
} elseif ($value % 1440 == 0) {
|
|
$value = array('value' => $value / 1440, 'unit' => 1440);
|
|
} elseif ($value % 60 == 0) {
|
|
$value = array('value' => $value / 60, 'unit' => 60);
|
|
} else {
|
|
$value = array('value' => $value, 'unit' => 1);
|
|
}
|
|
$value['on'] = true;
|
|
} else {
|
|
$value = array('on' => false);
|
|
}
|
|
}
|
|
$units = array(1 => _("Minute(s)"), 60 => _("Hour(s)"),
|
|
1440 => _("Day(s)"), 10080 => _("Week(s)"));
|
|
$options = '';
|
|
foreach ($units as $unit => $label) {
|
|
$options .= '<option value="' . $unit;
|
|
if ($value && $value['on'] && $value['unit'] == $unit) {
|
|
$options .= '" selected="selected';
|
|
}
|
|
$options .= '">' . $label . '</option>';
|
|
}
|
|
|
|
return sprintf('<input id="%soff" type="radio" class="radio" name="%s[on]" value="0"%s /><label for="%soff"> %s</label><br />',
|
|
$varname,
|
|
$varname,
|
|
$value['on'] ? '' : ' checked="checked"',
|
|
$varname,
|
|
_("None"))
|
|
. sprintf('<input id="%son" type="radio" class="radio" name="%s[on]" value="1"%s />',
|
|
$varname,
|
|
$varname,
|
|
$value['on'] ? ' checked="checked"' : '')
|
|
. sprintf('<input type="text" size="2" name="%s[value]" id="%s_value" value="%s" />',
|
|
$varname,
|
|
$varname,
|
|
$value['on'] ? htmlspecialchars($value['value']) : 15)
|
|
. sprintf(' <select name="%s[unit]" id="%s_unit">%s</select>',
|
|
$varname,
|
|
$varname,
|
|
$options);
|
|
}
|
|
|
|
protected function _renderVarInput_NagDue($form, $var, $vars)
|
|
{
|
|
$var->type->getInfo($vars, $var, $task_due);
|
|
if ($task_due == 0) {
|
|
$date = '+' . (int)$GLOBALS['prefs']->getValue('default_due_days') . ' days';
|
|
$time = $GLOBALS['prefs']->getValue('default_due_time');
|
|
if ($time == 'now') {
|
|
$time = '';
|
|
} else {
|
|
$time = ' ' . $time;
|
|
}
|
|
$due_dt = strtotime($date . $time);
|
|
|
|
// Default to having a due date for new tasks if the
|
|
// default_due preference is set.
|
|
if (!$vars->exists('task_id') && $GLOBALS['prefs']->getValue('default_due')) {
|
|
$task_due = strtotime($date . $time);
|
|
}
|
|
} else {
|
|
$due_dt = $task_due;
|
|
}
|
|
|
|
$on = $task_due > 0;
|
|
|
|
/* Set up the radio buttons. */
|
|
$html = sprintf(
|
|
'<input id="due_type_none" name="due_type" type="radio" class="radio" value="none"%s />
|
|
%s
|
|
<br />
|
|
|
|
<input id="due_type_specified" name="due_type" type="radio" class="radio" value="specified"%s />
|
|
<label for="due_type_specified" class="hidden">%s</label>
|
|
<label for="due_date" class="hidden">%s</label>
|
|
<input type="text" name="due[date]" id="due_date" size="10" value="%s">',
|
|
$on ? '' : ' checked="checked"',
|
|
Horde::label('due_type_none', _("No due date.")),
|
|
$on ? ' checked="checked"' : '',
|
|
_("Due date specified."),
|
|
_("Date"),
|
|
htmlspecialchars(strftime($GLOBALS['prefs']->getValue('date_format_mini'), $due_dt))
|
|
);
|
|
|
|
if ($GLOBALS['browser']->hasFeature('javascript')) {
|
|
Horde_Core_Ui_JsCalendar::init(array(
|
|
'full_weekdays' => true
|
|
));
|
|
$GLOBALS['page_output']->addScriptFile('calendar.js');
|
|
$html .= ' <span id="due_wday"></span>' .
|
|
Horde::img('calendar.png', _("Calendar"), 'id="dueimg"');
|
|
}
|
|
|
|
$time_format = $GLOBALS['prefs']->getValue('twentyFour') ? 'H:i' : 'h:i a';
|
|
$due_time = date($time_format, $due_dt);
|
|
$html .= _("at")
|
|
. sprintf(
|
|
'<label for="due_time" class="hidden">%s</label>
|
|
<input type="text" name="due[time]" id="due_time" size="8" value="%s">',
|
|
_("Time"),
|
|
htmlspecialchars($due_time)
|
|
);
|
|
|
|
return $html;
|
|
}
|
|
|
|
protected function _renderVarInput_NagMethod($form, $var, $vars)
|
|
{
|
|
$varname = htmlspecialchars($var->getVarName());
|
|
$varvalue = $var->getValue($vars);
|
|
$on = !empty($varvalue) &&
|
|
(!isset($varvalue['on']) || !empty($varvalue['on']));
|
|
|
|
$html = sprintf(
|
|
'<input id="%soff" type="radio" class="radio" name="%s[on]" value="0"%s %s/><label for="%soff"> %s</label><br />',
|
|
$varname,
|
|
$varname,
|
|
$on ? '' : ' checked="checked"',
|
|
$this->_getActionScripts($form, $var),
|
|
$varname,
|
|
_("Use default notification method")
|
|
)
|
|
. sprintf(
|
|
'<input type="radio" class="radio" name="%s[on]" value="1"%s %s/><label for="%soff"> %s</label>',
|
|
$varname,
|
|
$on ? ' checked="checked"' : '',
|
|
$this->_getActionScripts($form, $var),
|
|
$varname,
|
|
_("Use custom notification method")
|
|
);
|
|
|
|
if ($on) {
|
|
Horde_Core_Prefs_Ui_Widgets::alarmInit();
|
|
$html .= '<br />';
|
|
$params = array('pref' => 'task_alarms', 'label' => '');
|
|
if ((!empty($varvalue) && !isset($varvalue['on'])) ||
|
|
$form->isSubmitted()) {
|
|
$params['value'] = $varvalue;
|
|
}
|
|
$html .= Horde_Core_Prefs_Ui_Widgets::alarm($params);
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Render the recurrence fields
|
|
*/
|
|
public function _renderVarInput_NagRecurrence($form, $var, $vars)
|
|
{
|
|
if ($vars->recurrence instanceof Horde_Date_Recurrence) {
|
|
$recur = $var->getValue($vars);
|
|
} else {
|
|
$var->type->getInfo($vars, $var, $recur);
|
|
}
|
|
|
|
/* No recurrence. */
|
|
$html = sprintf(
|
|
'<input id="recurnone" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_NONE,
|
|
$recur ? '' : ' checked="checked"',
|
|
Horde::label('recurnone', _("No recurrence"))
|
|
);
|
|
|
|
/* Daily. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_DAILY);
|
|
$html .= sprintf(
|
|
'<input id="recurdaily" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recurdaily_label" for="recurdaily">%s</label>
|
|
<input type="text" id="recur_daily_interval" name="recur_daily_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_DAILY,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Daily: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_daily_interval', _("day(s)"))
|
|
);
|
|
|
|
|
|
/* Weekly. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_WEEKLY);
|
|
$html .= sprintf(
|
|
'<input id="recurweekly" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recurweekly_label" for="recurweekly">%s</label>
|
|
<input type="text" id="recur_weekly_interval" name="recur_weekly_interval" size="2" value="%d" />
|
|
%s
|
|
<br />
|
|
%s<input id="mo" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="tu" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="we" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="th" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="fr" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="sa" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
%s<input id="su" type="checkbox" class="checkbox" name="weekly[]" value="%d"%s />
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_WEEKLY,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Weekly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_weekly_interval', _("week(s) on:")),
|
|
Horde::label('mo', _("Mo")),
|
|
Horde_Date::MASK_MONDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_MONDAY) ? ' checked="checked"' : '',
|
|
Horde::label('tu', _("Tu")),
|
|
Horde_Date::MASK_TUESDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_TUESDAY) ? ' checked="checked"' : '',
|
|
Horde::label('we', _("We")),
|
|
Horde_Date::MASK_WEDNESDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_WEDNESDAY) ? ' checked="checked"' : '',
|
|
Horde::label('th', _("Th")),
|
|
Horde_Date::MASK_THURSDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_THURSDAY) ? ' checked="checked"' : '',
|
|
Horde::label('fr', _("Fr")),
|
|
Horde_Date::MASK_FRIDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_FRIDAY) ? ' checked="checked"' : '',
|
|
Horde::label('sa', _("Sa")),
|
|
Horde_Date::MASK_SATURDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_SATURDAY) ? ' checked="checked"' : '',
|
|
Horde::label('su', _("Su")),
|
|
Horde_Date::MASK_SUNDAY,
|
|
$recur && $recur->recurOnDay(Horde_Date::MASK_SUNDAY) ? ' checked="checked"' : ''
|
|
);
|
|
|
|
/* Monthly on same date. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_DATE);
|
|
$html .= sprintf(
|
|
'<input id="recurmonthday" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recurmonthday_label" for="recurmonthday">%s</label>
|
|
<input type="text" id="recur_day_of_month_interval" name="recur_day_of_month_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_MONTHLY_DATE,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Monthly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_day_of_month_interval', _("month(s)") . ' ' . _("on the same date"))
|
|
);
|
|
|
|
/* Monthly on same weekday. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY);
|
|
$html .= sprintf(
|
|
'<input id="recurmonthweek" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recurmonthweek_label" for="recurmonthweek">%s</label>
|
|
<input type="text" id="recur_week_of_month_interval" name="recur_week_of_month_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_MONTHLY_WEEKDAY,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Monthly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_week_of_month_interval', _("month(s)") . ' ' . _("on the same weekday"))
|
|
);
|
|
|
|
/* Yearly on same date. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DATE);
|
|
$html .= sprintf(
|
|
'<input id="recuryear" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recuryear_label" for="recuryear">%s</label>
|
|
<input type="text" id="recur_yearly_interval" name="recur_yearly_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_YEARLY_DATE,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Yearly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_yearly_interval', _("year(s) on the same date"))
|
|
);
|
|
|
|
/* Yearly on same day of year. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_YEARLY_DAY);
|
|
$html .= sprintf(
|
|
'<input id="recuryearday" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recuryearday_label" for="recuryearday">%s</label>
|
|
<input type="text" id="recur_yearly_day_interval" name="recur_yearly_day_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_YEARLY_DAY,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Yearly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_yearly_day_interval', _("year(s) on the same day of the year"))
|
|
);
|
|
|
|
/* Yearly on same week day. */
|
|
$on = $recur && $recur->hasRecurType(Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY);
|
|
$html .= sprintf(
|
|
'<input id="recuryearweekday" type="radio" class="checkbox" name="recurrence" value="%d"%s />
|
|
<label id="recuryearweekday_label" for="recuryearweekday">%s</label>
|
|
<input type="text" id="recur_yearly_weekday_interval" name="recur_yearly_weekday_interval" size="2" value="%d" />
|
|
%s
|
|
<br />',
|
|
Horde_Date_Recurrence::RECUR_YEARLY_WEEKDAY,
|
|
$on ? ' checked="checked"' : '',
|
|
_("Yearly: Recurs every"),
|
|
$on ? $recur->getRecurInterval() : '',
|
|
Horde::label('recur_yearly_weekday_interval', _("year(s) on the same weekday and month of the year"))
|
|
);
|
|
|
|
/* Recurrence end. */
|
|
$html .= sprintf(
|
|
'<br />
|
|
%s
|
|
<br />
|
|
|
|
<input id="recurnoend" type="radio" class="checkbox" name="recur_end_type" value="none"%s />
|
|
%s
|
|
<br />
|
|
|
|
<input type="radio" class="checkbox" id="recur_end_specified" name="recur_end_type" value="date"%s />
|
|
<input type="text" name="recur_end" id="recur_end_date" size="10" value="%s">',
|
|
Horde::label('recur_end_type', _("Recur Until")),
|
|
$recur && ($recur->hasRecurEnd() || $recur->hasRecurCount()) ? '' : ' checked="checked"',
|
|
Horde::label('recurnoend', _("No end date")),
|
|
$recur && $recur->hasRecurEnd() ? ' checked="checked"' : '',
|
|
$recur && $recur->hasRecurEnd() ? $recur->getRecurEnd()->strftime('%x') : ''
|
|
);
|
|
|
|
if ($GLOBALS['browser']->hasFeature('javascript')) {
|
|
Horde_Core_Ui_JsCalendar::init(array(
|
|
'full_weekdays' => true
|
|
));
|
|
$GLOBALS['page_output']->addScriptFile('calendar.js');
|
|
$html .= ' <span id="recur_end_wday"></span>' .
|
|
Horde::img('calendar.png', _("Set recurrence end date"), 'id="recur_endimg"');
|
|
}
|
|
|
|
$on = $recur && $recur->getRecurCount();
|
|
$html .= sprintf(
|
|
'<br />
|
|
<input type="radio" class="checkbox" name="recur_end_type" value="count"%s />
|
|
<input type="text" id="recur_count" name="recur_count" size="2" onkeypress="document.eventform.recur_end_type[2].checked = true;" onchange="document.eventform.recur_end_type[2].checked = true;" value="%d" />
|
|
%s',
|
|
$on ? ' checked="checked"' : '',
|
|
$on ? $recur->getRecurCount() : '',
|
|
Horde::label('recur_count', _("recurrences"))
|
|
);
|
|
|
|
/* Exceptions and completions. */
|
|
if ($recur) {
|
|
foreach ($recur->getExceptions() as $exception) {
|
|
$html .= sprintf(
|
|
'<input type="hidden" name="exceptions[]" value="%s" />',
|
|
$exception
|
|
);
|
|
}
|
|
foreach ($recur->getCompletions() as $completion) {
|
|
$html .= sprintf(
|
|
'<input type="hidden" name="completions[]" value="%s" />',
|
|
$completion
|
|
);
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Render the search due date fields
|
|
*/
|
|
public function _renderVarInput_NagSearchDue($form, $var, $vars)
|
|
{
|
|
$html = sprintf(
|
|
_("%s %s days of %s"),
|
|
Horde::label('due_within', _("Is due within")),
|
|
'<input id="due_within" name="due_within" type="number" size="2" value="' . $vars->get('due_within') . '" />',
|
|
'<input id="due_of" name="due_of" type="text" value="' . $vars->get('due_of') . '" />')
|
|
. '<div class="horde-form-field-description">' . _("E.g., Is due within 2 days of today") . '</div>';
|
|
|
|
return $html;
|
|
}
|
|
|
|
protected function _renderVarInput_NagStart($form, $var, $vars)
|
|
{
|
|
$var->type->getInfo($vars, $var, $task_start);
|
|
$start_dt = ($task_start == 0)
|
|
// About a week from now
|
|
? $_SERVER['REQUEST_TIME'] + 604800
|
|
: $task_start;
|
|
$on = $task_start > 0;
|
|
|
|
/* Set up the radio buttons. */
|
|
$html = sprintf(
|
|
'<input id="start_date_none" name="start_date" type="radio" class="radio" value="none"%s />
|
|
%s
|
|
<br />
|
|
<input id="start_date_specified" name="start_date" type="radio" class="radio" value="specified"%s />
|
|
<label for="start_date_specified" class="hidden">%s</label>
|
|
<label for="start_date" class="hidden">%s</label>
|
|
<input type="text" name="start[date]" id="start_date" size="10" value="%s">',
|
|
$on ? '' : ' checked="checked"',
|
|
Horde::label('start_date_none', _("No delay")),
|
|
$on ? ' checked="checked"' : '',
|
|
_("Start date specified."),
|
|
_("Date"),
|
|
htmlspecialchars(strftime($GLOBALS['prefs']->getValue('date_format_mini'), $start_dt))
|
|
);
|
|
|
|
if ($GLOBALS['browser']->hasFeature('javascript')) {
|
|
Horde_Core_Ui_JsCalendar::init(array(
|
|
'full_weekdays' => true
|
|
));
|
|
$GLOBALS['page_output']->addScriptFile('calendar.js');
|
|
$html .= ' <span id="start_wday"></span>' .
|
|
Horde::img('calendar.png', _("Calendar"), 'id="startimg"');
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
/**
|
|
* Render tag field.
|
|
*/
|
|
protected function _renderVarInput_NagTags($form, $var, $vars)
|
|
{
|
|
$varname = htmlspecialchars($var->getVarName());
|
|
$value = htmlspecialchars($var->getValue($vars));
|
|
|
|
$html = sprintf('<input id="%s" type="text" name="%s" value="%s" />', $varname, $varname, $value);
|
|
$html .= sprintf('<span id="%s_loading_img" style="display:none;">%s</span>',
|
|
$varname,
|
|
Horde::img('loading.gif', _("Loading...")));
|
|
|
|
$GLOBALS['injector']->getInstance('Horde_Core_Factory_Imple')->create('Nag_Ajax_Imple_TagAutoCompleter', array('id' => $varname));
|
|
return $html;
|
|
}
|
|
}
|