mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +01:00
first version of a yearly planner
This commit is contained in:
parent
369161d91f
commit
fad791eabd
@ -628,6 +628,11 @@ class calendar_ui
|
||||
($planner_days_for_view !== false ? '&planner_days='.$planner_days_for_view : ''),
|
||||
'selected' => $this->view == 'planner' && $this->sortby == 'user',
|
||||
),
|
||||
array(
|
||||
'text' => lang('yearly planner'),
|
||||
'value' => 'menuaction=calendar.calendar_uiviews.planner&sortby=month',
|
||||
'selected' => $this->view == 'planner' && $this->sortby == 'month',
|
||||
),
|
||||
array(
|
||||
'text' => lang('listview'),
|
||||
'value' => 'menuaction=calendar.calendar_uilist.listview',
|
||||
|
@ -238,7 +238,19 @@ class calendar_uiviews extends calendar_ui
|
||||
*/
|
||||
function &planner($home=false)
|
||||
{
|
||||
if (!$this->planner_days) // planner monthview
|
||||
if ($this->sortby == 'month') // yearly planner with month rows
|
||||
{
|
||||
$this->first = $this->bo->date2array($this->date);
|
||||
$this->first['day'] = 1;
|
||||
unset($this->first['raw']);
|
||||
$this->last = $this->first;
|
||||
$this->last['year']++;
|
||||
$this->last = $this->bo->date2ts($this->last)-1;
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.lang('yearly planner').' '.
|
||||
lang(egw_time::to($this->first,'F')).' '.egw_time::to($this->first,'Y').' - '.
|
||||
lang(egw_time::to($this->last,'F')).' '.egw_time::to($this->last,'Y');
|
||||
}
|
||||
elseif (!$this->planner_days) // planner monthview
|
||||
{
|
||||
if ($this->day < 15) // show one complete month
|
||||
{
|
||||
@ -278,11 +290,11 @@ class calendar_uiviews extends calendar_ui
|
||||
$search_params['start'] = $this->first;
|
||||
$search_params['end'] = $this->last;
|
||||
$search_params['enum_groups'] = $this->sortby == 'user';
|
||||
$events = $this->bo->search($search_params);
|
||||
$events =& $this->bo->search($search_params);
|
||||
|
||||
if ($this->debug > 0) $this->bo->debug_message('uiviews::planner() date=%1: first=%2, last=%3',False,$this->date,$this->bo->date2string($this->first),$this->bo->date2string($this->last));
|
||||
|
||||
$content =& $this->plannerWidget($events,$this->first,$this->last,$this->sortby == 'user' ? false : (int) $this->cat_id);
|
||||
$content =& $this->plannerWidget($events,$this->first,$this->last,$this->sortby != 'category' ? $this->sortby : (int) $this->cat_id);
|
||||
|
||||
if (!$home)
|
||||
{
|
||||
@ -1441,18 +1453,39 @@ class calendar_uiviews extends calendar_ui
|
||||
* @param array $events events to show
|
||||
* @param mixed $start start-time of the grid
|
||||
* @param mixed $end end-time of the grid
|
||||
* @param boolean/int $by_cat rows by sub-categories of $by_cat (cat_id or 0 for upmost level) or by users (false)
|
||||
* @param string|int $by_cat rows by sub-categories of $by_cat (cat_id or 0 for upmost level) or by 'user' or 'month'
|
||||
* @param string $indent='' string for correct indention
|
||||
* @return string with widget
|
||||
*/
|
||||
function &plannerWidget($events,$start,$end,$by_cat=0,$indent='')
|
||||
function &plannerWidget(&$events,$start,$end,$by_cat=0,$indent='')
|
||||
{
|
||||
$content = $indent.'<div class="plannerWidget">'."\n";
|
||||
|
||||
// display the header, containing a headerTitle and multiple headerRows with the scales
|
||||
$content .= $indent."\t".'<div class="plannerHeader">'."\n";
|
||||
// display the headerTitle
|
||||
$title = $by_cat === false ? lang('User') : lang('Category');
|
||||
|
||||
// display the headerTitle, and get sort2labels
|
||||
switch($by_cat)
|
||||
{
|
||||
case 'user':
|
||||
$title = lang('User');
|
||||
$sort2label = $this->_get_planner_users();
|
||||
break;
|
||||
case 'month':
|
||||
$title = lang('Month');
|
||||
$sort2label = array();
|
||||
$time = new egw_time($start);
|
||||
for($n = 0; $n < 12; ++$n)
|
||||
{
|
||||
$sort2label[$time->format('Y-m')] = lang($time->format('F')).' '.$time->format('Y');
|
||||
$time->modify('+1 month');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$title = lang('Category');
|
||||
$sort2label = array();
|
||||
break;
|
||||
}
|
||||
$content .= $indent."\t\t".'<div class="plannerHeaderTitle th">'.$title."</div>\n";
|
||||
|
||||
// display the headerRows with the scales
|
||||
@ -1467,34 +1500,37 @@ class calendar_uiviews extends calendar_ui
|
||||
${$v}['minute'] = ${$v}['second'] = 0;
|
||||
${$v} = $this->bo->date2ts($$v);
|
||||
}
|
||||
$days = 1 + (int) round(($last - $first) / DAY_s); // we have to use round to get the right number if daylight saving changes
|
||||
if ($days >= 28) // display the month scale
|
||||
if ($by_cat === 'month')
|
||||
{
|
||||
$content .= $this->plannerMonthScale($first,$days,$indent."\t\t\t");
|
||||
$content .= $this->plannerDayOfMonthScale($indent."\t\t\t");
|
||||
}
|
||||
if ($days >= 5) // display the week scale
|
||||
else
|
||||
{
|
||||
$content .= $this->plannerWeekScale($first,$days,$indent."\t\t\t");
|
||||
}
|
||||
$content .= $this->plannerDayScale($first,$days,$indent."\t\t\t"); // day-scale, always displayed
|
||||
if ($days <= 7) // display the hour scale
|
||||
{
|
||||
$content .= $this->plannerHourScale($start,$days,$indent."\t\t\t");
|
||||
$days = 1 + (int) round(($last - $first) / DAY_s); // we have to use round to get the right number if daylight saving changes
|
||||
if ($days >= 28) // display the month scale
|
||||
{
|
||||
$content .= $this->plannerMonthScale($first,$days,$indent."\t\t\t");
|
||||
}
|
||||
if ($days >= 5) // display the week scale
|
||||
{
|
||||
$content .= $this->plannerWeekScale($first,$days,$indent."\t\t\t");
|
||||
}
|
||||
$content .= $this->plannerDayScale($first,$days,$indent."\t\t\t"); // day-scale, always displayed
|
||||
if ($days <= 7) // display the hour scale
|
||||
{
|
||||
$content .= $this->plannerHourScale($start,$days,$indent."\t\t\t");
|
||||
}
|
||||
}
|
||||
$content .= $indent."\t\t</div>\n"; // end of the plannerHeaderRows
|
||||
$content .= $indent."\t</div>\n"; // end of the plannerHeader
|
||||
|
||||
// sort the events after user or category
|
||||
$rows = $sort2label = array();
|
||||
if ($by_cat === false) // planner by user
|
||||
{
|
||||
$sort2label = $this->_get_planner_users();
|
||||
}
|
||||
$rows = array();
|
||||
if (!is_array($events)) $events = array();
|
||||
|
||||
foreach($events as $key => $event)
|
||||
{
|
||||
if ($by_cat === false) // planner by user
|
||||
if ($by_cat === 'user') // planner by user
|
||||
{
|
||||
foreach($event['participants'] as $sort => $status)
|
||||
{
|
||||
@ -1505,6 +1541,16 @@ class calendar_uiviews extends calendar_ui
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($by_cat === 'month') // planner by month / yearly planner
|
||||
{
|
||||
$sort = date('Y-m',$event['start']);
|
||||
$rows[$sort][] =& $events[$key];
|
||||
// end in a different month?
|
||||
if ($sort != ($end_sort = date('Y-m',$event['end'])))
|
||||
{
|
||||
$rows[$end_sort][] =& $events[$key];
|
||||
}
|
||||
}
|
||||
else // planner by cat
|
||||
{
|
||||
foreach($this->_get_planner_cats($event['category'],$sort2label,$sort2color) as $sort)
|
||||
@ -1519,12 +1565,20 @@ class calendar_uiviews extends calendar_ui
|
||||
foreach($sort2label as $sort => $label)
|
||||
{
|
||||
if (!isset($rows[$sort]) && (!$this->cal_prefs['planner_show_empty_rows'] ||
|
||||
$by_cat === false && $this->cal_prefs['planner_show_empty_rows'] == 'cat' ||
|
||||
$by_cat !== false && $this->cal_prefs['planner_show_empty_rows'] == 'user'))
|
||||
$by_cat === 'user' && $this->cal_prefs['planner_show_empty_rows'] == 'cat' ||
|
||||
is_int($by_cat) && $this->cal_prefs['planner_show_empty_rows'] == 'user'))
|
||||
{
|
||||
continue; // dont show empty categories or user rows
|
||||
}
|
||||
$class = $class == 'row_on' ? 'row_off' : 'row_on';
|
||||
if ($by_cat === 'month')
|
||||
{
|
||||
$time = new egw_time($sort.'-01');
|
||||
$start = $time->format('ts');
|
||||
$time->modify('+1month -1second');
|
||||
$end = $time->format('ts');
|
||||
if ($sort == date('Y-m')) $class = 'calToday';
|
||||
}
|
||||
$content .= $this->plannerRowWidget(isset($rows[$sort]) ? $rows[$sort] : array(),$start,$end,$label,$class,$indent."\t");
|
||||
}
|
||||
$content .= $indent."</div>\n"; // end of the plannerWidget
|
||||
@ -1812,6 +1866,29 @@ class calendar_uiviews extends calendar_ui
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates DayOfMonth scale for planner by month
|
||||
*
|
||||
* @param string $indent
|
||||
* @return string
|
||||
*/
|
||||
function plannerDayOfMonthScale($indent)
|
||||
{
|
||||
$day_width = round(100 / 31,2);
|
||||
|
||||
$content .= $indent.'<div class="plannerScale">'."\n";
|
||||
$today = egw_time::to('now','d');
|
||||
for($left = 0,$i = 0; $i < 31; $left += $day_width,++$i)
|
||||
{
|
||||
$class = 1+$i == $today ? 'calToday' : ($i & 1 ? 'row_on' : 'row_off');
|
||||
$content .= $indent."\t".'<div class="plannerDayOfMonthScale '.$class.'" style="left: '.$left.'%; width: '.$day_width.'%;">'.
|
||||
(1+$i)."</div>\n";
|
||||
}
|
||||
$content .= $indent."</div>\n"; // end of plannerScale
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates hour scale for the planner
|
||||
*
|
||||
@ -1935,7 +2012,7 @@ class calendar_uiviews extends calendar_ui
|
||||
if ($time <= $start) return 0; // we are left of our scale
|
||||
if ($time >= $end) return 100; // we are right of our scale
|
||||
|
||||
if ($this->planner_days)
|
||||
if ($this->planner_days || $this->sortby == 'month')
|
||||
{
|
||||
$percent = ($time - $start) / ($end - $start);
|
||||
}
|
||||
|
@ -99,7 +99,6 @@ displayed view calendar de Ansicht
|
||||
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar de Soll Ihre Standard-Kalender-Ansicht auf der Startseite angezeigt werden (die Seite die sich nach dem Login öffnet oder wenn Sie auf Home klicken)?
|
||||
do not include events of group members calendar de Zeige nicht die Termine der Gruppenmitglieder
|
||||
do you want a weekview with or without weekend? calendar de Wollen Sie eine Wochenansicht mit oder ohne Wochenende?
|
||||
do you want to be notified about new or changed appointments? you be notified about changes you make yourself.<br>you can limit the notifications to certain changes only. each item includes all the notification listed above it. all modifications include changes of title, description, participants, but no participant responses. if the owner of an event requested any notifcations, he will always get the participant responses like acceptions and rejections too. calendar de Wollen Sie über neue oder geänderte Termine benachrichtigt werden? Sie werden nie über eigene Änderungen benachrichtigt.<br>Sie können die Benachrichtigungen auf verschiedene Änderungen begrenzen. Jede Zeile enthält die Benachrichtigungen der darüber liegenden. Alle Änderungen umfasst den Titel, die Beschreibung, Teilnehmer, aber keine Antworten der Teilnehmer. Wenn der Ersteller eines Termins irgendeine Benachrichtigung will, erhält er automatisch auch die Antworten der Teilnehmer, wie Zusagen oder Absagen.
|
||||
do you want to edit serialevent als exception? - ok = edit exception, abort = edit serial calendar de Möchten Sie den Termin der Serie als Ausnahme bearbeiten? Klicken Sie OK um den Termin als Einzeltermin (Ausnahme) zu bearbeiten, Abbrechen um die Terminserie zu verändern.
|
||||
do you want to receive a regulary summary of your appointsments via email?<br>the summary is sent to your standard email-address on the morning of that day or on monday for weekly summarys.<br>it is only sent when you have any appointments on that day or week. calendar de Möchten Sie eine regelmäßige Zusammenfassung Ihrer Termine via E-Mail erhalten?<br>Die Zusammenfassung wird täglich (jeden Morgen), oder für eine wöchentliche Zusammenfassung Montags an Ihre standard E-Mail Adresse gesendet.<br> Die Benachrichtigung wird nur versendet wenn Sie am nächsten Tag oder in der nächsten Woche auch einen Termin haben.
|
||||
do you wish to autoload calendar holidays files dynamically? admin de Sollen die Feiertage automatisch geladen werden?
|
||||
@ -207,6 +206,7 @@ make freebusy information available to not loged in persons? calendar de Die Bel
|
||||
minutes calendar de Minuten
|
||||
modified calendar de Geändert
|
||||
mon calendar de Mo
|
||||
month calendar de Monat
|
||||
monthly calendar de Monatlich
|
||||
monthly (by date) calendar de Monatlich (nach Datum)
|
||||
monthly (by day) calendar de Monatlich (nach Wochentag)
|
||||
@ -393,6 +393,7 @@ work day starts on calendar de Arbeitstag beginnt um
|
||||
workday calendar de Arbeitstag
|
||||
workdays calendar de Arbeitstage
|
||||
yearly calendar de Jährlich
|
||||
yearly planner calendar de Jahresplaner
|
||||
yearview calendar de Jahresansicht
|
||||
you are not allowed to book the resource selected: calendar de Sie sind nicht berechtigt die ausgewählte Ressource zu buchen.
|
||||
you can either set a year or a occurence, not both !!! calendar de Sie können nur entweder das Jahr oder die Wiederholung angeben, nicht beides!
|
||||
|
@ -207,6 +207,7 @@ make freebusy information available to not loged in persons? calendar en Make Fr
|
||||
minutes calendar en Minutes
|
||||
modified calendar en Modified
|
||||
mon calendar en Mon
|
||||
month calendar en Month
|
||||
monthly calendar en Monthly
|
||||
monthly (by date) calendar en Monthly (by date)
|
||||
monthly (by day) calendar en Monthly (by day)
|
||||
@ -393,6 +394,7 @@ work day starts on calendar en Work day starts on
|
||||
workday calendar en Work day
|
||||
workdays calendar en Work days
|
||||
yearly calendar en Yearly
|
||||
yearly planner calendar en Yearly planner
|
||||
yearview calendar en Year view
|
||||
you are not allowed to book the resource selected: calendar en You are not allowed to book the resource selected:
|
||||
you can either set a year or a occurence, not both !!! calendar en You can either set a Year or a Occurrence, not both !!!
|
||||
|
@ -367,7 +367,7 @@ e.g. the div with class calTimeGrid is generated by the timeGridWidget method of
|
||||
|
||||
/* plannerScale represents a scale-row of the plannerHeader, containing multiple planner{Day|Week|Month}Scales
|
||||
*/
|
||||
.plannerScale,.plannerScaleDay{
|
||||
.plannerScale,.plannerScaleDay {
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0%;
|
||||
@ -379,7 +379,7 @@ e.g. the div with class calTimeGrid is generated by the timeGridWidget method of
|
||||
height: 28px;
|
||||
line-height: 14px;
|
||||
}
|
||||
.plannerDayScale,.plannerMonthScale,.plannerWeekScale,.plannerHourScale {
|
||||
.plannerDayScale,.plannerMonthScale,.plannerWeekScale,.plannerHourScale,.plannerDayOfMonthScale {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
/* left+width: is set by the code on runtime */
|
||||
@ -403,7 +403,7 @@ e.g. the div with class calTimeGrid is generated by the timeGridWidget method of
|
||||
.plannerMonthScale {
|
||||
font-weight: bold;
|
||||
}
|
||||
.plannerDayScale img,.plannerWeekScale img,.plannerMonthScale img {
|
||||
.plannerDayScale img,.plannerWeekScale img,.plannerMonthScale img,.plannerDayOfMonthScale img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user