merged contacts_and_resources branch again with HEAD

all further development will be in HEAD now
everyone using the contacts_and_resources branch, update again to HEAD with: cvs update -dPA calendar
This commit is contained in:
Ralf Becker 2005-11-08 23:15:14 +00:00
parent cd102084d5
commit 439d23490d
259 changed files with 8342 additions and 21341 deletions

View File

@ -1,60 +1,58 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar: CSV - Import *
* http://www.egroupware.org *
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - Calendar: CSV - Import *
* http://www.egroupware.org *
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
$GLOBALS['phpgw_info']['flags'] = array(
$GLOBALS['egw_info']['flags'] = array(
'currentapp' => 'calendar',
'noheader' => True
);
include('../header.inc.php');
if (!isset($GLOBALS['phpgw_info']['user']['apps']['admin']) ||
!$GLOBALS['phpgw_info']['user']['apps']['admin']) // no admin
{
$GLOBALS['phpgw']->redirect_link('/home.php');
}
$is_admin = isset($GLOBALS['egw_info']['user']['apps']['admin']) && $GLOBALS['egw_info']['user']['apps']['admin'];
if (isset($_FILES['csvfile']['tmp_name']))
{
$csvfile = tempnam($GLOBALS['phpgw_info']['server']['temp_dir'],$GLOBALS['phpgw_info']['flags']['currentapp']."_");
$GLOBALS['phpgw']->session->appsession('csvfile','',$csvfile);
$csvfile = tempnam($GLOBALS['egw_info']['server']['temp_dir'],$GLOBALS['egw_info']['flags']['currentapp']."_");
$GLOBALS['egw']->session->appsession('csvfile','',$csvfile);
$_POST['action'] = move_uploaded_file($_FILES['csvfile']['tmp_name'],$csvfile) ?
'download' : '';
}
else
{
$csvfile = $GLOBALS['phpgw']->session->appsession('csvfile');
$csvfile = $GLOBALS['egw']->session->appsession('csvfile');
}
if ($_POST['cancel'])
{
@unlink($csvfile);
$GLOBALS['phpgw']->redirect_link('/admin/index.php');
$GLOBALS['egw']->redirect_link('/admin/index.php');
}
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['calendar']['title'].' - '.lang('Import CSV-File');
$GLOBALS['phpgw']->common->phpgw_header();
$GLOBALS['egw_info']['flags']['app_header'] = $GLOBALS['egw_info']['apps']['calendar']['title'].' - '.lang('Import CSV-File');
$uical =& CreateObject('calendar.uical',true);
$GLOBALS['egw']->common->egw_header();
$GLOBALS['phpgw']->template->set_file(array('import_t' => 'csv_import.tpl'));
$GLOBALS['phpgw']->template->set_block('import_t','filename','filenamehandle');
$GLOBALS['phpgw']->template->set_block('import_t','fheader','fheaderhandle');
$GLOBALS['phpgw']->template->set_block('import_t','fields','fieldshandle');
$GLOBALS['phpgw']->template->set_block('import_t','ffooter','ffooterhandle');
$GLOBALS['phpgw']->template->set_block('import_t','imported','importedhandle');
$GLOBALS['phpgw']->template->set_block('import_t','import','importhandle');
$GLOBALS['egw']->template->set_file(array('import_t' => 'csv_import.tpl'));
$GLOBALS['egw']->template->set_block('import_t','filename','filenamehandle');
$GLOBALS['egw']->template->set_block('import_t','fheader','fheaderhandle');
$GLOBALS['egw']->template->set_block('import_t','fields','fieldshandle');
$GLOBALS['egw']->template->set_block('import_t','ffooter','ffooterhandle');
$GLOBALS['egw']->template->set_block('import_t','imported','importedhandle');
$GLOBALS['egw']->template->set_block('import_t','import','importhandle');
if(($_POST['action'] == 'download' || $_POST['action'] == 'continue') && (!$_POST['fieldsep'] || !$csvfile || !($fp=fopen($csvfile,'rb'))))
{
$_POST['action'] = '';
}
$GLOBALS['phpgw']->template->set_var("action_url",$GLOBALS['phpgw']->link("/calendar/csv_import.php"));
$GLOBALS['egw']->template->set_var("action_url",$GLOBALS['egw']->link("/calendar/csv_import.php"));
$PSep = '||'; // Pattern-Separator, separats the pattern-replacement-pairs in trans
$ASep = '|>'; // Assignment-Separator, separats pattern and replacesment
@ -64,7 +62,7 @@
function addr_id( $n_family,$n_given,$org_name )
{ // find in Addressbook, at least n_family AND (n_given OR org_name) have to match
$contacts = createobject('phpgwapi.contacts');
$contacts =& CreateObject('phpgwapi.contacts');
$addrs = $contacts->read(0,0,array('id'),'',"n_family=$n_family,n_given=$n_given,org_name=$org_name");
if(!count($addrs))
@ -101,73 +99,68 @@
}
else
{
if (!is_object($GLOBALS['phpgw']->categories))
if (!is_object($GLOBALS['egw']->categories))
{
$GLOBALS['phpgw']->categories = createobject('phpgwapi.categories');
$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories','','calendar');
}
if (is_numeric($cat) && $GLOBALS['phpgw']->categories->id2name($cat) != '--')
if (is_numeric($cat) && $GLOBALS['egw']->categories->id2name($cat) != '--')
{
$cat2id[$cat] = $ids[$cat] = $cat;
}
elseif ($id = $GLOBALS['phpgw']->categories->name2id( addslashes($cat) ))
elseif ($id = $GLOBALS['egw']->categories->name2id( addslashes($cat) ))
{ // cat exists
$cat2id[$cat] = $ids[$cat] = $id;
}
else
{ // create new cat
$GLOBALS['phpgw']->categories->add( array('name' => $cat,'descr' => $cat ));
$cat2id[$cat] = $ids[$cat] = $GLOBALS['phpgw']->categories->name2id( addslashes($cat) );
$GLOBALS['egw']->categories->add( array('name' => $cat,'descr' => $cat ));
$cat2id[$cat] = $ids[$cat] = $GLOBALS['egw']->categories->name2id( addslashes($cat) );
}
}
}
$id_str = implode( ',',$ids );
if (count($ids) > 1) // multiple cats need to be in ','
{
$id_str = ",$id_str,";
}
return $id_str;
return implode( ',',$ids );
}
if (!is_object($GLOBALS['phpgw']->html))
if (!is_object($GLOBALS['egw']->html))
{
$GLOBALS['phpgw']->html = CreateObject('phpgwapi.html');
$GLOBALS['egw']->html =& CreateObject('phpgwapi.html');
}
if ($_POST['next']) $_POST['action'] = 'next';
switch ($_POST['action'])
{
case '': // Start, ask Filename
$GLOBALS['phpgw']->template->set_var('lang_csvfile',lang('CSV-Filename'));
$GLOBALS['phpgw']->template->set_var('lang_fieldsep',lang('Fieldseparator'));
$GLOBALS['phpgw']->template->set_var('lang_charset',lang('Charset of file'));
$GLOBALS['phpgw']->template->set_var('select_charset',
$GLOBALS['phpgw']->html->select('charset','',
$GLOBALS['phpgw']->translation->get_installed_charsets()+
$GLOBALS['egw']->template->set_var('lang_csvfile',lang('CSV-Filename'));
$GLOBALS['egw']->template->set_var('lang_fieldsep',lang('Fieldseparator'));
$GLOBALS['egw']->template->set_var('lang_charset',lang('Charset of file'));
$GLOBALS['egw']->template->set_var('lang_help',lang('Please note: You can configure the field assignments AFTER you uploaded the file.'));
$GLOBALS['egw']->template->set_var('select_charset',
$GLOBALS['egw']->html->select('charset','',
$GLOBALS['egw']->translation->get_installed_charsets()+
array('utf-8' => 'utf-8 (Unicode)'),True));
$GLOBALS['phpgw']->template->set_var('fieldsep',$_POST['fieldsep'] ? $_POST['fieldsep'] : ',');
$GLOBALS['phpgw']->template->set_var('submit',lang('Import'));
$GLOBALS['phpgw']->template->set_var('enctype','ENCTYPE="multipart/form-data"');
$GLOBALS['egw']->template->set_var('fieldsep',$_POST['fieldsep'] ? $_POST['fieldsep'] : ';');
$GLOBALS['egw']->template->set_var('submit',lang('Import'));
$GLOBALS['egw']->template->set_var('enctype','ENCTYPE="multipart/form-data"');
$GLOBALS['phpgw']->template->parse('rows','filename');
$GLOBALS['egw']->template->parse('rows','filename');
break;
case 'continue':
case 'download':
$GLOBALS['phpgw']->preferences->read_repository();
$defaults = $GLOBALS['phpgw_info']['user']['preferences']['calendar']['cvs_import'];
$GLOBALS['egw']->preferences->read_repository();
$defaults = $GLOBALS['egw_info']['user']['preferences']['calendar']['cvs_import'];
if (!is_array($defaults))
{
$defaults = array();
}
$GLOBALS['phpgw']->template->set_var('lang_csv_fieldname',lang('CSV-Fieldname'));
$GLOBALS['phpgw']->template->set_var('lang_info_fieldname',lang('calendar-Fieldname'));
$GLOBALS['phpgw']->template->set_var('lang_translation',lang("Translation").' <a href="#help">'.lang('help').'</a>');
$GLOBALS['phpgw']->template->set_var('submit',
$GLOBALS['phpgw']->html->submit_button('convert','Import') . '&nbsp;'.
$GLOBALS['phpgw']->html->submit_button('cancel','Cancel'));
$GLOBALS['phpgw']->template->set_var('lang_debug',lang('Test Import (show importable records <u>only</u> in browser)'));
$GLOBALS['phpgw']->template->parse('rows','fheader');
$GLOBALS['egw']->template->set_var('lang_csv_fieldname',lang('CSV-Fieldname'));
$GLOBALS['egw']->template->set_var('lang_info_fieldname',lang('calendar-Fieldname'));
$GLOBALS['egw']->template->set_var('lang_translation',lang("Translation").' <a href="#help">'.lang('help').'</a>');
$GLOBALS['egw']->template->set_var('submit',
$GLOBALS['egw']->html->submit_button('convert','Import') . '&nbsp;'.
$GLOBALS['egw']->html->submit_button('cancel','Cancel'));
$GLOBALS['egw']->template->set_var('lang_debug',lang('Test Import (show importable records <u>only</u> in browser)'));
$GLOBALS['egw']->template->parse('rows','fheader');
$cal_names = array(
'title' => 'Title varchar(80)',
@ -180,18 +173,18 @@
'priority' => 'Priority: 1=Low, 2=Normal, 3=High',
'public' => 'Access: 1=public, 0=private',
'owner' => 'Owner: int(11) user-id/-name',
'modtime' => 'Modification date',
// 'groups' => 'Groups (dont know what this field is for)',
// 'cal_type' => 'cal_type: single_event=E (default) else M',
'modified' => 'Modification date',
'non_blocking' => '0=Event blocks time, 1=Event creates no conflicts',
'uid' => 'Unique Id, allows multiple import to update identical entries',
// 'recur_type'=> 'Type of recuring event',
);
$custom_fields = CreateObject('calendar.bocustom_fields');
$config =& CreateObject('phpgwapi.config','calendar');
$custom_fields = $config->read_repository();
unset($config);
//echo "custom-fields=<pre>".print_r($custom_fields,True)."</pre>";
foreach ($custom_fields->fields as $name => $data)
foreach ($custom_fields as $name => $data)
{
if ($name[0] == '#') // a custom field ?
{
$cal_names[$name] = $data['name'].': Custom field, varchar('.$data['length'].')';
}
$cal_names['#'.$name] = $data['label'].': Custom field ('.$data['type'].')';
}
// the next line is used in the help-text too
@ -200,41 +193,41 @@
$cal_name_options = "<option value=\"\">none\n";
foreach($cal_names as $field => $name)
{
$cal_name_options .= "<option value=\"$field\">".$GLOBALS['phpgw']->strip_html($name)."\n";
$cal_name_options .= "<option value=\"$field\">".$GLOBALS['egw']->strip_html($name)."\n";
}
$csv_fields = fgetcsv($fp,8000,$_POST['fieldsep']);
$csv_fields = $GLOBALS['phpgw']->translation->convert($csv_fields,$_POST['charset']);
$csv_fields = $GLOBALS['egw']->translation->convert($csv_fields,$_POST['charset']);
$csv_fields[] = 'no CSV 1'; // eg. for static assignments
$csv_fields[] = 'no CSV 2';
$csv_fields[] = 'no CSV 3';
foreach($csv_fields as $csv_idx => $csv_field)
{
$GLOBALS['phpgw']->template->set_var('csv_field',$csv_field);
$GLOBALS['phpgw']->template->set_var('csv_idx',$csv_idx);
$GLOBALS['egw']->template->set_var('csv_field',$csv_field);
$GLOBALS['egw']->template->set_var('csv_idx',$csv_idx);
if ($def = $defaults[$csv_field])
{
list( $info,$trans ) = explode($PSep,$def,2);
$GLOBALS['phpgw']->template->set_var('trans',$trans);
$GLOBALS['phpgw']->template->set_var('cal_fields',str_replace('="'.$info.'">','="'.$info.'" selected>',$cal_name_options));
$GLOBALS['egw']->template->set_var('trans',$trans);
$GLOBALS['egw']->template->set_var('cal_fields',str_replace('="'.$info.'">','="'.$info.'" selected>',$cal_name_options));
}
else
{
$GLOBALS['phpgw']->template->set_var('trans','');
$GLOBALS['phpgw']->template->set_var('cal_fields',$cal_name_options);
$GLOBALS['egw']->template->set_var('trans','');
$GLOBALS['egw']->template->set_var('cal_fields',$cal_name_options);
}
$GLOBALS['phpgw']->template->parse('rows','fields',True);
$GLOBALS['egw']->template->parse('rows','fields',True);
}
$GLOBALS['phpgw']->template->set_var('lang_start',lang('Startrecord'));
$GLOBALS['phpgw']->template->set_var('start',get_var('start',array('POST'),1));
$GLOBALS['egw']->template->set_var('lang_start',lang('Startrecord'));
$GLOBALS['egw']->template->set_var('start',get_var('start',array('POST'),1));
$msg = ($safe_mode = ini_get('safe_mode') == 'On') ? lang('to many might exceed your execution-time-limit'):
lang('empty for all');
$GLOBALS['phpgw']->template->set_var('lang_max',lang('Number of records to read (%1)',$msg));
$GLOBALS['phpgw']->template->set_var('max',get_var('max',array('POST'),$safe_mode ? 200 : ''));
$GLOBALS['phpgw']->template->set_var('debug',get_var('debug',array('POST'),True)?' checked':'');
$GLOBALS['phpgw']->template->parse('rows','ffooter',True);
$GLOBALS['egw']->template->set_var('lang_max',lang('Number of records to read (%1)',$msg));
$GLOBALS['egw']->template->set_var('max',get_var('max',array('POST'),$safe_mode ? 200 : ''));
$GLOBALS['egw']->template->set_var('debug',get_var('debug',array('POST'),True)?' checked':'');
$GLOBALS['egw']->template->parse('rows','ffooter',True);
fclose($fp);
$hiddenvars = $GLOBALS['phpgw']->html->input_hidden(array(
$hiddenvars = $GLOBALS['egw']->html->input_hidden(array(
'action' => 'import',
'fieldsep'=> $_POST['fieldsep'],
'charset' => $_POST['charset']
@ -247,8 +240,8 @@
"First example: <b>1${ASep}private${PSep}public</b><br>".
"This will translate a '1' in the CVS field to 'privat' and everything else to 'public'.<p>".
"Patterns as well as the replacement can be regular expressions (the replacement is done via ereg_replace). ".
"If, after all replacements, the value starts with an '@' the whole value is eval()'ed, so you ".
"may use all php, phpgw plus your own functions. This is quiet powerfull, but <u>circumvents all ACL</u>.<p>".
"If, after all replacements, the value starts with an '@' AND you have admin rights the whole value is eval()'ed, so you ".
"may use php, eGroupWare or your own functions. This is quiet powerfull, but <u>circumvents all ACL</u>.<p>".
"Example using regular expressions and '@'-eval(): <br><b>$mktime_lotus</b><br>".
"It will read a date of the form '2001-05-20 08:00:00.00000000000000000' (and many more, see the regular expr.). ".
"The&nbsp;[&nbsp;.:-]-separated fields are read and assigned in different order to @mktime(). Please note to use ".
@ -269,9 +262,9 @@
"with the addressbook.<br>".
"<b>@cat_id(Cat1,...,CatN)</b> returns a (','-separated) list with the cat_id's. If a category isn't found, it ".
"will be automaticaly added. This function is automaticaly called if the category is not numerical!<p>".
"I hope that helped to understand the features, if not <a href='mailto:RalfBecker@outdoor-training.de'>ask</a>.";
"I hope that helped to understand the features, if not <a href='mailto:egroupware-users@lists.sf.net'>ask</a>.";
$GLOBALS['phpgw']->template->set_var('help_on_trans',lang($help_on_trans)); // I don't think anyone will translate this
$GLOBALS['egw']->template->set_var('help_on_trans',lang($help_on_trans)); // I don't think anyone will translate this
break;
case 'next':
@ -279,7 +272,7 @@
$_POST['trans'] = unserialize(stripslashes($_POST['trans']));
// fall-through
case 'import':
$hiddenvars = $GLOBALS['phpgw']->html->input_hidden(array(
$hiddenvars = $GLOBALS['egw']->html->input_hidden(array(
'action' => 'continue',
'fieldsep'=> $_POST['fieldsep'],
'charset' => $_POST['charset'],
@ -292,7 +285,7 @@
@set_time_limit(0);
$fp=fopen($csvfile,'r');
$csv_fields = fgetcsv($fp,8000,$_POST['fieldsep']);
$csv_fields = $GLOBALS['phpgw']->translation->convert($csv_fields,$_POST['charset']);
$csv_fields = $GLOBALS['egw']->translation->convert($csv_fields,$_POST['charset']);
$csv_fields[] = 'no CSV 1'; // eg. for static assignments
$csv_fields[] = 'no CSV 2';
$csv_fields[] = 'no CSV 3';
@ -309,11 +302,11 @@
}
}
$GLOBALS['phpgw']->preferences->read_repository();
$GLOBALS['phpgw']->preferences->add('calendar','cvs_import',$defaults);
$GLOBALS['phpgw']->preferences->save_repository(True);
$GLOBALS['egw']->preferences->read_repository();
$GLOBALS['egw']->preferences->add('calendar','cvs_import',$defaults);
$GLOBALS['egw']->preferences->save_repository(True);
$log = "<table border=1>\n\t<tr><td>#</td>\n";
$log = '<table border="1" style="border: 1px dotted black; border-collapse: collapse;">'."\n\t<tr><td>#</td>\n";
foreach($cal_fields as $csv_idx => $info)
{ // convert $trans[$csv_idx] into array of pattern => value
@ -342,12 +335,12 @@
{
$log .= "\t\t<td><b>isPublic</b></td>\n";
}
/* maybe later ;-)
if (!in_array('cal_type',$cal_fields)) // autocreate single event if not set by user
/* if (!in_array('recur_type',$cal_fields)) // autocreate single event if not set by user
{
$log .= "\t\t<td><b>recureing</b></td>\n";
}
*/
}*/
$log .= "\t\t<td><b>Imported</b></td>\n\t</tr>\n";
$start = $_POST['start'] < 1 ? 1 : $_POST['start'];
// ignore empty lines, is_null($fields[0]) is returned on empty lines !!!
@ -362,9 +355,9 @@
{
break; // EOF
}
$fields = $GLOBALS['phpgw']->translation->convert($fields,$_POST['charset']);
$fields = $GLOBALS['egw']->translation->convert($fields,$_POST['charset']);
$log .= "\t</tr><tr><td>".($start+$anz)."</td>\n";
$log .= "\t<tr>\n\t\t<td>".($start+$anz)."</td>\n";
$values = array();
foreach($cal_fields as $csv_idx => $info)
@ -387,7 +380,7 @@
$val = str_replace($CPre.$vars[1].$CPos,$val[0] == '@' ? "'".addslashes($fields[array_search($vars[1],$csv_fields)])."'" : $fields[array_search($vars[1],$csv_fields)],$val);
}
//echo "='$val'</p>";
if ($val[0] == '@')
if ($val[0] == '@' && is_admin)
{
// removing the $ to close security hole of showing vars, which contain eg. passwords
$val = 'return '.substr(str_replace('$','',$val),1).';';
@ -409,37 +402,23 @@
$values['public'] = 1; // public access if not set by user
$log .= "\t\t<td>".$values['public']."</td>\n";
}
/* maybe later ;-)
if (!in_array('cal_type',$cal_fields))
if (!in_array('recur_type',$cal_fields))
{
$values['cal_type'] = 'E'; // single event if not set by user
$log .= "\t\t<td>".$values['cal_type']."</td>\n";
$values['recur_type'] = MCAL_RECUR_NONE; // single event if not set by user
// $log .= "\t\t<td>".$values['recure_type']."</td>\n";
}
*/
if(!$_POST['debug'] && count($values)) // dont import empty contacts
{
//echo "values=<pre>".print_r($values,True)."</pre>\n";
if (!is_numeric($values['owner']))
{
$values['owner'] = $GLOBALS['phpgw']->accounts->name2id($values['owner']);
$values['owner'] = $GLOBALS['egw']->accounts->name2id($values['owner']);
}
if (!$values['owner'] || !$GLOBALS['phpgw']->accounts->exists($values['owner']))
if (!$values['owner'] || !$GLOBALS['egw']->accounts->exists($values['owner']))
{
$values['owner'] = $GLOBALS['phpgw_info']['user']['account_id'];
$values['owner'] = $GLOBALS['egw_info']['user']['account_id'];
}
if (!is_object($calendar))
{
$calendar = createobject('calendar.socalendar',array());
$cal_owner = False;
}
if ($cal_owner != $values['owner'])
{
$calendar->open_box($cal_owner = $values['owner']);
}
// echo "<p>adding: ".dump_array($values)."</p>\n";
$calendar->event_init(); // set some reasonable defaults
$calendar->set_recur_none();
if ($values['priority'] < 1 || $values['priority'] > 3)
{
$values['priority'] = 2;
@ -453,14 +432,9 @@
{
$values['title'] = '('.lang('none').')';
}
foreach(array('owner','title','description','location','category','priority','public') as $name)
{
$calendar->add_attribute($name,$values[$name]);
}
if (!isset($values['modtime'])) $values['modtime'] = $values['start'];
// convert dates to timestamps
foreach(array('start','end','modtime') as $date)
foreach(array('start','end','modified') as $date)
{
if (isset($values[$date]) && !is_numeric($date))
{
@ -470,58 +444,64 @@
if (ereg('(.*)\.[0-9]+',$values[$date],$parts)) $values[$date] = $parts[1];
$values[$date] = strtotime($values[$date]);
}
$datearr = $GLOBALS['phpgw']->datetime->localdates($values[$date]);
$calendar->set_date($date,$datearr['year'],$datearr['month'],$datearr['day'],
$datearr['hour'],$datearr['minute'],$datearr['second']);
}
// convert participants-names to user-id's
$participants = 0;
foreach(split('[,;]',$values['participants']) as $part_status)
$parts = $values['participants'] ? split('[,;]',$values['participants']) : array();
$values['participants'] = array();
foreach($parts as $part_status)
{
list($part,$status) = explode('=',$part_status);
$valid_status = array('U'=>'U','u'=>'U','A'=>'A','a'=>'A','R'=>'R','r'=>'R','T'=>'T','t'=>'T');
$status = isset($valid_status[$status]) ? $valid_status[$status] : 'U';
if ($GLOBALS['phpgw']->accounts->exists($part))
if ($GLOBALS['egw']->accounts->exists($part))
{
$part = $GLOBALS['phpgw']->accounts->name2id($part);
$part = $GLOBALS['egw']->accounts->name2id($part);
}
if ($part && is_numeric($part))
{
$calendar->add_attribute('participants',$status,$part);
$participants++;
$values['participants'][$part] = $status;
}
}
if (!$participants) // no valid participants so far --> add the importing user/owner
if (!count($values['participants'])) // no valid participants so far --> add the importing user/owner
{
$calendar->add_attribute('participants','A',$values['owner']);
$values['participants'][$values['owner']] = 'A';
}
// add custom-fields
foreach($values as $name => $val)
if ($values['uid'])
{
if ($name[0] == '#')
if (is_numeric($values['uid'])) // to not conflict with our own id's
{
$calendar->add_attribute($name,$values[$name]);
$values['uid'] = 'cal-csv-import-'.$values['uid'].'-'.$GLOBALS['egw_info']['server']['install_id'];
}
if (($event = $uical->bo->read($values['uid'],null,$is_admin))) // no ACL check for admins
{
//echo "updating existing event"; _debug_array($event);
$values['id'] = $event['id'];
}
}
//echo "add_entry(<pre>".print_r($calendar->cal->event,True).")</pre>\n";
$calendar->add_entry( $calendar->cal->event );
$action = $values['id'] ? 'updating' : 'adding';
//echo $action.'<pre>'.print_r($values,True)."</pre>\n";
$cal_id = $uical->bo->update($values,true,!$values['modified'],$is_admin); // ignoring conflicts and ACL (for admins) on import
$log .= "\t\t".'<td align="center">'.($cal_id ? $action." cal_id=$cal_id" : 'Error '.$action)."</td>\n\t</tr>\n";
}
else
{
$log .= "\t\t".'<td align="center">only test</td>'."\n\t</tr>\n";
}
}
$log .= "\t</tr>\n</table>\n";
$log .= "</table>\n";
$GLOBALS['phpgw']->template->set_var('anz_imported',($_POST['debug'] ?
$GLOBALS['egw']->template->set_var('anz_imported',($_POST['debug'] ?
lang('%1 records read (not yet imported, you may go back and uncheck Test Import)',
$anz,'','') :
lang('%1 records imported',$anz)). '&nbsp;'.
(!$_POST['debug'] && $fields ? $GLOBALS['phpgw']->html->submit_button('next','Import next set') . '&nbsp;':'').
$GLOBALS['phpgw']->html->submit_button('continue','Back') . '&nbsp;'.
$GLOBALS['phpgw']->html->submit_button('cancel','Cancel'));
$GLOBALS['phpgw']->template->set_var('log',$log);
$GLOBALS['phpgw']->template->parse('rows','imported');
(!$_POST['debug'] && $fields ? $GLOBALS['egw']->html->submit_button('next','Import next set') . '&nbsp;':'').
$GLOBALS['egw']->html->submit_button('continue','Back') . '&nbsp;'.
$GLOBALS['egw']->html->submit_button('cancel','Cancel'));
$GLOBALS['egw']->template->set_var('log',$log);
$GLOBALS['egw']->template->parse('rows','imported');
break;
}
$GLOBALS['phpgw']->template->set_var('hiddenvars',str_replace('{','&#x7B;',$hiddenvars));
$GLOBALS['phpgw']->template->pfp('phpgw_body','import');
$GLOBALS['phpgw']->common->phpgw_footer();
?>
$GLOBALS['egw']->template->set_var('hiddenvars',str_replace('{','&#x7B;',$hiddenvars));
$GLOBALS['egw']->template->pfp('phpgw_body','import');
$GLOBALS['egw']->common->egw_footer();

View File

@ -17,17 +17,50 @@
Header('Location: '.$send_back_to);
}
function _holiday_cmp($a,$b)
{
if (($year_diff = ($a['occurence'] <= 0 ? 0 : $a['occurence']) - ($b['occurence'] <= 0 ? 0 : $b['occurence'])))
{
return $year_diff;
}
return $a['month'] - $b['month'] ? $a['month'] - $b['month'] : $a['day'] - $b['day'];
}
$send_back_to = str_replace('&locale='.$_POST['locale'],'',$send_back_to);
$file = './holidays.'.$_POST['locale'].'.csv';
if(!file_exists($file))
if(!file_exists($file) || filesize($file) < 300) // treat very small files as not existent
{
if (count($_POST['name']))
{
$c_holidays = count($_POST['name']);
$fp = fopen($file,'w');
for($i=0;$i<$c_holidays;$i++)
if ($_POST['charset']) fwrite($fp,"charset\t".$_POST['charset']."\n");
$holidays = array();
foreach($_POST['name'] as $i => $name)
{
fwrite($fp,$_POST['locale']."\t".$_POST['name'][$i]."\t".$_POST['day'][$i]."\t".$_POST['month'][$i]."\t".$_POST['occurence'][$i]."\t".$_POST['dow'][$i]."\t".$_POST['observance'][$i]."\n");
$holidays[] = array(
'locale' => $_POST['locale'],
'name' => str_replace('\\','',$name),
'day' => $_POST['day'][$i],
'month' => $_POST['month'][$i],
'occurence' => $_POST['occurence'][$i],
'dow' => $_POST['dow'][$i],
'observance_rule' => $_POST['observance'][$i],
);
}
// sort holidays by year / occurence:
usort($holidays,'_holiday_cmp');
$last_year = -1;
foreach($holidays as $holiday)
{
$year = $holiday['occurence'] <= 0 ? 0 : $holiday['occurence'];
if ($year != $last_year)
{
fwrite($fp,"\n".($year ? $year : 'regular (year=0)').":\n");
$last_year = $year;
}
fwrite($fp,"$holiday[locale]\t$holiday[name]\t$holiday[day]\t$holiday[month]\t$holiday[occurence]\t$holiday[dow]\t$holiday[observance_rule]\n");
}
fclose($fp);
}

View File

@ -1,3 +1,4 @@
charset iso-8859-1
AT Neujahr 1 1 0 0 0
AT Hl. Drei Könige 6 1 0 0 0
AT Ostersonntag 27 3 2005 0 0

1 AT charset iso-8859-1 Neujahr 1 1 0 0 0
1 charset iso-8859-1
2 AT AT Neujahr 1 1 0 0 0 Neujahr 1 1 0 0 0
3 AT AT Hl. Drei Könige 6 1 0 0 0 Hl. Drei Könige 6 1 0 0 0
4 AT AT Ostersonntag 27 3 2005 0 0 Ostersonntag 27 3 2005 0 0

View File

@ -1,3 +1,5 @@
charset iso-8859-1
CH Neujahr 1 1 0 0 0
CH Berchtoldstag (kantonal) 2 1 0 0 0
CH Basler Fasnacht 11 2 2008 0 0

1 CH charset iso-8859-1 Neujahr 1 1 0 0 0
1 charset iso-8859-1
2 CH Neujahr 1 1 0 0 0
3 CH CH Berchtoldstag (kantonal) 2 1 0 0 0 Neujahr 1 1 0 0 0
4 CH CH Basler Fasnacht 11 2 2008 0 0 Berchtoldstag (kantonal) 2 1 0 0 0
5 CH CH Basler Fasnacht 14 2 2005 0 0 Basler Fasnacht 11 2 2008 0 0

View File

@ -1,3 +1,5 @@
charset iso-8859-1
Regelmässig:
DE Sylvester 31 12 0 0 0
DE Neujahr 1 1 0 0 0

1 Regelmässig: charset iso-8859-1
1 charset iso-8859-1
2 Regelmässig:
3 Regelmässig: DE Sylvester 31 12 0 0 0
4 DE Sylvester 31 12 0 0 0 DE Neujahr 1 1 0 0 0
5 DE Neujahr 1 1 0 0 0 DE Hl. Drei Könige (Bw,By,St) 6 1 0 0 0

View File

@ -1,3 +1,4 @@
charset iso-8859-1
DK Nyt蚌sdag 1 1 0 0 0
DK Palmes<65>dag 20 3 2005 0 0
DK Sk誡torsdag 24 3 2005 0 0

1 DK charset iso-8859-1 Nyt蚌sdag 1 1 0 0 0
1 charset iso-8859-1
2 DK DK Nyt蚌sdag 1 1 0 0 0 Nyt蚌sdag 1 1 0 0 0
3 DK DK Palmes�dag 20 3 2005 0 0 Palmes�dag 20 3 2005 0 0
4 DK DK Sk誡torsdag 24 3 2005 0 0 Sk誡torsdag 24 3 2005 0 0

View File

@ -1,3 +1,4 @@
charset iso-8859-1
ES Año Nuevo 1 1 0 0 0
ES Epifanía del Señor 6 1 0 0 0
ES San Jose 19 3 2004 0 0

1 ES charset iso-8859-1 Año Nuevo 1 1 0 0 0
1 charset iso-8859-1
2 ES ES Año Nuevo 1 1 0 0 0 Año Nuevo 1 1 0 0 0
3 ES ES Epifanía del Señor 6 1 0 0 0 Epifanía del Señor 6 1 0 0 0
4 ES ES San Jose 19 3 2004 0 0 San Jose 19 3 2004 0 0

View File

@ -1,3 +1,4 @@
charset utf-8
FI Uudenvuodenpäivä 1 1 0 0 0
FI Loppiainen 6 1 0 0 0
FI Pitkäperjantai 9 4 2004 0 0

1 FI charset utf-8 Uudenvuodenpäivä 1 1 0 0 0
1 charset utf-8
2 FI FI Uudenvuodenpäivä 1 1 0 0 0 Uudenvuodenpäivä 1 1 0 0 0
3 FI FI Loppiainen 6 1 0 0 0 Loppiainen 6 1 0 0 0
4 FI FI Pitkäperjantai 9 4 2004 0 0 Pitkäperjantai 9 4 2004 0 0

View File

@ -1,3 +1,4 @@
charset iso-8859-1
FR Jour de l'an 1 1 0 0 0
FR Lundi de Pâques 24 3 2008 0 0
FR Lundi de Pâques 28 3 2005 0 0

1 FR charset iso-8859-1 Jour de l'an 1 1 0 0 0
1 charset iso-8859-1
2 FR FR Jour de l'an 1 1 0 0 0 Jour de l'an 1 1 0 0 0
3 FR FR Lundi de Pâques 24 3 2008 0 0 Lundi de Pâques 24 3 2008 0 0
4 FR FR Lundi de Pâques 28 3 2005 0 0 Lundi de Pâques 28 3 2005 0 0

View File

@ -1,15 +1,16 @@
IT;Capodanno;1;1;0;0;0
IT;Epifania;6;1;0;0;0
IT;Pasqua;27;3;2005;0;0
IT;Lunedì di Pasqua;28;3;2005;0;0
IT;Pasqua;12;4;2004;0;0
IT;Lunedì di Pasqua;13;4;2004;0;0
IT;Liberazione;25;4;0;0;0
IT;Festa del Lavoro;1;5;0;0;0
IT;Pentecoste;15;5;2005;0;0
IT;Festa della Repubblica;2;6;0;0;0
IT;Ferragosto;15;8;0;0;0
IT;Ognisanti;1;11;0;0;0
IT;Festa dell'Immacolata;8;12;0;0;0
IT;Natale;25;12;0;0;0
IT;S. Stefano;26;12;0;0;0
charset iso-8859-1
IT Capodanno 1 1 0 0 0
IT Epifania 6 1 0 0 0
IT Pasqua 27 3 2005 0 0
IT Luned<65>di Pasqua 28 3 2005 0 0
IT Pasqua 12 4 2004 0 0
IT Luned<65>di Pasqua 13 4 2004 0 0
IT Liberazione 25 4 0 0 0
IT Festa del Lavoro 1 5 0 0 0
IT Pentecoste 15 5 2005 0 0
IT Festa della Repubblica 2 6 0 0 0
IT Ferragosto 15 8 0 0 0
IT Ognisanti 1 11 0 0 0
IT Festa dell'Immacolata 8 12 0 0 0
IT Natale 25 12 0 0 0
IT S. Stefano 26 12 0 0 0

1 IT charset iso-8859-1 Capodanno 1 1 0 0 0
2 IT IT Capodanno 1 1 0 0 0 Epifania 6 1 0 0 0
3 IT IT Epifania 6 1 0 0 0 Pasqua 27 3 2005 0 0
4 IT IT Pasqua 27 3 2005 0 0 Lunedì di Pasqua 28 3 2005 0 0
5 IT IT Luned�di Pasqua 28 3 2005 0 0 Pasqua 12 4 2004 0 0
6 IT IT Pasqua 12 4 2004 0 0 Lunedì di Pasqua 13 4 2004 0 0
7 IT IT Luned�di Pasqua 13 4 2004 0 0 Liberazione 25 4 0 0 0
8 IT IT Liberazione 25 4 0 0 0 Festa del Lavoro 1 5 0 0 0
9 IT IT Festa del Lavoro 1 5 0 0 0 Pentecoste 15 5 2005 0 0
10 IT IT Pentecoste 15 5 2005 0 0 Festa della Repubblica 2 6 0 0 0
11 IT IT Festa della Repubblica 2 6 0 0 0 Ferragosto 15 8 0 0 0
12 IT IT Ferragosto 15 8 0 0 0 Ognisanti 1 11 0 0 0
13 IT IT Ognisanti 1 11 0 0 0 Festa dell'Immacolata 8 12 0 0 0
14 IT IT Festa dell'Immacolata 8 12 0 0 0 Natale 25 12 0 0 0
15 IT IT Natale 25 12 0 0 0 S. Stefano 26 12 0 0 0
16 IT S. Stefano 26 12 0 0 0

View File

@ -1,3 +1,4 @@
charset iso-8859-1
NL Nieuwjaarsdag 1 1 0 0 0
NL Valentijnsdag 14 2 0 0 0
NL Pasen 23 3 2008 0 0

1 NL charset iso-8859-1 Nieuwjaarsdag 1 1 0 0 0
1 charset iso-8859-1
2 NL NL Nieuwjaarsdag 1 1 0 0 0 Nieuwjaarsdag 1 1 0 0 0
3 NL NL Valentijnsdag 14 2 0 0 0 Valentijnsdag 14 2 0 0 0
4 NL NL Pasen 23 3 2008 0 0 Pasen 23 3 2008 0 0

View File

@ -1,16 +1,30 @@
NO 1. Nyttårsdag 1 1 0 0 0
NO Palmesøndag 9 4 2006 0 0
NO Skjærtorsdag 13 4 2006 0 0
NO Langfredag 14 4 2006 0 0
NO Påskedag 16 4 2006 0 0
NO 2. påskedag 17 4 2006 0 0
NO 1. Mai - Arbeidernes dag (Offentlig Høytidsdag) 1 5 0 0 0
NO Frigjøringsdagen 1945 8 5 0 0 0
NO Grunnlovsdagen 17. mai 17 5 0 0 0
NO Kristi Himmelfartsdag 25 5 2006 0 0
NO Pinsedag 4 6 2006 0 0
NO 2. pinsedag 5 6 2006 0 0
NO Julaften 24 12 0 0 0
NO 1. Juledag 25 12 0 0 0
NO 2. Juledag 26 12 0 0 0
NO Nyttårsaften 31 12 0 0 0
charset iso-8859-1
regular holidays (year=0):
NO Nyttårsdag 1 1 0 0 0
NO 1. mai 1 5 0 0 0
NO 1. juledag 25 12 0 0 0
NO 2. juledag 26 12 0 0 0
2005:
NO Palmesøndag 4 4 2004 0 0
NO Skjærtorsdag 8 4 2004 0 0
NO Langfredag 9 4 2004 0 0
NO 1. påskedag 11 4 2004 0 0
NO 2. påskedag 12 4 2004 0 0
NO Grunnlovsdag 17 5 2004 0 0
NO Kr. himmelfartsdag 20 5 2004 0 0
NO 1. pinsedag 30 5 2004 0 0
NO 2. pinsedag 31 5 2004 0 0
2005:
NO Palmesøndag 20 3 2005 0 0
NO Skjærtorsdag 24 3 2005 0 0
NO Langfredag 25 3 2005 0 0
NO 1. påskedag 27 3 2005 0 0
NO 2. påskedag 28 3 2005 0 0
NO Kr. himmelfartsdag 5 5 2005 0 0
NO 1. pinsedag 15 5 2005 0 0
NO 2. pinsedag 16 5 2005 0 0
NO Grunnlovsdag 17 5 2005 0 0
2006:

1 NO charset iso-8859-1 1. Nyttårsdag 1 1 0 0 0
2 NO regular holidays (year=0): Palmesøndag 9 4 2006 0 0
3 NO NO Nyttårsdag 1 1 0 0 0 Skjærtorsdag 13 4 2006 0 0
4 NO NO 1. mai 1 5 0 0 0 Langfredag 14 4 2006 0 0
5 NO NO 1. juledag 25 12 0 0 0 Påskedag 16 4 2006 0 0
6 NO NO 2. juledag 26 12 0 0 0 2. påskedag 17 4 2006 0 0
7 NO 2005: 1. Mai - Arbeidernes dag (Offentlig Høytidsdag) 1 5 0 0 0
8 NO NO Palmesøndag 4 4 2004 0 0 Frigjøringsdagen 1945 8 5 0 0 0
9 NO NO Skjærtorsdag 8 4 2004 0 0 Grunnlovsdagen 17. mai 17 5 0 0 0
10 NO NO Langfredag 9 4 2004 0 0 Kristi Himmelfartsdag 25 5 2006 0 0
11 NO NO 1. påskedag 11 4 2004 0 0 Pinsedag 4 6 2006 0 0
12 NO NO 2. påskedag 12 4 2004 0 0 2. pinsedag 5 6 2006 0 0
13 NO NO Grunnlovsdag 17 5 2004 0 0 Julaften 24 12 0 0 0
14 NO NO Kr. himmelfartsdag 20 5 2004 0 0 1. Juledag 25 12 0 0 0
15 NO NO 1. pinsedag 30 5 2004 0 0 2. Juledag 26 12 0 0 0
16 NO NO 2. pinsedag 31 5 2004 0 0 Nyttårsaften 31 12 0 0 0
17 2005:
18 NO Palmesøndag 20 3 2005 0 0
19 NO Skjærtorsdag 24 3 2005 0 0
20 NO Langfredag 25 3 2005 0 0
21 NO 1. påskedag 27 3 2005 0 0
22 NO 2. påskedag 28 3 2005 0 0
23 NO Kr. himmelfartsdag 5 5 2005 0 0
24 NO 1. pinsedag 15 5 2005 0 0
25 NO 2. pinsedag 16 5 2005 0 0
26 NO Grunnlovsdag 17 5 2005 0 0
27 2006:
28
29
30

View File

@ -1,210 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <milosch@phpwhere.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
define('PHPGW_ACL_DELETEALARM',PHPGW_ACL_DELETE); // for now
define('PHPGW_ACL_SETALARM',PHPGW_ACL_EDIT);
define('PHPGW_ACL_READALARM',PHPGW_ACL_READ);
class boalarm
{
var $so;
var $cal;
var $cal_id;
var $tz_offset;
var $debug = False;
// var $debug = True;
var $public_functions = array(
'add' => True,
'delete' => True
);
function boalarm()
{
$cal_id = (isset($_POST['cal_id'])?(int)$_POST['cal_id']:'');
if($cal_id)
{
$this->cal_id = $cal_id;
}
$this->bo = CreateObject('calendar.bocalendar',1);
$this->so = CreateObject('calendar.socalendar',1);
$this->tz_offset = $GLOBALS['phpgw']->datetime->tz_offset;
if($this->debug)
{
echo "BO Owner : ".$this->bo->owner."<br>\n";
}
if($this->bo->use_session)
{
$this->save_sessiondata();
}
}
function save_sessiondata()
{
$data = array(
'filter' => $this->bo->filter,
'cat_id' => $this->bo->cat_id,
'owner' => $this->bo->owner,
'year' => $this->bo->year,
'month' => $this->bo->month,
'day' => $this->bo->day
);
$this->bo->save_sessiondata($data);
}
function read_entry($cal_id)
{
return $this->bo->read_entry((int)$cal_id);
}
/*!
@function add
@abstract adds a new alarm to an event
@syntax add(&$event,$time,$login_id)
@param &$event event to add the alarm too
@param $time for the alarm in sec before the starttime of the event
@param $login_id user to alarm
@returns the alarm or False
*/
function add(&$event,$time,$owner)
{
//echo "<p>boalarm::add(event="; print_r($event); ",time=$time,owner=$owner)</p>\n";
if (!$this->check_perms(PHPGW_ACL_SETALARM,$owner) || !($cal_id = $event['id']))
{
return False;
}
$alarm = Array(
'time' => ($etime=$this->bo->maketime($event['start'])) - $time,
'offset' => $time,
'owner' => $owner,
'enabled' => 1
);
$alarm['id'] = $this->so->save_alarm($cal_id,$alarm);
$event['alarm'][$alarm['id']] = $alarm;
$event['alarm'][$alarm['id']]['time'] = $alarm['time'] - $this->tz_offset; // allows viewing alarm time in users timezone
return $alarm;
}
/*!
@function check_perms
@abstract checks if user has a certain grant from the owner of an alarm or event
@syntax check_perms($grant,$owner)
@param $grant PHPGW_ACL_{SET|READ|DELETE}ALARM (defined at the top of this file)
*/
function check_perms($grant,$owner)
{
return $this->bo->check_perms($grant,0,$owner);
}
/*!
@function participants
@abstract get the participants of an event, the user has grants to alarm
@syntax participants($event,$fullnames=True)
@param $event or cal_id of an event
@param $fullnames if true return array with fullnames as values
@returns array with account_ids as keys
*/
function participants($event,$fullnames=True)
{
if (!is_array($event))
{
$event = $this->read_entry($event);
}
if (!$event)
{
return False;
}
$participants = array();
foreach ($event['participants'] as $uid => $status)
{
if ($this->check_perms(PHPGW_ACL_SETALARM,$uid))
{
$participants[$uid] = $fullnames ? $GLOBALS['phpgw']->common->grab_owner_name($uid) : True;
}
}
return $participants;
}
/*!
@function enable
@abstract enable or disable one or more alarms identified by its ids
@syntax enable($ids,$enable=True)
@param $ids array with alarm ids as keys (!)
@returns the number of alarms enabled or -1 for insuficent permission to do so
@note Not found alarms or insuficent perms stop the enableing of multiple alarms
*/
function enable($alarms,$enable=True)
{
$enabled = 0;
foreach ($alarms as $id => $field)
{
if (!($alarm = $this->so->read_alarm($id)))
{
return 0; // alarm not found
}
if (!$alarm['enabled'] == !$enable)
{
continue; // nothing to do
}
if ($enable && !$this->check_perms(PHPGW_ACL_SETALARM,$alarm['owner']) ||
!$enable && !$this->check_perms(PHPGW_ACL_DELETEALARM,$alarm['owner']))
{
return -1;
}
$alarm['enabled'] = (int)(!$alarm['enabled']);
if ($this->so->save_alarm($alarm['cal_id'],$alarm))
{
++$enabled;
}
}
return $enabled;
}
/*!
@function delete
@abstract delete one or more alarms identified by its ids
@syntax delete($ids)
@param $ids array with alarm ids as keys (!)
@returns the number of alarms deleted or -1 for insuficent permission to do so
@note Not found alarms or insuficent perms stop the deleting of multiple alarms
*/
function delete($alarms)
{
$deleted = 0;
foreach ($alarms as $id => $field)
{
if (!($alarm = $this->so->read_alarm($id)))
{
return 0; // alarm not found
}
if (!$this->check_perms(PHPGW_ACL_DELETEALARM,$alarm['owner']))
{
return -1;
}
if ($this->so->delete_alarm($id))
{
++$deleted;
}
}
return $deleted;
}
}
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar's "new" BO-layer (buisness-object) access + update *
* eGroupWare - Calendar's buisness-object: access + update *
* http://www.egroupware.org *
* Written and (c) 2005 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
@ -14,31 +14,47 @@
require_once(EGW_INCLUDE_ROOT.'/calendar/inc/class.bocal.inc.php');
// types of messsages send by bocalupdate::send_update
define('MSG_DELETED',0);
define('MSG_MODIFIED',1);
define('MSG_ADDED',2);
define('MSG_REJECTED',3);
define('MSG_TENTATIVE',4);
define('MSG_ACCEPTED',5);
define('MSG_ALARM',6);
define('MSG_DISINVITE',7);
/**
* Class to access AND manipulate all calendar data
*
* Note: All new code should only access this class or bocal and NOT bocalendar!!!
* Class to access AND manipulate all calendar data (business object)
*
* The new UI, BO and SO classes have a strikt definition, in which time-zone they operate:
* UI only operates in user-time, so there have to be no conversation at all !!!
* BO's functions take and return user-time only (!), they convert internaly everything to servertime, because
* SO operates only in server-time (please note, this is not the case with the socalendar*-classes used atm.)
* SO operates only on server-time
*
* As this BO class deals with dates/times of several types and timezone, each variable should have a postfix
* appended, telling with type it is: _s = seconds, _su = secs in user-time, _ss = secs in server-time, _h = hours
*
* All new BO code (should be true for eGW in general) NEVER use any $_REQUEST ($_POST or $_GET) vars itself.
* Nor does it store the state of any UI-elements (eg. cat-id selectbox). All this is the task of the UI class !!!
* Nor does it store the state of any UI-elements (eg. cat-id selectbox). All this is the task of the UI class(es) !!!
*
* All permanent debug messages of the calendar-code should done via the debug-message method of the class !!!
* All permanent debug messages of the calendar-code should done via the debug-message method of the bocal class !!!
*
* @package calendar
* @author RalfBecker@outdoor-training.de
* @license GPL
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2005 by RalfBecker-At-outdoor-training.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class bocalupdate extends bocal
{
var $debug=false;
/**
* @var string/boolean $log_file filename to enable the login or false for no update-logging
*/
var $log_file = false;
/**
* Constructor
*/
@ -47,6 +63,12 @@ class bocalupdate extends bocal
if ($this->debug > 0) $this->debug_message('bocalupdate::bocalupdate() started',True);
$this->bocal(); // calling the parent constructor
if (!is_object($GLOBALS['egw']->link))
{
$GLOBALS['egw']->link =& CreateObject('phpgwapi.bolink');
}
$this->link =& $GLOBALS['egw']->link;
if ($this->debug > 0) $this->debug_message('bocalupdate::bocalupdate() finished',True);
}
@ -57,10 +79,17 @@ class bocalupdate extends bocal
* @param array &$event event-array, on return some values might be changed due to set defaults
* @param boolean $ignore_conflicts=false just ignore conflicts or do a conflict check and return the conflicting events
* @param boolean $touch_modified=true touch modificatin time and set modifing user, default true=yes
* @param boolean $ignore_acl=flase should we ignore the acl
* @return mixed on success: int $cal_id > 0, on error false or array with conflicting events (only if $check_conflicts)
* Please note: the events are not garantied to be readable by the user (no read grant or private)!
*/
function update(&$event,$ignore_conflicts=false,$touch_modified=true)
function update(&$event,$ignore_conflicts=false,$touch_modified=true,$ignore_acl=false)
{
if ($this->debug > 1 || $this->debug == 'update')
{
$this->debug_message('bocalupdate::update(%1,ignore_conflict=%2,touch_modified=%3,ignore_acl=%4)',
false,$event,$ignore_conflicts,$touch_modified,$ignore_acl);
}
// check some minimum requirements:
// - new events need start, end and title
// - updated events cant set start, end or title to empty
@ -84,8 +113,14 @@ class bocalupdate extends bocal
$event['participants'][$this->user] = 'A';
}
}
// check if user has the permission to update / create the event
if (!$ignore_acl && ($event['id'] && !$this->check_perms(EGW_ACL_EDIT,$event['id']) ||
!$event['id'] && !$this->check_perms(EGW_ACL_EDIT,0,$event['owner'])))
{
return false;
}
// check for conflicts only happens !$ignore_conflicts AND if start + end date are given
if (!$ignore_conflicts && $event['non_blocking'] && isset($event['start']) && isset($event['end']))
if (!$ignore_conflicts && !$event['non_blocking'] && isset($event['start']) && isset($event['end']))
{
$types_with_quantity = array();
foreach($this->resources as $type => $data)
@ -108,12 +143,24 @@ class bocalupdate extends bocal
'start' => $event['start'],
'end' => $event['end'],
'users' => $users,
'query' => array('cal_non_blocking != 1'), // ignore non-blocking events
'ignore_acl' => true, // otherwise we get only events readable by the user
));
if ($this->debug > 2 || $this->debug == 'update')
{
$this->debug_message('bocalupdate::update() checking for potential overlapping events for users %1 from %2 to %3',false,$users,$event['start'],$event['end']);
}
$max_quantity = $possible_quantity_conflicts = $conflicts = array();
foreach((array) $overlapping_events as $k => $overlap)
{
echo "checking overlaping event"; _debug_array($overlap);
if ($overlap['id'] == $event['id'] || // that's the event itself
$overlap['non_blocking']) // that's a non_blocking event
{
continue;
}
if ($this->debug > 3 || $this->debug == 'update')
{
$this->debug_message('bocalupdate::update() checking overlapping event %1',false,$overlap);
}
// check if the overlap is with a rejected participant or within the allowed quantity
$common_parts = array_intersect($users,array_keys($overlap['participants']));
foreach($common_parts as $n => $uid)
@ -142,9 +189,13 @@ class bocalupdate extends bocal
}
// now we have a quantity conflict for $uid
}
if (!count($common_parts))
if (count($common_parts))
{
$conflicts[$overlap['id']-$this->bo->date2ts($overlap['start'])] =& $overlapping_events[$k];
if ($this->debug > 3 || $this->debug == 'update')
{
$this->debug_message('bocalupdate::update() conflicts with the following participants found %1',false,$common_parts);
}
$conflicts[$overlap['id'].'-'.$this->date2ts($overlap['start'])] =& $overlapping_events[$k];
}
}
// check if we are withing the allowed quantity and if not add all events using that resource
@ -154,7 +205,7 @@ class bocalupdate extends bocal
{
foreach($possible_quantity_conflicts[$uid] as $conflict)
{
$conflicts[$conflict['id']-$this->bo->date2ts($conflict['start'])] =& $possible_quantity_conflicts[$k];
$conflicts[$conflict['id'].'-'.$this->bo->date2ts($conflict['start'])] =& $possible_quantity_conflicts[$k];
}
}
}
@ -162,66 +213,781 @@ class bocalupdate extends bocal
if (count($conflicts))
{
foreach($conflicts as $key => $conflict)
{
if (!$this->check_perms(EGW_ACL_READ,$conflict))
{
$conflicts[$key] = array(
'id' => $conflict['id'],
'title' => lang('busy'),
'participants' => array_intersect_key($conflict['participants'],$event['participants']),
'start' => $conflict['start'],
'end' => $conflict['end'],
);
}
}
if ($this->debug > 2 || $this->debug == 'update')
{
$this->debug_message('bocalupdate::update() %1 conflicts found %2',false,count($conflicts),$conflicts);
}
return $conflicts;
}
}
// save the event to the database
if ($touch_modified)
{
$event['modified'] = time() + $this->tz_offset_s; // we are still in user-time
$event['modified'] = $this->now_su; // we are still in user-time
$event['modifier'] = $GLOBALS['egw_info']['user']['account_id'];
}
if (!($new_event = !(int)$event['id']))
{
$old_event = $this->read((int)$event['id'],null,$ignore_acl);
//echo "old $event[id]="; _debug_array($old_event);
}
//echo "saving $event[id]="; _debug_array($event);
$event2save = $event;
if (!($cal_id = $this->save($event)))
{
return $cal_id;
}
$event['id'] = $cal_id;
$event = $this->read($cal_id); // we re-read the event, in case only partial information was update and we need the full info for the notifies
//echo "new $cal_id="; _debug_array($event);
if ($this->log_file)
{
$this->log2file($event2save,$event,$old_event);
}
// send notifications
if ($new_event)
{
$this->send_update(MSG_ADDED,$event['participants'],'',$event);
}
else // update existing event
{
$this->check4update($event,$old_event);
}
// notify the link-class about the update, as other apps may be subscribt to it
$this->link->notify_update('calendar',$cal_id,$event);
// TODO send update messages
return $cal_id;
}
/**
* Check for added, modified or deleted participants
*
* @param array $new_event the updated event
* @param array $old_event the event before the update
*/
function check4update($new_event,$old_event)
{
$modified = $added = $deleted = array();
//echo "<p>bocalupdate::check4update() new participants = ".print_r($new_event['participants'],true).", old participants =".print_r($old_event['participants'],true)."</p>\n";
// Find modified and deleted participants ...
foreach($old_event['participants'] as $old_userid => $old_status)
{
if(isset($new_event['participants'][$old_userid]))
{
$modified[$old_userid] = $new_event['participants'][$old_userid];
}
else
{
$deleted[$old_userid] = $old_status;
}
}
// Find new participatns ...
foreach($new_event['participants'] as $new_userid => $new_status)
{
if(!isset($old_event['participants'][$new_userid]))
{
$added[$new_userid] = 'U';
}
}
//echo "<p>bocalupdate::check4update() added=".print_r($added,true).", modified=".print_r($modified,true).", deleted=".print_r($deleted,true)."</p>\n";
if(count($added) || count($modified) || count($deleted))
{
if(count($added))
{
$this->send_update(MSG_ADDED,$added,$old_event,$new_event);
}
if(count($modified))
{
$this->send_update(MSG_MODIFIED,$modified,$old_event,$new_event);
}
if(count($deleted))
{
$this->send_update(MSG_DISINVITE,$deleted,$new_event);
}
}
}
/**
* checks if $userid has requested (in $part_prefs) updates for $msg_type
*
* @param int $userid numerical user-id
* @param array $part_prefs preferces of the user $userid
* @param int $msg_type type of the notification: MSG_ADDED, MSG_MODIFIED, MSG_ACCEPTED, ...
* @param array $old_event Event before the change
* @param array $new_event Event after the change
* @return boolean true = update requested, flase otherwise
*/
function update_requested($userid,$part_prefs,$msg_type,$old_event,$new_event)
{
if ($msg_type == MSG_ALARM)
{
return True; // always True for now
}
$want_update = 0;
// the following switch falls through all cases, as each included the following too
//
$msg_is_response = $msg_type == MSG_REJECTED || $msg_type == MSG_ACCEPTED || $msg_type == MSG_TENTATIVE;
switch($ru = $part_prefs['calendar']['receive_updates'])
{
case 'responses':
if ($msg_is_response)
{
++$want_update;
}
case 'modifications':
if ($msg_type == MSG_MODIFIED)
{
++$want_update;
}
case 'time_change_4h':
case 'time_change':
$diff = max(abs($this->date2ts($old_event['start'])-$this->date2ts($new_event['start'])),
abs($this->date2ts($old_event['end'])-$this->date2ts($new_event['end'])));
$check = $ru == 'time_change_4h' ? 4 * 60 * 60 - 1 : 0;
if ($msg_type == MSG_MODIFIED && $diff > $check)
{
++$want_update;
}
case 'add_cancel':
if ($old_event['owner'] == $userid && $msg_is_response ||
$msg_type == MSG_DELETED || $msg_type == MSG_ADDED || $msg_type == MSG_DISINVITE)
{
++$want_update;
}
break;
case 'no':
break;
}
//echo "<p>bocalupdate::update_requested(user=$userid,pref=".$part_prefs['calendar']['receive_updates'] .",msg_type=$msg_type,".($old_event?$old_event['title']:'False').",".($old_event?$old_event['title']:'False').") = $want_update</p>\n";
return $want_update > 0;
}
/**
* sends update-messages to certain participants of an event
*
* @param int $msg_type type of the notification: MSG_ADDED, MSG_MODIFIED, MSG_ACCEPTED, ...
* @param array $to_notify numerical user-ids as keys (!) (value is not used)
* @param array $old_event Event before the change
* @param array $new_event Event after the change
*/
function send_update($msg_type,$to_notify,$old_event,$new_event=False,$user=False)
{
if (!is_array($to_notify))
{
$to_notify = array();
}
$disinvited = $msg_type == MSG_DISINVITE ? array_keys($to_notify) : array();
$owner = $old_event ? $old_event['owner'] : $new_event['owner'];
if ($owner && !isset($to_notify[$owner]) && $msg_type != MSG_ALARM)
{
$to_notify[$owner] = 'owner'; // always include the event-owner
}
$version = $GLOBALS['egw_info']['apps']['calendar']['version'];
// ignore events in the past
if($old_event != False && $this->date2ts($old_event['start']) < $this->now_su)
{
return False;
}
$temp_user = $GLOBALS['egw_info']['user']; // save user-date of the enviroment to restore it after
if (!$user)
{
$user = $temp_user['account_id'];
}
if ($GLOBALS['egw']->preferences->account_id != $user)
{
$GLOBALS['egw']->preferences->preferences($user);
$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository();
}
$sender = $GLOBALS['egw_info']['user']['email'];
$sender_fullname = $GLOBALS['egw_info']['user']['fullname'];
$event = $msg_type == MSG_ADDED || $msg_type == MSG_MODIFIED ? $new_event : $old_event;
switch($msg_type)
{
case MSG_DELETED:
$action = lang('Canceled');
$msg = 'Canceled';
$msgtype = '"calendar";';
$method = 'cancel';
break;
case MSG_MODIFIED:
$action = lang('Modified');
$msg = 'Modified';
$msgtype = '"calendar"; Version="'.$version.'"; Id="'.$new_event['id'].'"';
$method = 'request';
break;
case MSG_DISINVITE:
$action = lang('Disinvited');
$msg = 'Disinvited';
$msgtype = '"calendar";';
$method = 'cancel';
break;
case MSG_ADDED:
$action = lang('Added');
$msg = 'Added';
$msgtype = '"calendar"; Version="'.$version.'"; Id="'.$new_event['id'].'"';
$method = 'request';
break;
case MSG_REJECTED:
$action = lang('Rejected');
$msg = 'Response';
$msgtype = '"calendar";';
$method = 'reply';
break;
case MSG_TENTATIVE:
$action = lang('Tentative');
$msg = 'Response';
$msgtype = '"calendar";';
$method = 'reply';
break;
case MSG_ACCEPTED:
$action = lang('Accepted');
$msg = 'Response';
$msgtype = '"calendar";';
$method = 'reply';
break;
case MSG_ALARM:
$action = lang('Alarm');
$msg = 'Alarm';
$msgtype = '"calendar";';
$method = 'publish'; // duno if thats right
break;
default:
$method = 'publish';
}
$notify_msg = $this->cal_prefs['notify'.$msg];
if (empty($notify_msg))
{
$notify_msg = $this->cal_prefs['notifyAdded']; // use a default
}
$details = $this->_get_event_details($event,$action,$event_arr,$disinvited);
if(!is_object($GLOBALS['egw']->send))
{
$GLOBALS['egw']->send =& CreateObject('phpgwapi.send');
}
$send = &$GLOBALS['egw']->send;
foreach($to_notify as $userid => $statusid)
{
if (!is_numeric($userid)) continue; // eg. a resource, ToDo notify the responsible of the resource
$userid = (int)$userid;
if ($statusid == 'R' || $GLOBALS['egw']->accounts->get_type($userid) == 'g')
{
continue; // dont notify rejected participants or groups
}
if($userid != $GLOBALS['egw_info']['user']['account_id'] || $msg_type == MSG_ALARM)
{
$preferences =& CreateObject('phpgwapi.preferences',$userid);
$part_prefs = $preferences->read_repository();
if (!$this->update_requested($userid,$part_prefs,$msg_type,$old_event,$new_event))
{
continue;
}
$GLOBALS['egw']->accounts->get_account_name($userid,$lid,$details['to-firstname'],$details['to-lastname']);
$details['to-fullname'] = $GLOBALS['egw']->common->display_fullname('',$details['to-firstname'],$details['to-lastname']);
$to = $GLOBALS['egw']->accounts->id2name($userid,'account_email');
if (!$to || !strstr($to,'@'))
{
// ToDo: give an error-message
echo '<p>'.lang('Invalid email-address "%1" for user %2',$to,$GLOBALS['egw']->common->grab_owner_name($userid))."</p>\n";
continue;
}
$GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'] = $part_prefs['common']['tz_offset'];
$GLOBALS['egw_info']['user']['preferences']['common']['timeformat'] = $part_prefs['common']['timeformat'];
$GLOBALS['egw_info']['user']['preferences']['common']['dateformat'] = $part_prefs['common']['dateformat'];
$GLOBALS['egw']->datetime->tz_offset = 3600 * (int) $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'];
// event is in user-time of current user, now we need to calculate the tz-difference to the notified user and take it into account
$tz_diff = $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'] - $this->common_prefs['tz_offset'];
if($old_event != False) $details['olddate'] = $this->format_date($old_event['start']+$tz_diff);
$details['startdate'] = $this->format_date($event['start']+$tz_diff);
$details['enddate'] = $this->format_date($event['end']+$tz_diff);
list($subject,$body) = explode("\n",$GLOBALS['egw']->preferences->parse_notify($notify_msg,$details),2);
$send->ClearAddresses();
$send->ClearAttachments();
$send->IsHTML(False);
$send->AddAddress($to);
$send->AddCustomHeader('X-eGroupWare-type: calendarupdate');
switch($part_prefs['calendar']['update_format'])
{
case 'extended':
$body .= "\n\n".lang('Event Details follow').":\n";
foreach($event_arr as $key => $val)
{
if ($key != 'access' && $key != 'priority' && strlen($details[$key]))
{
$body .= sprintf("%-20s %s\n",$val['field'].':',$details[$key]);
}
}
break;
case 'ical':
$ics = ExecMethod('calendar.boicalendar.export',array(
'l_event_id' => array($event),
'method' => $method,
'chunk_split' => False
));
if ($method == "request")
{
$send->AddStringAttachment($ics, "cal.ics", "8bit", "text/calendar; method=$method");
}
break;
}
$send->From = $sender;
$send->FromName = $sender_fullname;
$send->Subject = $send->encode_subject($subject);
$send->Body = $body;
if ($this->debug)
{
echo "<hr /><p>to: $to<br>from: $sender_fullname &lt;$sender&gt;<br>Subject: $subject<br>".nl2br($body)."</p><hr />\n";
}
$returncode = $send->Send();
// ToDo: give error-messages for all all failed sendings
}
}
// restore the enviroment
$GLOBALS['egw_info']['user'] = $temp_user;
$GLOBALS['egw']->datetime->tz_offset = 3600 * $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'];
return $returncode;
}
function get_update_message($event,$added)
{
$details = $this->_get_event_details($event,$added ? lang('Added') : lang('Modified'),$nul);
$notify_msg = $this->cal_prefs[$added || empty($this->cal_prefs['notifyModified']) ? 'notifyAdded' : 'notifyModified'];
return explode("\n",$GLOBALS['egw']->preferences->parse_notify($notify_msg,$details),2);
}
function send_alarm($alarm)
{
//echo "<p>bocalendar::send_alarm("; print_r($alarm); echo ")</p>\n";
$GLOBALS['egw_info']['user']['account_id'] = $this->owner = $alarm['owner'];
if (!$alarm['enabled'] || !$alarm['owner'] || !$alarm['cal_id'] || !($event = $this->read($alarm['cal_id'])))
{
return False; // event not found
}
if ($alarm['all'])
{
$to_notify = $event['participants'];
}
elseif ($this->check_perms(EGW_ACL_READ,$event)) // checks agains $this->owner set to $alarm[owner]
{
$to_notify[$alarm['owner']] = 'A';
}
else
{
return False; // no rights
}
return $this->send_update(MSG_ALARM,$to_notify,$event,False,$alarm['owner']);
}
/**
* saves an event to the database, does NOT do any notifications, see bocalupdate::update for that
*
* This methode converts from user to server time and handles the insertion of users and dates of repeating events
*
* @param array $event
* @return int/boolean $cal_id > 0 or false on error
* @return int/boolean $cal_id > 0 or false on error (eg. permission denied)
*/
function save($event)
{
// check if user has the permission to update / create the event
if ($event['cal_id'] && !$this->check_perms(EGW_ACL_EDIT,$event['cal_id']) ||
!$event['cal_id'] && !$this->check_perms(EGW_ACL_EDIT,0,$event['owner']))
{
return false;
}
// invalidate the read-cache if it contains the event we store now
if ($event['id'] && $event['id'] == $this->cached_event['id']) $this->cached_event = array();
$save_event = $event;
// we run all dates through date2array, to adjust to server-time and get the new keys (day,minute,second,full,raw)
// we run all dates through date2ts, to adjust to server-time and the possible date-formats
foreach(array('start','end','modified','recur_enddate') as $ts)
{
// we convert here from user-time to timestamps in server-time!
if (isset($event[$ts])) $event[$ts] = $event[$ts] ? $this->date2ts($event[$ts],true) : 0;
}
// same with the recur exceptions
if (isset($event['recur_exception']) && is_array($event['recur_exception']))
{
foreach($event['recur_exception'] as $n => $date)
{
$event['recur_exception'][$n] = $this->date2ts($date,true);
}
}
// same with the alarms
if (isset($event['alarm']) && is_array($event['alarm']))
{
foreach($event['alarm'] as $id => $alarm)
{
$event['alarm'][$id]['time'] = $this->date2ts($alarm['time'],true);
}
}
if (($cal_id = $this->so->save($event,$set_recurrences)) && $set_recurrences && $event['recur_type'] != MCAL_RECUR_NONE)
{
$save_event['id'] = $cal_id;
$this->set_recurrences($save_event);
}
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,$event['cal_id'] ? 'modify' : 'add',time());
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,$event['id'] ? 'modify' : 'add',time());
return $cal_id;
}
/**
* deletes an event
* set the status of one participant for a given recurrence or for all recurrences since now (includes recur_date=0)
*
* @param int $cal_id
* @return boolean true on success, flase on error (usually permission denied)
* @param char $user_type 'u' regular user
* @param int $user_id
* @param int/char $status numeric status (defines) or 1-char code: 'R', 'U', 'T' or 'A'
* @param int $recur_date=0 date to change, or 0 = all since now
* @return int number of changed recurrences
*/
function delete($cal_id)
function set_status($cal_id,$user_type,$user_id,$status,$recur_date=0)
{
if (!$this->check_perms(EGW_ACL_DELETE,$cal_id)) return false;
//echo "<p>bocalupdate::set_status($cal_id,$user_type,$user_id,$status,$recur_date)</p>\n";
if (!$cal_id || $user_type == 'u' && !$this->check_perms(EGW_ACL_EDIT,0,$user_id))
// ToDo: check for bookingpermission of resources !!!
{
return false;
}
if (($Ok = $this->so->set_status($cal_id,$user_type,$user_id,$status,$recur_date ? $this->date2ts($recur_date,true) : 0)))
{
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,'modify',time());
static $status2msg = array(
'R' => MSG_REJECTED,
'T' => MSG_TENTATIVE,
'A' => MSG_ACCEPTED,
);
if (isset($status2msg[$status]))
{
$event = $this->read($cal_id);
$this->send_update($status2msg[$status],$event['participants'],$event);
}
}
return Ok;
}
/**
* deletes an event
*
* @param int $cal_id id of the event to delete
* @param int $recur_date=0 if a single event from a series should be deleted, its date
* @return boolean true on success, false on error (usually permission denied)
*/
function delete($cal_id,$recur_date=0)
{
$event = $this->read($cal_id,$recur_date);
$this->so->delete($cal_id);
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,'delete',time());
if (!($event = $this->read($cal_id,$recur_date)) ||
!$this->check_perms(EGW_ACL_DELETE,$event))
{
return false;
}
$this->send_update(MSG_DELETED,$event['participants'],$event);
if (!$recur_date || $event['recur_type'] == MCAL_RECUR_NONE)
{
$this->so->delete($cal_id);
$GLOBALS['egw']->contenthistory->updateTimeStamp('calendar',$cal_id,'delete',time());
// delete all links to the event
$this->link->unlink(0,'calendar',$cal_id);
}
else
{
$event['recur_exception'][] = $recur_date = $this->date2ts($event['start']);
unset($event['start']);
unset($event['end']);
$this->save($event); // updates the content-history
}
return true;
}
/**
* helper for send_update and get_update_message
* @internal
*/
function _get_event_details($event,$action,&$event_arr,$disinvited=array())
{
$details = array( // event-details for the notify-msg
'id' => $event['id'],
'action' => $action,
);
$event_arr = $this->event2array($event);
foreach($event_arr as $key => $val)
{
$details[$key] = $val['data'];
}
$details['participants'] = $details['participants'] ? implode("\n",$details['participants']) : '';
$details['groups'] = $details['groups'] ? implode("\n",$details['groups']) : '';
$details['link'] = $GLOBALS['egw_info']['server']['webserver_url'].'/index.php?menuaction=calendar.uiforms.view&cal_id='.$event['id'];
// if url is only a path, try guessing the rest ;-)
if ($GLOBALS['egw_info']['server']['webserver_url'][0] == '/')
{
$details['link'] = ($GLOBALS['egw_info']['server']['enforce_ssl'] || $_SERVER['HTTPS'] ? 'https://' : 'http://').
($GLOBALS['egw_info']['server']['hostname'] ? $GLOBALS['egw_info']['server']['hostname'] : 'localhost').
$details['link'];
}
$dis = array();
foreach($disinvited as $uid)
{
$dis[] = $this->participant_name($uid);
}
$details['disinvited'] = implode(', ',$dis);
return $details;
}
/**
* create array with name, translated name and readable content of each attributes of an event
*
* old function, so far only used by send_update (therefor it's in bocalupdate and not bocal)
*
* @param array $event event to use
* @returns array of attributes with fieldname as key and array with the 'field'=translated name 'data' = readable content (for participants this is an array !)
*/
function event2array($event)
{
$var['title'] = Array(
'field' => lang('Title'),
'data' => $event['title']
);
$var['description'] = Array(
'field' => lang('Description'),
'data' => $event['description']
);
if (!is_object($GLOBALS['egw']->categories))
{
$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories');
}
foreach(explode(',',$event['category']) as $cat_id)
{
list($cat) = $GLOBALS['egw']->categories->return_single($cat_id);
$cat_string[] = stripslashes($cat['name']);
}
$var['category'] = Array(
'field' => lang('Category'),
'data' => implode(', ',$cat_string)
);
$var['location'] = Array(
'field' => lang('Location'),
'data' => $event['location']
);
$var['startdate'] = Array(
'field' => lang('Start Date/Time'),
'data' => $this->format_date($event['start']),
);
$var['enddate'] = Array(
'field' => lang('End Date/Time'),
'data' => $this->format_date($event['end']),
);
$pri = Array(
0 => '',
1 => lang('Low'),
2 => lang('Normal'),
3 => lang('High')
);
$var['priority'] = Array(
'field' => lang('Priority'),
'data' => $pri[$event['priority']]
);
$var['owner'] = Array(
'field' => lang('Owner'),
'data' => $GLOBALS['egw']->common->grab_owner_name($event['owner'])
);
$var['updated'] = Array(
'field' => lang('Updated'),
'data' => $this->format_date($event['modtime']).', '.$GLOBALS['egw']->common->grab_owner_name($event['modifier'])
);
$var['access'] = Array(
'field' => lang('Access'),
'data' => $event['public'] ? lang('Public') : lang('Private')
);
if(is_array($event['groups']))
{
$cal_grps = '';
foreach($event['groups'] as $group)
{
if(($name = $GLOBALS['egw']->accounts->id2name($group)))
{
$cal_grps[] = $name;
}
}
$var['groups'] = Array(
'field' => lang('Groups'),
'data' => $cal_grps,
);
}
if (isset($event['participants']) && is_array($event['participants']))
{
$participants = $this->participants($event,true);
}
$var['participants'] = Array(
'field' => lang('Participants'),
'data' => $participants
);
// Repeated Events
if($event['recur_type'] != MCAL_RECUR_NONE)
{
$str = lang($this->rpt_type[$event['recur_type']]);
$str_extra = array();
if ($event['recur_enddate'])
{
$str_extra[] = lang('ends').': '.lang($this->format_date($event['recur_enddate'],'l')).', '.$this->long_date($event['recur_enddate']).' ';
}
// only weekly uses the recur-data (days) !!!
if($event['recur_type'] == MCAL_RECUR_WEEKLY)
{
$repeat_days = array();
foreach ($this->recur_days as $mcal_mask => $dayname)
{
if ($event['recur_data'] & $mcal_mask)
{
$repeat_days[] = lang($dayname);
}
}
if(count($repeat_days))
{
$str_extra[] = lang('days repeated').': '.implode(', ',$repeat_days);
}
}
if($event['recur_interval'])
{
$str_extra[] = lang('Interval').': '.$event['recur_interval'];
}
if(count($str_extra))
{
$str .= ' ('.implode(', ',$str_extra).')';
}
$var['recur_type'] = Array(
'field' => lang('Repetition'),
'data' => $str,
);
}
return $var;
}
/**
* log all updates to a file
*
* @param array $event2save event-data before calling save
* @param array $event_saved event-data read back from the DB
* @param array $old_event=null event-data in the DB before calling save
* @param string $type='update'
*/
function log2file($event2save,$event_saved,$old_event=null,$type='update')
{
if (!($f = fopen($this->log_file,'a')))
{
echo "<p>error opening '$this->log_file' !!!</p>\n";
return false;
}
fwrite($f,$type.': '.$GLOBALS['egw']->common->grab_owner_name($this->user).': '.date('r')."\n");
fwrite($f,"Time: time to save / saved time read back / old time before save\n");
foreach(array('start','end') as $name)
{
fwrite($f,$name.': '.(isset($event2save[$name]) ? $this->format_date($event2save[$name]) : 'not set').' / '.
$this->format_date($event_saved[$name]) .' / '.
(is_null($old_event) ? 'no old event' : $this->format_date($old_event[$name]))."\n");
}
foreach(array('event2save','event_saved','old_event') as $name)
{
fwrite($f,$name.' = '.print_r($$name,true));
}
fwrite($f,"\n");
fclose($f);
return true;
}
/**
* saves a new or updated alarm
*
* @param int $cal_id Id of the calendar-entry
* @param array $alarm array with fields: text, owner, enabled, ..
* @return string id of the alarm, or false on error (eg. no perms)
*/
function save_alarm($cal_id,$alarm)
{
if (!$cal_id || !$this->check_perms(EGW_ACL_EDIT,$alarm['all'] ? $cal_id : 0,!$alarm['all'] ? $alarm['owner'] : 0))
{
//$this->debug='check_perms'; echo "<p>no rights to save the alarm=".print_r($alarm,true)." to event($cal_id)</p>";
return false; // no rights to add the alarm
}
$alarm['time'] = $this->date2ts($alarm['time'],true); // user to server-time
return $this->so->save_alarm($cal_id,$alarm);
}
/**
* delete one alarms identified by its id
*
* @param string $id alarm-id is a string of 'cal:'.$cal_id.':'.$alarm_nr, it is used as the job-id too
* @return int number of alarms deleted, false on error (eg. no perms)
*/
function delete_alarm($id)
{
list(,$cal_id) = explode(':',$id);
if (!($alarm = $this->so->read_alarm($id)) || !$cal_id || !$this->check_perms(EGW_ACL_EDIT,$alarm['all'] ? $cal_id : 0,!$alarm['all'] ? $alarm['owner'] : 0))
{
return false; // no rights to delete the alarm
}
return $this->so->delete_alarm($id);
}
}

View File

@ -1,101 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar - Custom fields and sorting *
* http://www.egroupware.org *
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
class bocustom_fields
{
var $stock_fields = array(
'title' => array(
'label' => 'Title',
'title' => True
),
'description' => 'Description',
'category' => 'Category',
'location' => 'Location',
'project' => array(
'label' => 'Project',
'disabled' => true,
),
'startdate' => 'Start Date/Time',
'enddate' => 'End Date/Time',
'priority' => 'Priority',
'access' => 'Access',
'participants'=> 'Participants',
'owner' => 'Created By',
'updated' => 'Updated',
'alarm' => 'Alarm',
'recur_type' => 'Repetition'
);
function bocustom_fields()
{
$this->config = CreateObject('phpgwapi.config','calendar');
$this->config->read_repository();
$this->fields = &$this->config->config_data['fields'];
if (!is_array($this->fields)) {
$this->fields = array();
}
foreach ($this->fields as $field => $data) // this can be removed after a while
{
if (!isset($this->stock_fields[$field]) && $field[0] != '#')
{
unset($this->fields[$field]);
$this->fields['#'.$field] = $data;
}
}
foreach($this->stock_fields as $field => $data)
{
if (!is_array($data))
{
$data = array('label' => $data);
}
if (!isset($this->fields[$field]))
{
$this->fields[$field] = array(
'name' => $field,
'title' => $data['title'],
'disabled' => $data['disabled']
);
}
$this->fields[$field]['label'] = $data['label'];
$this->fields[$field]['length'] = $data['length'];
$this->fields[$field]['shown'] = $data['shown'];
}
}
function set($data)
{
if (is_array($data) && strlen($data['name']) > 0)
{
if (!isset($this->stock_fields[$name = $data['name']]))
{
$name = '#'.$name;
}
$this->fields[$name] = $data;
}
}
function save($fields=False)
{
if ($fields)
{
$this->fields = $fields;
}
//echo "<pre>"; print_r($this->config->config_data); echo "</pre>\n";
$this->config->save_repository();
}
}

View File

@ -1,17 +1,24 @@
<?php
/**************************************************************************\
* eGroupWare - Holiday *
* http://www.egroupware.org *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - Holiday *
* http://www.egroupware.org *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/**
* Business object for calendar holidays
*
* @package calendar
* @author Mark Peters <skeeter@phpgroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class boholiday
{
var $public_functions = Array(
@ -26,7 +33,7 @@
'update_entry' => True
);
var $debug = False;
var $debug = false;
var $base_url = '/index.php';
var $ui;
@ -46,7 +53,7 @@
function boholiday()
{
$this->so = CreateObject('calendar.soholiday');
$this->so =& CreateObject('calendar.soholiday');
$this->start = (int)get_var('start',array('POST','GET'));
$this->query = get_var('query',array('POST','GET'));
@ -101,7 +108,7 @@
}
}
$this->ui = CreateObject('calendar.uiholiday');
$this->ui =& CreateObject('calendar.uiholiday');
if($id)
{
$this->so->delete_holiday($id);
@ -127,7 +134,7 @@
{
$this->so->delete_locale($locale);
}
$this->ui = CreateObject('calendar.uiholiday');
$this->ui =& CreateObject('calendar.uiholiday');
$this->ui->admin();
}
@ -143,11 +150,35 @@
$file = './holidays.'.$this->locales[0];
if(!file_exists($file) && count($_POST['name']))
{
$c_holidays = count($_POST['name']);
$fp = fopen($file,'w');
for($i=0;$i<$c_holidays;$i++)
fwrite($fp,"charset\t".$GLOBALS['egw']->translation->charset()."\n");
$holidays = array();
foreach($_POST['name'] as $i => $name)
{
fwrite($fp,$this->locales[0]."\t".$_POST['name'][$i]."\t".$_POST['day'][$i]."\t".$_POST['month'][$i]."\t".$_POST['occurence'][$i]."\t".$_POST['dow'][$i]."\t".$_POST['observance'][$i]."\n");
$holiday = array(
'locale' => $_POST['locale'],
'name' => str_replace('\\','',$name),
'day' => $_POST['day'][$i],
'month' => $_POST['month'][$i],
'occurence' => $_POST['occurence'][$i],
'dow' => $_POST['dow'][$i],
'observance' => $_POST['observance'][$i],
);
}
// sort holidays by year / occurence:
usort($holidays,'_holiday_cmp');
$last_year = -1;
foreach($holidays as $holiday)
{
$year = $holiday['occurence'] <= 0 ? 0 : $holiday['occurence'];
if ($year != $last_year)
{
echo "\n".($year ? $year : 'regular (year=0)').":\n";
$last_year = $year;
}
fwrite($fp,"$holiday[locale]\t$holiday[name]\t$holiday[day]\t$holiday[month]\t$holiday[occurence]\t$holiday[dow]\t$holiday[observance_rule]\n");
}
fclose($fp);
}
@ -174,30 +205,30 @@
function prepare_read_holidays($year=0,$owner=0)
{
$this->year = (isset($year) && $year > 0?$year:$GLOBALS['phpgw']->common->show_date(time() - $GLOBALS['phpgw']->datetime->tz_offset,'Y'));
$this->owner = ($owner?$owner:$GLOBALS['phpgw_info']['user']['account_id']);
$this->year = (isset($year) && $year > 0?$year:$GLOBALS['egw']->common->show_date(time() - $GLOBALS['egw']->datetime->tz_offset,'Y'));
$this->owner = ($owner?$owner:$GLOBALS['egw_info']['user']['account_id']);
if($this->debug)
{
echo 'Setting Year to : '.$this->year.'<br>'."\n";
}
if(@$GLOBALS['phpgw_info']['user']['preferences']['common']['country'])
if(@$GLOBALS['egw_info']['user']['preferences']['common']['country'])
{
$this->locales[] = $GLOBALS['phpgw_info']['user']['preferences']['common']['country'];
$this->locales[] = $GLOBALS['egw_info']['user']['preferences']['common']['country'];
}
elseif(@$GLOBALS['phpgw_info']['user']['preferences']['calendar']['locale'])
elseif(@$GLOBALS['egw_info']['user']['preferences']['calendar']['locale'])
{
$this->locales[] = $GLOBALS['phpgw_info']['user']['preferences']['calendar']['locale'];
$this->locales[] = $GLOBALS['egw_info']['user']['preferences']['calendar']['locale'];
}
else
{
$this->locales[] = 'US';
}
if($this->owner != $GLOBALS['phpgw_info']['user']['account_id'])
if($this->owner != $GLOBALS['egw_info']['user']['account_id'])
{
$owner_pref = CreateObject('phpgwapi.preferences',$owner);
$owner_pref =& CreateObject('phpgwapi.preferences',$owner);
$owner_prefs = $owner_pref->read_repository();
if(@$owner_prefs['common']['country'])
{
@ -210,12 +241,11 @@
unset($owner_pref);
}
@reset($this->locales);
if($GLOBALS['phpgw_info']['server']['auto_load_holidays'] == True)
if($GLOBALS['egw_info']['server']['auto_load_holidays'] == True && $this->locales)
{
while(list($key,$value) = each($this->locales))
foreach($this->locales as $local)
{
$this->auto_load_holidays($value);
$this->auto_load_holidays($local);
}
}
}
@ -228,14 +258,14 @@
/* get the file that contains the calendar events for your locale */
/* "http://www.egroupware.org/cal/holidays.US.csv"; */
$network = CreateObject('phpgwapi.network');
if(isset($GLOBALS['phpgw_info']['server']['holidays_url_path']) && $GLOBALS['phpgw_info']['server']['holidays_url_path'] != 'localhost')
$network =& CreateObject('phpgwapi.network');
if(isset($GLOBALS['egw_info']['server']['holidays_url_path']) && $GLOBALS['egw_info']['server']['holidays_url_path'] != 'localhost')
{
$load_from = $GLOBALS['phpgw_info']['server']['holidays_url_path'];
$load_from = $GLOBALS['egw_info']['server']['holidays_url_path'];
}
else
{
$pos = strpos(' '.$GLOBALS['phpgw_info']['server']['webserver_url'],$_SERVER['HTTP_HOST']);
$pos = strpos(' '.$GLOBALS['egw_info']['server']['webserver_url'],$_SERVER['HTTP_HOST']);
if($pos == 0)
{
switch($_SERVER['SERVER_PORT'])
@ -247,29 +277,40 @@
$http_protocol = 'https://';
break;
}
$server_host = $http_protocol.$_SERVER['HTTP_HOST'].$GLOBALS['phpgw_info']['server']['webserver_url'];
$server_host = $http_protocol.$_SERVER['HTTP_HOST'].$GLOBALS['egw_info']['server']['webserver_url'];
}
else
{
$server_host = $GLOBALS['phpgw_info']['server']['webserver_url'];
$server_host = $GLOBALS['egw_info']['server']['webserver_url'];
}
$load_from = $server_host.'/calendar/egroupware.org';
}
// echo 'Loading from: '.$load_from.'/holidays.'.strtoupper($locale).'.csv'."<br>\n";
$lines = $network->gethttpsocketfile($load_from.'/holidays.'.strtoupper($locale).'.csv');
if($GLOBALS['egw_info']['server']['holidays_url_path'] == 'localhost')
{
$lines = file(EGW_SERVER_ROOT.'/calendar/egroupware.org/holidays.'.strtoupper($locale).'.csv');
}
else
$lines = $network->gethttpsocketfile($load_from.'/holidays.'.strtoupper($locale).'.csv');
if (!$lines)
{
return false;
}
$charset = split("[\t\n ]+",$lines[0]); // give a bit flexibility in the syntax AND remove the lineend (\n)
if (strstr($charset[0],'charset') && $charset[1])
{
$lines = $GLOBALS['egw']->translation->convert($lines,$charset[1]);
}
$c_lines = count($lines);
for($i=0;$i<$c_lines;$i++)
foreach ($lines as $i => $line)
{
// echo 'Line #'.$i.' : '.$lines[$i]."<br>\n";
$holiday = explode("\t",$lines[$i]);
$holiday = explode("\t",$line);
if(count($holiday) == 7)
{
$holiday['locale'] = $holiday[0];
$holiday['name'] = $GLOBALS['phpgw']->db->db_addslashes($holiday[1]);
$holiday['name'] = $GLOBALS['egw']->db->db_addslashes($holiday[1]);
$holiday['mday'] = (int)$holiday[2];
$holiday['month_num'] = (int)$holiday[3];
$holiday['occurence'] = (int)$holiday[4];
@ -328,7 +369,7 @@
// Still need to put some validation in here.....
$this->ui = CreateObject('calendar.uiholiday');
$this->ui =& CreateObject('calendar.uiholiday');
if (is_array($errors))
{
@ -386,9 +427,8 @@
return $holidays;
}
$temp_locale = $GLOBALS['phpgw_info']['user']['preferences']['common']['country'];
$temp_locale = $GLOBALS['egw_info']['user']['preferences']['common']['country'];
foreach($holidays as $i => $holiday)
//for($i=0;$i<count($holidays);$i++)
{
if($i == 0 || $holidays[$i]['locale'] != $holidays[$i - 1]['locale'])
{
@ -396,24 +436,24 @@
{
unset($holidaycalc);
}
$GLOBALS['phpgw_info']['user']['preferences']['common']['country'] = $holidays[$i]['locale'];
$holidaycalc = CreateObject('calendar.holidaycalc');
$GLOBALS['egw_info']['user']['preferences']['common']['country'] = $holidays[$i]['locale'];
$holidaycalc =& CreateObject('calendar.holidaycalc');
}
$holidays[$i]['date'] = $holidaycalc->calculate_date($holiday, $holidays, $this->year);
}
unset($holidaycalc);
$this->holidays = $this->sort_holidays_by_date($holidays);
$this->cached_holidays = $this->set_holidays_to_date($this->holidays);
$GLOBALS['phpgw_info']['user']['preferences']['common']['country'] = $temp_locale;
$GLOBALS['egw_info']['user']['preferences']['common']['country'] = $temp_locale;
return $this->cached_holidays;
}
/* End Calendar functions */
function check_admin()
{
if(!@$GLOBALS['phpgw_info']['user']['apps']['admin'])
if(!@$GLOBALS['egw_info']['user']['apps']['admin'])
{
Header('Location: ' . $GLOBALS['phpgw']->link('/index.php'));
Header('Location: ' . $GLOBALS['egw']->link('/index.php'));
}
}
@ -423,7 +463,7 @@
{
return false;
}
$sbox = CreateObject('phpgwapi.sbox');
$sbox =& CreateObject('phpgwapi.sbox');
$month = $holiday['month'] ? lang($sbox->monthnames[$holiday['month']]) : '';
unset($sbox);
@ -438,7 +478,7 @@
}
else
{
$str = $GLOBALS['phpgw']->common->dateformatorder($holiday['occurence']>1900?$holiday['occurence']:'',$month,$holiday[day]);
$str = $GLOBALS['egw']->common->dateformatorder($holiday['occurence']>1900?$holiday['occurence']:'',$month,$holiday[day]);
}
if ($holiday['observance_rule'])
{
@ -447,4 +487,12 @@
return $str;
}
}
?>
function _holiday_cmp($a,$b)
{
if (($year_diff = ($a['occurence'] <= 0 ? 0 : $a['occurence']) - ($b['occurence'] <= 0 ? 0 : $b['occurence'])))
{
return $year_diff;
}
return $a['month'] - $b['month'] ? $a['month'] - $b['month'] : $a['day'] - $b['day'];
}

View File

@ -0,0 +1,577 @@
<?php
/**************************************************************************\
* eGroupWare - iCalendar Parser *
* http://www.egroupware.org *
* Written by Lars Kneschke <lkneschke@egroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License. *
\**************************************************************************/
/* $Id$ */
require_once EGW_SERVER_ROOT.'/calendar/inc/class.bocalupdate.inc.php';
require_once EGW_SERVER_ROOT.'/phpgwapi/inc/horde/Horde/iCalendar.php';
/**
* iCal import and export via Horde iCalendar classes
*
* @package calendar
* @author Lars Kneschke <lkneschke@egroupware.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class boical extends bocalupdate
{
/**
* @var array $supportedFields array containing the supported fields of the importing device
*/
var $supportedFields;
/**
* @var array $status_egw2ical conversation of the participant status egw => ical
*/
var $status_egw2ical = array(
'U' => 'NEEDS-ACTION',
'A' => 'ACCEPTED',
'R' => 'DECLINED',
'T' => 'TENTATIVE',
);
/**
* @var array conversation of the participant status ical => egw
*/
var $status_ical2egw = array(
'NEEDS-ACTION' => 'U',
'ACCEPTED' => 'A',
'DECLINED' => 'R',
'TENTATIVE' => 'T',
);
/**
* @var array $status_ical2egw conversation of the priority egw => ical
*/
var $priority_egw2ical = array(
0 => 0, // undefined
1 => 9, // low
2 => 5, // normal
3 => 1, // high
);
/**
* @var array $status_ical2egw conversation of the priority ical => egw
*/
var $priority_ical2egw = array(
0 => 0, // undefined
9 => 1, 8 => 1, 7 => 1, 6 => 1, // low
5 => 2, // normal
4 => 3, 3 => 3, 2 => 3, 1 => 3, // high
);
/**
* @var array $recur_egw2ical converstaion of egw recur-type => ical FREQ
*/
var $recur_egw2ical = array(
MCAL_RECUR_DAILY => 'DAILY',
MCAL_RECUR_WEEKLY => 'WEEKLY',
MCAL_RECUR_MONTHLY_MDAY => 'MONTHLY', // BYMONHTDAY={1..31}
MCAL_RECUR_MONTHLY_WDAY => 'MONTHLY', // BYDAY={1..5}{MO..SO}
MCAL_RECUR_YEARLY => 'YEARLY',
);
/**
* Exports one calendar event to an iCalendar item
*
* @param int/array $events (array of) cal_id or array of the events
* @param string $method='PUBLISH'
* @return string/boolean string with vCal or false on error (eg. no permission to read the event)
*/
function &exportVCal($events,$method='PUBLISH')
{
$egwSupportedFields = array(
'CLASS' => array('dbName' => 'public'),
'SUMMARY' => array('dbName' => 'title'),
'DESCRIPTION' => array('dbName' => 'description'),
'LOCATION' => array('dbName' => 'location'),
'DTSTART' => array('dbName' => 'start'),
'DTEND' => array('dbName' => 'end'),
'ORGANIZER' => array('dbName' => 'owner'),
'ATTENDEE' => array('dbName' => 'participants'),
'RRULE' => array('dbName' => 'recur_type'),
'EXDATE' => array('dbName' => 'recur_exception'),
'PRIORITY' => array('dbName' => 'priority'),
'TRANSP' => array('dbName' => 'non_blocking'),
'CATEGORIES'=> array('dbName' => 'category'),
);
if(!is_array($this->supportedFields))
{
$this->setSupportedFields();
}
$vcal = &new Horde_iCalendar;
$vcal->setAttribute('PRODID','-//eGroupWare//NONSGML eGroupWare Calendar '.$GLOBALS['egw_info']['apps']['calendar']['version'].'//'.
strtoupper($GLOBALS['egw_info']['user']['preferences']['common']['lang']));
$vcal->setAttribute('VERSION','2.0');
$vcal->setAttribute('METHOD',$method);
if (!is_array($events)) $events = array($events);
foreach($events as $event)
{
if (!is_array($event) && !($event = $this->read($event,null,false,'server'))) // server = timestamp in server-time(!)
{
return false; // no permission to read $cal_id
}
//_debug_array($event);
$eventGUID = $GLOBALS['egw']->common->generate_uid('calendar',$event['id']);
$vevent = Horde_iCalendar::newComponent('VEVENT',$vcal);
$parameters = $attributes = array();
foreach($egwSupportedFields as $icalFieldName => $egwFieldInfo)
{
if($this->supportedFields[$egwFieldInfo['dbName']])
{
switch($icalFieldName)
{
case 'ATTENDEE':
foreach((array)$event['participants'] as $uid => $status)
{
// ToDo, this needs to deal with resources too!!!
if (!is_numeric($uid)) continue;
$mailto = $GLOBALS['egw']->accounts->id2name($uid,'account_email');
$cn = trim($GLOBALS['egw']->accounts->id2name($uid,'account_firstname'). ' ' .
$GLOBALS['egw']->accounts->id2name($uid,'account_lastname'));
$attributes['ATTENDEE'][] = $mailto ? 'MAILTO:'.$mailto : '';
// ROLE={CHAIR|REQ-PARTICIPANT|OPT-PARTICIPANT|NON-PARTICIPANT} NOT used by eGW atm.
$role = $uid == $event['owner'] ? 'CHAIR' : 'REQ-PARTICIPANT';
// RSVP={TRUE|FALSE} // resonse expected, not set in eGW => status=U
$rsvp = $status == 'U' ? 'TRUE' : 'FALSE';
// PARTSTAT={NEEDS-ACTION|ACCEPTED|DECLINED|TENTATIVE|DELEGATED|COMPLETED|IN-PROGRESS} everything from delegated is NOT used by eGW atm.
$status = $this->status_egw2ical[$status];
// CUTYPE={INDIVIDUAL|GROUP|RESOURCE|ROOM|UNKNOWN}
$cutype = $GLOBALS['egw']->accounts->get_type($uid) == 'g' ? 'GROUP' : 'INDIVIDUAL';
$parameters['ATTENDEE'][] = array(
'CN' => $cn,
'ROLE' => $role,
'PARTSTAT' => $status,
'CUTYPE' => $cutype,
'RSVP' => $rsvp,
);
}
break;
case 'CLASS':
$attributes['CLASS'] = $event['public'] ? 'PUBLIC' : 'PRIVATE';
break;
case 'ORGANIZER': // according to iCalendar standard, ORGANIZER not used for events in the own calendar
if (!isset($event['participants'][$event['owner']]) || count($event['participants']) > 1)
{
$mailtoOrganizer = $GLOBALS['egw']->accounts->id2name($event['owner'],'account_email');
$attributes['ORGANIZER'] = $mailtoOrganizer ? 'MAILTO:'.$mailtoOrganizer : '';
$parameters['ORGANIZER']['CN'] = trim($GLOBALS['egw']->accounts->id2name($event['owner'],'account_firstname').' '.
$GLOBALS['egw']->accounts->id2name($event['owner'],'account_lastname'));
}
break;
case 'DTEND':
if(date('H:i:s',$event['end']) == '23:59:59') $event['end']++;
$attributes[$icalFieldName] = $event['end'];
break;
case 'RRULE':
if ($event['recur_type'] == MCAL_RECUR_NONE) break; // no recuring event
$rrule = array('FREQ' => $this->recur_egw2ical[$event['recur_type']]);
switch ($event['recur_type'])
{
case MCAL_RECUR_WEEKLY:
$days = array();
foreach($this->recur_days as $id => $day)
{
if ($event['recur_data'] & $id) $days[] = strtoupper(substr($day,0,2));
}
$rrule['BYDAY'] = implode(',',$days);
break;
case MCAL_RECUR_MONTHLY_MDAY: // date of the month: BYMONTDAY={1..31}
$rrule['BYMONTHDAY'] = (int) date('d',$event['start']);
break;
case MCAL_RECUR_MONTHLY_WDAY: // weekday of the month: BDAY={1..5}{MO..SO}
$rrule['BYDAY'] = (1 + (int) ((date('d',$event['start'])-1) / 7)).
strtoupper(substr(date('l',$event['start']),0,2));
break;
}
if ($event['recur_interval'] > 1) $rrule['INTERVAL'] = $event['recur_interval'];
if ($event['recur_enddate']) $rrule['UNTIL'] = date('Ymd',$event['recur_enddate']); // only day is set in eGW
// no idea how to get the Horde parser to produce a standard conformant
// RRULE:FREQ=... (note the double colon after RRULE, we cant use the $parameter array)
// so we create one value manual ;-)
foreach($rrule as $name => $value)
{
$attributes['RRULE'][] = $name . '=' . $value;
}
$attributes['RRULE'] = implode(';',$attributes['RRULE']);
break;
case 'EXDATE':
if ($event['recur_exception'])
{
$days = array();
foreach($event['recur_exception'] as $day)
{
$days[] = date('Ymd',$day);
}
$attributes['EXDATE'] = implode(',',$days);
$parameters['EXDATE']['VALUE'] = 'DATE';
}
break;
case 'PRIORITY':
$attributes['PRIORITY'] = (int) $this->priority_egw2ical[$event['priority']];
break;
case 'TRANSP':
$attributes['TRANSP'] = $event['non_blocking'] ? 'TRANSPARENT' : 'OPAQUE';
break;
case 'CATEGORIES':
if ($event['category'])
{
$attributes['CATEGORIES'] = implode(',',$this->categories($event['category'],$nul));
}
break;
default:
if ($event[$egwFieldInfo['dbName']]) // dont write empty fields
{
$attributes[$icalFieldName] = $event[$egwFieldInfo['dbName']];
}
break;
}
}
}
$modified = $GLOBALS['egw']->contenthistory->getTSforAction($eventGUID,'modify');
$created = $GLOBALS['egw']->contenthistory->getTSforAction($eventGUID,'add');
if (!$created && !$modified) $created = $event['modified'];
if ($created) $attributes['CREATED'] = $created;
if (!$modified) $modified = $event['modified'];
if ($modified) $attributes['LAST-MODIFIED'] = $modified;
$attributes['UID'] = $eventGUID;
foreach($attributes as $key => $value)
{
foreach(is_array($value) ? $value : array($value) as $valueID => $valueData)
{
$valueData = $GLOBALS['egw']->translation->convert($valueData,$GLOBALS['egw']->translation->charset(),'UTF-8');
$paramData = (array) $GLOBALS['egw']->translation->convert(is_array($value) ? $parameters[$key][$valueID] : $parameters[$key],
$GLOBALS['egw']->translation->charset(),'UTF-8');
//echo "$key:$valueID: value=$valueData, param=".print_r($paramDate,true)."\n";
$vevent->setAttribute($key, $valueData, $paramData);
$options = array();
if($key != 'RRULE' && preg_match('/([\000-\012\015\016\020-\037\075])/',$valueData))
{
$options['ENCODING'] = 'QUOTED-PRINTABLE';
}
if(preg_match('/([\177-\377])/',$valueData))
{
$options['CHARSET'] = 'UTF-8';
}
$vevent->setParameter($key, $options);
}
}
$vcal->addComponent($vevent);
}
//_debug_array($vcal->exportvCalendar());
return $vcal->exportvCalendar();
}
function importVCal(&$_vcalData, $cal_id=-1)
{
$vcal = &new Horde_iCalendar;
if(!$vcal->parsevCalendar($_vcalData))
{
return FALSE;
}
if(!is_array($this->supportedFields))
{
$this->setSupportedFields();
}
//echo "supportedFields="; _debug_array($this->supportedFields);
$Ok = false; // returning false, if file contains no components
foreach($vcal->getComponents() as $component)
{
if(is_a($component, 'Horde_iCalendar_vevent'))
{
$supportedFields = $this->supportedFields;
$event = array();
$vcardData = array('recur_type' => 0);
// lets see what we can get from the vcard
foreach($component->_attributes as $attributes)
{
$attributes['value'] = $GLOBALS['egw']->translation->convert($attributes['value'],'UTF-8');
//echo "$attributes[name] = '$attributes[value]'<br />\n";
switch($attributes['name'])
{
case 'CLASS':
$vcardData['public'] = (int)(strtolower($attributes['value']) == 'public');
break;
case 'DESCRIPTION':
$vcardData['description'] = $attributes['value'];
break;
case 'DTEND':
if(date('H:i:s',$attributes['value']) == '00:00:00')
$attributes['value']--;
$vcardData['end'] = $attributes['value'];
break;
case 'DTSTART':
$vcardData['start'] = $attributes['value'];
break;
case 'LOCATION':
$vcardData['location'] = $attributes['value'];
break;
case 'RRULE':
$recurence = $attributes['value'];
switch(substr($recurence,0,1))
{
case 'W':
if(preg_match('/W(\d+) (.*) (.*)/',$recurence, $recurenceMatches))
{
$vcardData['recur_type'] = MCAL_RECUR_WEEKLY;
$vcardData['recur_interval'] = $recurenceMatches[1];
foreach(explode(' ',trim($recurenceMatches[2])) as $recurenceDay)
{
switch($recurenceDay)
{
case 'SU':
$vcardData['recur_data'][] = MCAL_M_SUNDAY;
break;
case 'MO':
$vcardData['recur_data'][] = MCAL_M_MONDAY;
break;
case 'TU':
$vcardData['recur_data'][] = MCAL_M_TUESDAY;
break;
case 'WE':
$vcardData['recur_data'][] = MCAL_M_WEDNESDAY;
break;
case 'TH':
$vcardData['recur_data'][] = MCAL_M_THURSDAY;
break;
case 'FR':
$vcardData['recur_data'][] = MCAL_M_FRIDAY;
break;
case 'SA':
$vcardData['recur_data'][] = MCAL_M_SATURDAY;
break;
}
}
}
break;
case 'D':
if(preg_match('/D(\d+) (.*)/',$recurence, $recurenceMatches))
{
$vcardData['recur_type'] = MCAL_RECUR_DAILY;
$vcardData['recur_interval'] = $recurenceMatches[1];
$vcardData['recur_enddate'] = $vcal->_parseDateTime($recurenceMatches[2]);
}
break;
case 'M':
if(preg_match('/MD(\d+) (.*)/',$recurence, $recurenceMatches))
{
$vcardData['recur_type'] = MCAL_RECUR_MONTHLY_MDAY;
$vcardData['recur_interval'] = $recurenceMatches[1];
}
elseif(preg_match('/MP(\d+) (.*) (.*) (.*)/',$recurence, $recurenceMatches))
{
$vcardData['recur_type'] = MCAL_RECUR_MONTHLY_WDAY;
$vcardData['recur_interval'] = $recurenceMatches[1];
}
break;
case 'Y':
if(preg_match('/YM(\d+) (.*)/',$recurence, $recurenceMatches))
{
$vcardData['recur_type'] = MCAL_RECUR_YEARLY;
$vcardData['recur_interval'] = $recurenceMatches[1];
}
break;
}
break;
case 'EXDATE':
// ToDo: $vcardData['recur_exception'] = ...
break;
case 'SUMMARY':
$vcardData['title'] = $attributes['value'];
break;
case 'UID':
$event['uid'] = $vcardData['uid'] = $attributes['value'];
if ($cal_id <= 0 && !empty($vcardData['uid']) && ($uid_event = $this->read($vcardData['uid'])))
{
$event['id'] = $uid_event['id'];
unset($uid_event);
}
break;
case 'TRANSP':
$vcardData['non_blocking'] = $attributes['value'] == 'TRANSPARENT';
break;
case 'PRIORITY':
$vcardData['priority'] = (int) $this->priority_ical2egw[$attributes['value']];
break;
case 'CATEGORIES':
$vcardData['category'] = array();
if ($attributes['value'])
{
if (!is_object($this->cat))
{
if (!is_object($GLOBALS['egw']->categories))
{
$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories',$this->owner,'calendar');
}
$this->cat =& $GLOBALS['egw']->categories;
}
foreach(explode(',',$attributes['value']) as $cat_name)
{
if (!($cat_id = $this->cat->name2id($cat_name)))
{
$cat_id = $this->cat->add( array('name' => $cat,'descr' => $cat ));
}
$vcardData['category'][] = $cat_id;
}
}
break;
case 'ATTENDEE':
if (preg_match('/MAILTO:([@.a-z0-9_-]+)/i',$attributes['value'],$matches) &&
($uid = $GLOBALS['egw']->accounts->name2id($matches[1])))
{
$event['participants'][$uid] = preg_match('/PARTSTAT=([a-z-]+)/i',$attributes['value'],$matches) ?
$this->status_ical2egw[strtoupper($matches[1])] : ($uid == $event['owner'] ? 'A' : 'U');
}
break;
case 'ORGANIZER': // will be written direct to the event
if (preg_match('/MAILTO:([@.a-z0-9_-]+)/i',$attributes['value'],$matches) &&
($uid = $GLOBALS['egw']->accounts->name2id($matches[1])))
{
$event['owner'] = $uid;
}
break;
case 'CREATED': // will be written direct to the event
if ($event['modified']) break;
// fall through
case 'LAST-MODIFIED': // will be written direct to the event
$event['modified'] = $attributes['value'];
break;
}
}
#_debug_array($vcardData);exit;
// now that we know what the vard provides, we merge that data with the information we have about the device
$event['priority'] = 2;
if($cal_id > 0)
{
$event['id'] = $cal_id;
}
while($fieldName = array_shift($supportedFields))
{
switch($fieldName)
{
case 'recur_type':
$event['recur_type'] = $vcardData['recur_type'];
if ($event['recur_type'] != MCAL_RECUR_NONE)
{
foreach(array('recur_interval','recur_enddate','recur_data','recur_exception') as $r)
{
if(isset($vcardData[$f]))
{
$event[$r] = $vcardData[$r];
}
}
}
unset($supportedFields['recur_type']);
unset($supportedFields['recur_interval']);
unset($supportedFields['recur_enddate']);
unset($supportedFields['recur_data']);
break;
default:
if (isset($vcardData[$fieldName]))
{
$event[$fieldName] = $vcardData[$fieldName];
}
unset($supportedFields[$fieldName]);
break;
}
}
// add ourself to new events as participant
if($cal_id == -1 && !isset($this->supportedFields['participants']))
{
$event['participants'] = array($GLOBALS['egw_info']['user']['account_id'] => 'A');
}
#foreach($event as $key => $value)
#{
# error_log("KEY: $key VALUE: $value");
#}
//_debug_array($event); exit;
if (!($Ok = $this->update($event, TRUE))) break; // stop with the first error
}
}
return $Ok;
}
function setSupportedFields(&$_productManufacturer='file', &$_productName='')
{
$defaultFields = array('public' => 'public', 'description' => 'description', 'end' => 'end',
'start' => 'start', 'location' => 'location', 'recur_type' => 'recur_type',
'recur_interval' => 'recur_interval', 'recur_data' => 'recur_data', 'recur_enddate' => 'recur_enddate',
'title' => 'title', 'priority' => 'priority',
);
switch(strtolower($_productManufacturer))
{
case 'nexthaus corporation':
switch(strtolower($_productName))
{
default:
$this->supportedFields = $defaultFields + array('participants' => 'participants');
break;
}
break;
// multisync does not provide anymore information then the manufacturer
// we suppose multisync with evolution
case 'the multisync project':
switch(strtolower($_productName))
{
default:
$this->supportedFields = $defaultFields;
break;
}
break;
case 'synthesis ag':
switch(strtolower($_productName))
{
default:
$this->supportedFields = $defaultFields;
break;
}
break;
case 'file': // used outside of SyncML, eg. by the calendar itself ==> all possible fields
$this->supportedFields = $defaultFields + array(
'participants' => 'participants',
'owner' => 'owner',
'non_blocking' => 'non_blocking',
'category' => 'category',
);
break;
// the fallback for SyncML
default:
error_log("Client not found: $_productManufacturer $_productName");
$this->supportedFields = $defaultFields;
break;
}
}
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -1,314 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar Holidays *
* http://www.egroupware.org *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
class calendar_holiday
{
var $db;
var $year;
var $tz_offset;
var $holidays = Array();
var $index = Array();
var $users = Array();
var $datetime;
function calendar_holiday($owner='')
{
$this->datetime = CreateObject('phpgwapi.datetime');
$this->db = $GLOBALS['phpgw']->db;
if(@$GLOBALS['phpgw_info']['user']['preferences']['common']['country'])
{
$this->users['user'] = $GLOBALS['phpgw_info']['user']['preferences']['common']['country'];
}
else
{
$this->users['user'] = 'US';
}
$owner_id = get_account_id($owner);
if($owner_id != $GLOBALS['phpgw_info']['user']['account_id'])
{
$owner_pref = CreateObject('phpgwapi.preferences',$owner_id);
$owner_prefs = $owner_pref->read_repository();
if(isset($owner_prefs['calendar']['locale']) && $owner_prefs['common']['country'])
{
$this->users['owner'] = $owner_prefs['common']['country'];
}
else
{
$this->users['owner'] = 'US';
}
}
if($GLOBALS['phpgw_info']['server']['auto_load_holidays'] == True)
{
while(list($key,$value) = each($this->users))
{
$this->is_network_load_needed($value);
}
}
}
function is_network_load_needed($locale)
{
$sql = "SELECT count(*) FROM phpgw_cal_holidays WHERE locale='".$locale."'";
$this->db->query($sql,__LINE__,__FILE__);
$this->db->next_record();
$rows = $this->db->f(0);
if($rows==0)
{
$this->load_from_network($locale);
}
}
function save_holiday($holiday)
{
if(isset($holiday['hol_id']) && $holiday['hol_id'])
{
// echo "Updating LOCALE='".$holiday['locale']."' NAME='".$holiday['name']."' extra=(".$holiday['mday'].'/'.$holiday['month_num'].'/'.$holiday['occurence'].'/'.$holiday['dow'].'/'.$holiday['observance_rule'].")<br>\n";
$sql = "UPDATE phpgw_cal_holidays SET name='".$holiday['name']."', mday=".$holiday['mday'].', month_num='.$holiday['month_num'].', occurence='.$holiday['occurence'].', dow='.$holiday['dow'].', observance_rule='.(int)$holiday['observance_rule'].' WHERE hol_id='.$holiday['hol_id'];
}
else
{
// echo "Inserting LOCALE='".$holiday['locale']."' NAME='".$holiday['name']."' extra=(".$holiday['mday'].'/'.$holiday['month_num'].'/'.$holiday['occurence'].'/'.$holiday['dow'].'/'.$holiday['observance_rule'].")<br>\n";
$sql = 'INSERT INTO phpgw_cal_holidays(locale,name,mday,month_num,occurence,dow,observance_rule) '
. "VALUES('".strtoupper($holiday['locale'])."','".$holiday['name']."',".$holiday['mday'].','.$holiday['month_num'].','.$holiday['occurence'].','.$holiday['dow'].','.(int)$holiday['observance_rule'].")";
}
$this->db->query($sql,__LINE__,__FILE__);
}
function delete_holiday($id)
{
$sql = 'DELETE FROM phpgw_cal_holidays WHERE hol_id='.$id;
$this->db->query($sql,__LINE__,__FILE__);
}
function delete_locale($locale)
{
$sql = "DELETE FROM phpgw_cal_holidays WHERE locale='".$locale."'";
$this->db->query($sql,__LINE__,__FILE__);
}
function load_from_network($locale)
{
@set_time_limit(0);
// get the file that contains the calendar events for your locale
// "http://www.egroupware.org/headlines.rdf";
$network = CreateObject('phpgwapi.network');
if(isset($GLOBALS['phpgw_info']['server']['holidays_url_path']) && $GLOBALS['phpgw_info']['server']['holidays_url_path'] != 'localhost')
{
$load_from = $GLOBALS['phpgw_info']['server']['holidays_url_path'];
}
else
{
$pos = strpos(' '.$GLOBALS['phpgw_info']['server']['webserver_url'],$_SERVER['HTTP_HOST']);
if($pos == 0)
{
switch($_SERVER['SERVER_PORT'])
{
case 80:
$http_protocol = 'http://';
break;
case 443:
$http_protocol = 'https://';
break;
}
$server_host = $http_protocol.$_SERVER['HTTP_HOST'].$GLOBALS['phpgw_info']['server']['webserver_url'];
}
else
{
$server_host = $GLOBALS['phpgw_info']['server']['webserver_url'];
}
$load_from = $server_host.'/calendar/setup';
}
// echo 'Loading from: '.$load_from.'/holidays.'.strtoupper($locale)."<br>\n";
$lines = $network->gethttpsocketfile($load_from.'/holidays.'.strtoupper($locale));
if(!$lines)
{
return False;
}
$c_lines = count($lines);
for($i=0;$i<$c_lines;$i++)
{
// echo 'Line #'.$i.' : '.$lines[$i]."<br>\n";
$holiday = explode("\t",$lines[$i]);
if(count($holiday) == 7)
{
$holiday['locale'] = $holiday[0];
$holiday['name'] = addslashes($holiday[1]);
$holiday['mday'] = (int)$holiday[2];
$holiday['month_num'] = (int)$holiday[3];
$holiday['occurence'] = (int)$holiday[4];
$holiday['dow'] = (int)$holiday[5];
$holiday['observance_rule'] = (int)$holiday[6];
$holiday['hol_id'] = 0;
$this->save_holiday($holiday);
}
}
}
function read_holiday()
{
$this->year = (int)$GLOBALS['phpgw']->calendar->tempyear;
$sql = $this->build_holiday_query();
if($sql == False)
{
return False;
}
$this->holidays = Null;
$this->db->query($sql,__LINE__,__FILE__);
$i = 0;
$temp_locale = $GLOBALS['phpgw_info']['user']['preferences']['common']['country'];
while($this->db->next_record())
{
$this->index[$this->db->f('hol_id')] = $i;
$this->holidays[$i]['locale'] = $this->db->f('locale');
$this->holidays[$i]['name'] = $GLOBALS['phpgw']->strip_html($this->db->f('name'));
$this->holidays[$i]['day'] = (int)$this->db->f('mday');
$this->holidays[$i]['month'] = (int)$this->db->f('month_num');
$this->holidays[$i]['occurence'] = (int)$this->db->f('occurence');
$this->holidays[$i]['dow'] = (int)$this->db->f('dow');
$this->holidays[$i]['observance_rule'] = $this->db->f('observance_rule');
if(count($this->users) == 2 && $this->users[0] != $this->users[1])
{
if($this->holidays[$i]['locale'] == $this->users[1])
{
$this->holidays[$i]['owner'] = 'user';
}
else
{
$this->holidays[$i]['owner'] = 'owner';
}
}
else
{
$this->holidays[$i]['owner'] = 'user';
}
$c = $i;
$GLOBALS['phpgw_info']['user']['preferences']['common']['country'] = $this->holidays[$i]['locale'];
$holidaycalc = CreateObject('calendar.holidaycalc');
$this->holidays[$i]['date'] = $holidaycalc->calculate_date($this->holidays[$i], $this->holidays, $this->year, $this->datetime, $c);
unset($holidaycalc);
if($c != $i)
{
$i = $c;
}
$i++;
}
$this->holidays = $this->sort_by_date($this->holidays);
$GLOBALS['phpgw_info']['user']['preferences']['common']['country'] = $temp_locale;
return $this->holidays;
}
function build_list_for_submission($locale)
{
$i = -1;
$this->db->query("SELECT * FROM phpgw_cal_holidays WHERE locale='".$locale."'");
while($this->db->next_record())
{
$i++;
$holidays[$i]['locale'] = $this->db->f('locale');
$holidays[$i]['name'] = $GLOBALS['phpgw']->strip_html($this->db->f('name'));
$holidays[$i]['day'] = (int)$this->db->f('mday');
$holidays[$i]['month'] = (int)$this->db->f('month_num');
$holidays[$i]['occurence'] = (int)$this->db->f('occurence');
$holidays[$i]['dow'] = (int)$this->db->f('dow');
$holidays[$i]['observance_rule'] = $this->db->f('observance_rule');
}
return $holidays;
}
function build_holiday_query()
{
if(!isset($this->users) || count($this->users) == 0)
{
return False;
}
$sql = 'SELECT * FROM phpgw_cal_holidays WHERE locale in (';
$find_it = '';
reset($this->users);
while(list($key,$value) = each($this->users))
{
if($find_it)
{
$find_it .= ',';
}
$find_it .= "'".$value."'";
}
$sql .= $find_it.')';
return $sql;
}
function sort_by_date($holidays)
{
$c_holidays = count($holidays);
for($outer_loop=0;$outer_loop<($c_holidays - 1);$outer_loop++)
{
$outer_date = $holidays[$outer_loop]['date'];
for($inner_loop=$outer_loop;$inner_loop<$c_holidays;$inner_loop++)
{
$inner_date = $holidays[$inner_loop]['date'];
if($outer_date > $inner_date)
{
$temp = $holidays[$inner_loop];
$holidays[$inner_loop] = $holidays[$outer_loop];
$holidays[$outer_loop] = $temp;
}
}
}
return $holidays;
}
function find_date($date)
{
if($this->holidays == Null)
{
return False;
}
$c_holidays = count($this->holidays);
for($i=0;$i<$c_holidays;$i++)
{
if($this->holidays[$i]['date'] > $date)
{
$i = $c_holidays + 1;
}
elseif($this->holidays[$i]['date'] == $date)
{
$return_value[] = $i;
}
}
// echo 'Searching for '.$GLOBALS['phpgw']->common->show_date($date).' Found = '.count($return_value)."<br>\n";
if(isset($return_value))
{
return $return_value;
}
else
{
return False;
}
}
function get_holiday($index)
{
return $this->holidays[$index];
}
function get_name($id)
{
return $this->holidays[$id]['name'];
}
}
?>

View File

@ -1,362 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - ICal Calendar *
* http://www.egroupware.org *
* Created by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
if (isset($GLOBALS['phpgw_info']['flags']['included_classes']['calendar_']) &&
$GLOBALS['phpgw_info']['flags']['included_classes']['calendar_'] == True)
{
return;
}
$GLOBALS['phpgw_info']['flags']['included_classes']['calendar_'] = True;
class calendar_ extends calendar__
{
function open($calendar='',$user='',$passwd='',$options='')
{
if($user=='')
{
$user = $GLOBALS['phpgw_info']['user']['account_lid'];
}
elseif(is_int($user))
{
$this->user = $GLOBALS['phpgw']->accounts->id2name($user);
}
elseif(is_string($user))
{
$this->user = $user;
}
if($options != '')
{
$this->stream = mcal_open('{'.$GLOBALS['phpgw_info']['server']['icap_server'].'/'.$GLOBALS['phpgw_info']['server']['icap_type'].'}'.$calendar,$this->user,$passwd,$options);
}
else
{
$this->stream = mcal_open('{'.$GLOBALS['phpgw_info']['server']['icap_server'].'/'.$GLOBALS['phpgw_info']['server']['icap_type'].'}'.$calendar,$this->user,$passwd);
}
}
function popen($calendar='',$user='',$passwd='',$options='')
{
if($user=='')
{
$this->user = $GLOBALS['phpgw_info']['user']['account_lid'];
}
elseif(is_int($user))
{
$this->user = $GLOBALS['phpgw']->accounts->id2name($user);
}
elseif(is_string($user))
{
$this->user = $user;
}
if($options != '')
{
$this->stream = mcal_popen('{'.$GLOBALS['phpgw_info']['server']['icap_server'].'/'.$GLOBALS['phpgw_info']['server']['icap_type'].'}'.$calendar,$this->user,$passwd,$options);
}
else
{
$this->stream = mcal_popen('{'.$GLOBALS['phpgw_info']['server']['icap_server'].'/'.$GLOBALS['phpgw_info']['server']['icap_type'].'}'.$calendar,$this->user,$passwd);
}
}
function reopen($calendar,$options='')
{
if($options != '')
{
$this->stream = mcal_reopen($calendar,$options);
}
else
{
$this->stream = mcal_reopen($calendar);
}
}
function close($options='')
{
if($options != '')
{
return mcal_close($this->stream,$options);
}
else
{
return mcal_close($this->stream);
}
}
function create_calendar($calendar)
{
return mcal_create_calendar($this->stream,$calendar);
}
function rename_calendar($old_name,$new_name)
{
return mcal_rename_calendar($this->stream,$old_name,$new_name);
}
function delete_calendar($calendar)
{
return mcal_delete_calendar($this->stream,$calendar);
}
function fetch_event($event_id,$options='')
{
if(!isset($this->stream))
{
return False;
}
$this->event = CreateObject('calendar.calendar_item');
if($options != '')
{
$this->event = mcal_fetch_event($this->stream,$event_id,$options);
}
else
{
$this->event = mcal_fetch_event($this->stream,$event_id);
}
// Need to load the $this->event variable with the $event structure from
// the mcal_fetch_event() call
// Use http://www.php.net/manual/en/function.mcal-fetch-event.php as the reference
// This only needs legacy support
return $this->event;
}
function list_events($startYear,$startMonth,$startDay,$endYear='',$endMonth='',$endYear='')
{
if($endYear != '' && $endMonth != '' && $endDay != '')
{
$events = mcal_list_events($this->stream,$startYear,$startMonth,$startDay,$endYear,$endMonth,$endYear);
}
else
{
$events = mcal_list_events($this->stream,$startYear,$startMonth,$startDay);
}
return $events;
}
function append_event()
{
return mcal_append_event($this->stream);
}
function store_event()
{
return mcal_store_event($this->stream);
}
function delete_event($event_id)
{
return mcal_delete_event($this->stream,$event_id);
}
function snooze($event_id)
{
return mcal_snooze($this->stream,$event_id);
}
function list_alarms($begin_year='',$begin_month='',$begin_day='',$end_year='',$end_month='',$end_day='')
{
if($end_day == '')
{
if($end_month == '')
{
if($end_year == '')
{
if($begin_day == '')
{
if($begin_month == '')
{
if($begin_year == '')
{
return mcal_list_alarms($this->stream);
}
else
{
return mcal_list_alarms($this->stream,$begin_year);
}
}
else
{
return mcal_list_alarms($this->stream,$begin_year,$begin_month);
}
}
else
{
return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day);
}
}
else
{
return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year);
}
}
else
{
return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year,$end_month);
}
}
else
{
return mcal_list_alarms($this->stream,$begin_year,$begin_month,$begin_day,$end_year,$end_month,$end_day);
}
}
function event_init()
{
$this->event = CreateObject('calendar.calendar_item');
return mcal_event_init($this->stream);
}
function set_category($category='')
{
calendar__::set_category($category);
return mcal_event_set_category($this->stream,$category);
}
function set_title($title='')
{
calendar__::set_title($title);
return mcal_event_set_title($this->stream,$title);
}
function set_description($description='')
{
calendar__::set_description($description);
return mcal_event_set_description($this->stream,$description);
}
function set_start($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
calendar__::set_start($year,$month,$day,$hour,$min,$sec);
return mcal_event_set_start($this->stream,$year,$month,$day,$hour,$min,$sec);
}
function set_end($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
calendar__::set_end($year,$month,$day,$hour,$min,$sec);
return mcal_event_set_end($this->stream,$year,$month,$day,$hour,$min,$sec);
}
function set_alarm($alarm)
{
calendar__::set_alarm($alarm);
return mcal_event_set_alarm ($this->stream,$alarm);
}
function set_class($class)
{
calendar__::set_class($class);
return mcal_event_set_class($this->stream,$class);
}
// The function definition doesn't look correct...
// Need more information for this function
function next_recurrence($weekstart,$next)
{
return mcal_next_recurrence($this->stream,$weekstart,$next);
}
function set_recur_none()
{
calendar__::set_recur_none();
return mcal_event_set_recur_none($this->stream);
}
function set_recur_secondly($year,$month,$day,$interval)
{
calendar__::set_recur_secondly($year,$month,$day,$interval);
//return mcal_event_set_recur_secondly($this->stream,$year,$month,$day,$interval);
return 0; // stub - mcal_event_set_recur_secondly() does not exist
}
function set_recur_minutely($year,$month,$day,$interval)
{
calendar__::set_recur_minutely($year,$month,$day,$interval);
//return mcal_event_set_recur_minutely($this->stream,$year,$month,$day,$interval);
return 0; // stub - mcal_event_set_recur_minutely() does not exist
}
function set_recur_hourly($year,$month,$day,$interval)
{
calendar__::set_recur_hourly($year,$month,$day,$interval);
//return mcal_event_set_recur_hourly($this->stream,$year,$month,$day,$interval);
return 0; // stub - mcal_event_set_recur_hourly() does not exist
}
function set_recur_daily($year,$month,$day,$interval)
{
calendar__::set_recur_daily($year,$month,$day,$interval);
return mcal_event_set_recur_daily($this->stream,$year,$month,$day,$interval);
}
function set_recur_weekly($year,$month,$day,$interval,$weekdays)
{
calendar__::set_recur_weekly($year,$month,$day,$interval,$weekdays);
return mcal_event_set_recur_weekly($this->stream,$year,$month,$day,$interval,$weekdays);
}
function set_recur_monthly_mday($year,$month,$day,$interval)
{
calendar__::set_recur_monthly_mday($year,$month,$day,$interval);
return mcal_event_set_recur_monthly_mday($this->stream,$year,$month,$day,$interval);
}
function set_recur_monthly_wday($year,$month,$day,$interval)
{
calendar__::set_recur_monthly_wday($year,$month,$day,$interval);
return mcal_event_set_recur_monthly_wday($this->stream,$year,$month,$day,$interval);
}
function set_recur_yearly($year,$month,$day,$interval)
{
calendar__::set_recur_yearly($year,$month,$day,$interval);
return mcal_event_set_recur_yearly($this->stream,$year,$month,$day,$interval);
}
function fetch_current_stream_event()
{
$this->event = mcal_fetch_current_stream_event($this->stream);
return $this->event;
}
function add_attribute($attribute,$value)
{
calendar__::add_attribute($attribute,$value);
return mcal_event_add_attribute($this->stream,$attribute,$value);
}
function expunge()
{
return mcal_expunge($this->stream);
}
/**************** Local functions for ICAL based Calendar *****************/
function set_status($id,$owner,$status)
{
$status_code_short = Array(
REJECTED => 'R',
NO_RESPONSE => 'U',
TENTATIVE => 'T',
ACCEPTED => 'A'
);
$this->add_attribute('status['.$owner.']',$status_code_short[$status]);
// $this->stream->query("UPDATE calendar_entry_user SET cal_status='".$status_code_short[$status]."' WHERE cal_id=".$id." AND cal_login=".$owner,__LINE__,__FILE__);
return True;
}
}

View File

@ -1,34 +1,34 @@
<?php
/**************************************************************************\
* eGroupWare - holidaycalc *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - holidaycalc *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
if (empty($GLOBALS['phpgw_info']['user']['preferences']['common']['country']))
if (empty($GLOBALS['egw_info']['user']['preferences']['common']['country']))
{
$rule = 'US';
}
else
{
$rule = $GLOBALS['phpgw_info']['user']['preferences']['common']['country'];
$rule = $GLOBALS['egw_info']['user']['preferences']['common']['country'];
}
$calc_include = PHPGW_INCLUDE_ROOT.'/calendar/inc/class.holidaycalc_'.$rule.'.inc.php';
$calc_include = EGW_INCLUDE_ROOT.'/calendar/inc/class.holidaycalc_'.$rule.'.inc.php';
if(@file_exists($calc_include))
{
include($calc_include);
}
else
{
include(PHPGW_INCLUDE_ROOT.'/calendar/inc/class.holidaycalc_US.inc.php');
include(EGW_INCLUDE_ROOT.'/calendar/inc/class.holidaycalc_US.inc.php');
}
?>

View File

@ -1,18 +1,24 @@
<?php
/**************************************************************************\
* eGroupWare - holidaycalc_JP *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - holidaycalc_JP *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
/**
* Calculations for calendar JP holidays
*
* @package calendar
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class holidaycalc
{
function calculate_date($holiday, &$holidays, $year, &$i)
@ -23,7 +29,7 @@
if ($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year, $holiday['month'], 1);
$dow = $GLOBALS['egw']->datetime->day_of_week($year, $holiday['month'], 1);
$dayshift = (($holiday['dow'] + 7) - $dow) % 7;
$day = ($holiday['occurence'] - 1) * 7 + $dayshift + 1;
@ -97,7 +103,7 @@
if ($year >= 1985 && $holiday['month'] == $cached_month && $day == $cached_day + 2 && $cached_observance_rule == True && $holiday['observance_rule'] == True)
{
$pdow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day-1);
$pdow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$day-1);
if ($pdow != 0)
{
$addcnt = count($holidays) + 1;
@ -129,7 +135,7 @@
}
elseif ($holiday['observance_rule'] == True)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day);
$dow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$day);
// This now calulates Observed holidays and creates a new entry for them.
if($dow == 0)
{

View File

@ -1,18 +1,24 @@
<?php
/**************************************************************************\
* eGroupWare - holidaycalc_US *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - holidaycalc_US *
* http://www.egroupware.org *
* Based on Yoshihiro Kamimura <your@itheart.com> *
* http://www.itheart.com *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
/**
* Calculations for calendar US and other holidays
*
* @package calendar
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class holidaycalc
{
function add($holiday,&$holidays,$year,$day_offset=0)
@ -41,13 +47,13 @@
{
if($holiday['occurence'] != 99)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],1);
$dow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],1);
$day = (((7 * $holiday['occurence']) - 6) + ((($holiday['dow'] + 7) - $dow) % 7));
$day += ($day < 1 ? 7 : 0);
// Sometimes the 5th occurance of a weekday (ie the 5th monday)
// can spill over to the next month. This prevents that.
$ld = $GLOBALS['phpgw']->datetime->days_in_month($holiday['month'],$year);
$ld = $GLOBALS['egw']->datetime->days_in_month($holiday['month'],$year);
if ($day > $ld)
{
return;
@ -55,8 +61,8 @@
}
else
{
$ld = $GLOBALS['phpgw']->datetime->days_in_month($holiday['month'],$year);
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$ld);
$ld = $GLOBALS['egw']->datetime->days_in_month($holiday['month'],$year);
$dow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$ld);
$day = $ld - (($dow + 7) - $holiday['dow']) % 7 ;
}
}
@ -65,7 +71,7 @@
$day = $holiday['day'];
if($holiday['observance_rule'] == True)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day);
$dow = $GLOBALS['egw']->datetime->day_of_week($year,$holiday['month'],$day);
// This now calulates Observed holidays and creates a new entry for them.
// 0 = sundays are observed on monday (+1), 6 = saturdays are observed on fridays (-1)
@ -75,7 +81,7 @@
}
if ($holiday['month'] == 1 && $day == 1)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year+1,$holiday['month'],$day);
$dow = $GLOBALS['egw']->datetime->day_of_week($year+1,$holiday['month'],$day);
// checking if next year's newyear might be observed in this year
if ($dow == 6)
{
@ -87,7 +93,7 @@
// checking if last year's new year's eve might be observed in this year
if ($holiday['month'] == 12 && $day == 31)
{
$dow = $GLOBALS['phpgw']->datetime->day_of_week($year-1,$holiday['month'],$day);
$dow = $GLOBALS['egw']->datetime->day_of_week($year-1,$holiday['month'],$day);
if ($dow == 0)
{
$this->add($holiday,$holidays,$year-1,1);

File diff suppressed because it is too large Load Diff

View File

@ -1,472 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.eGroupWare.org *
* Maintained and further developed by RalfBecker@outdoor-training.de *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Originaly modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
class socalendar
{
// var $debug = True;
var $debug = False;
var $cal;
var $db;
var $owner;
var $g_owner;
var $is_group = False;
var $datetime;
var $filter;
var $cat_id;
function socalendar($param=False)
{
$this->db = $GLOBALS['phpgw']->db;
if(!is_object($GLOBALS['phpgw']->datetime))
{
$GLOBALS['phpgw']->datetime = createobject('phpgwapi.datetime');
}
$this->owner = (!isset($param['owner']) || $param['owner'] == 0?$GLOBALS['phpgw_info']['user']['account_id']:$param['owner']);
$this->filter = (isset($param['filter']) && $param['filter'] != ''?$param['filter']:$this->filter);
$this->cat_id = (isset($param['category']) && $param['category'] != ''?$param['category']:$this->cat_id);
if(isset($param['g_owner']) && is_array($param['g_owner']))
{
$this->is_group = True;
$this->g_owner = $param['g_owner'];
}
if($this->debug)
{
echo '<!-- SO Filter : '.$this->filter.' -->'."\n";
echo '<!-- SO cat_id : '.$this->cat_id.' -->'."\n";
}
$this->cal = CreateObject('calendar.socalendar_');
foreach($this->cal->all_tables as $name => $table)
{
$this->$name = $table;
}
$this->open_box($this->owner);
}
function open_box($owner)
{
$this->cal->open('INBOX',(int)$owner);
}
function maketime($time)
{
return mktime($time['hour'],$time['min'],$time['sec'],$time['month'],$time['mday'],$time['year']);
}
function read_entry($id)
{
return $this->cal->fetch_event($id);
}
function cat_filter($cat_id)
{
$extra = '';
if ($cat_id)
{
if (!is_array($cat_ids) && !@$GLOBALS['phpgw_info']['user']['preferences']['common']['cats_no_subs'])
{
if (!is_object($GLOBALS['phpgw']->categories))
{
$GLOBALS['phpgw']->categories = CreateObject('phpgwapi.categories');
}
$cats = $GLOBALS['phpgw']->categories->return_all_children($cat_id);
}
else
{
$cats = is_array($cat_id) ? $cat_id : array($cat_id);
}
array_walk($cats,create_function('&$val,$key','$val = (int) $val;'));
$extra .= "($this->table.cal_category".(count($cats) > 1 ? ' IN ('.implode(',',$cats).')' : '='.$this->db->quote((int)$cat_id));
foreach($cats as $cat)
{
$extra .= " OR $this->table.cal_category LIKE '$cat,%' OR $this->table.cal_category LIKE '%,$cat,%' OR $this->table.cal_category LIKE '%,$cat'";
}
$extra .= ') ';
}
return $extra;
}
function list_events($startYear,$startMonth,$startDay,$endYear=0,$endMonth=0,$endDay=0,$owner_id=0,$modified=0)
{
$extra = '';
$extra .= strpos($this->filter,'private') ? "AND $this->table.cal_public=0 " : '';
if ($this->cat_id)
{
$extra .= ' AND '.$this->cat_filter($this->cat_id);
}
if ((int) $modified > 0)
{
$modified -= $GLOBALS['phpgw']->datetime->tz_offset;
$extra .= " AND $this->table.cal_modified >= ".(int) $modified;
}
if($owner_id)
{
return $this->cal->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay,$extra,$GLOBALS['phpgw']->datetime->tz_offset,$owner_id);
}
else
{
return $this->cal->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay,$extra,$GLOBALS['phpgw']->datetime->tz_offset);
}
}
/**
* Returns the id's of all repeating events started after s{year,month,day} AND still running at e{year,month,day}
*
* The startdate of an repeating events is the regular event-startdate.
* Events are "still running" if no recur-enddate is set or its after e{year,month,day}
*/
function list_repeated_events($syear,$smonth,$sday,$eyear,$emonth,$eday,$owner_id=0,$modified=0)
{
if(!$owner_id)
{
$owner_id = $this->is_group ? $this->g_owner : $this->owner;
}
if($GLOBALS['phpgw_info']['server']['calendar_type'] != 'sql' ||
!count($owner_id)) // happens with empty groups
{
return Array();
}
$starttime = mktime(0,0,0,$smonth,$sday,$syear) - $GLOBALS['phpgw']->datetime->tz_offset;
$endtime = mktime(23,59,59,$emonth,$eday,$eyear) - $GLOBALS['phpgw']->datetime->tz_offset;
$sql = "AND $this->table.cal_type='M' AND $this->user_table.cal_user_id IN (".
(is_array($owner_id) ? implode(',',$owner_id) : $owner_id).')';
if ((int) $modified > 0)
{
$modified -= $GLOBALS['phpgw']->datetime->tz_offset;
$sql .= " AND $this->table.cal_modified >= ".(int) $modified;
}
/* why ???
$member_groups = $GLOBALS['phpgw']->accounts->membership($this->user);
@reset($member_groups);
while(list($key,$group_info) = each($member_groups))
{
$member[] = $group_info['account_id'];
}
@reset($member);
$sql .= ','.implode(',',$member).') ';
$sql .= "AND ($this->table.cal_starttime <= '.$starttime.') ';
$sql .= "AND ((($this->recur_table.recur_enddate >= $starttime) AND ($this->recur_table.recur_enddate <= $endtime)) OR ($this->recur_table.recur_enddate=0))) "
*/
$sql .= " AND ($this->recur_table.recur_enddate >= $starttime OR $this->recur_table.recur_enddate=0) "
. (strpos($this->filter,'private')? "AND $this->table.cal_public=0 " : '')
. ($this->cat_id ? 'AND '.$this->cat_filter($this->cat_id) : '')
. "ORDER BY $this->table.cal_starttime ASC, $this->table.cal_endtime ASC, $this->table.cal_priority ASC";
if($this->debug)
{
echo '<!-- SO list_repeated_events : SQL : '.$sql.' -->'."\n";
}
return $this->get_event_ids(True,$sql);
}
function list_events_keyword($keywords,$members='')
{
if (!$members)
{
$members[] = $this->owner;
}
array_walk($members,create_function('&$val,$key','$val = (int) $val;'));
$sql = "AND ($this->user_table.cal_user_id IN (".implode(',',$members).')) AND '.
"($this->user_table.cal_user_id=" . (int) $this->owner . " OR $this->table.cal_public=1) AND (";
$words = split(' ',$keywords);
foreach($words as $i => $word)
{
$sql .= $i > 0 ? ' OR ' : '';
$word = $GLOBALS['phpgw']->db->quote('%'.$word.'%');
$sql .= "(UPPER($this->table.cal_title) LIKE UPPER($word) OR ".
"UPPER($this->table.cal_description) LIKE UPPER($word) OR ".
"UPPER($this->table.cal_location) LIKE UPPER($word) OR ".
"UPPER($this->extra_table.cal_extra_value) LIKE UPPER($word))";
}
$sql .= ') ';
$sql .= strpos($this->filter,'private') ? "AND $this->table.cal_public=0 " : '';
$sql .= $this->cat_id ? 'AND '.$this->cat_filter($this->cat_id) : '';
$sql .= " ORDER BY $this->table.cal_starttime DESC, $this->table.cal_endtime DESC, $this->table.cal_priority ASC";
return $this->get_event_ids(False,$sql,True);
}
function read_from_store($startYear,$startMonth,$startDay,$endYear='',$endMonth='',$endDay='')
{
$events = $this->list_events($startYear,$startMonth,$startDay,$endYear,$endMonth,$endDay);
$events_cached = Array();
for($i=0;$i<count($events);$i++)
{
$events_cached[] = $this->read_entry($events[$i]);
}
return $events_cached;
}
function get_event_ids($search_repeats=False, $sql='',$search_extra=False)
{
return $this->cal->get_event_ids($search_repeats,$sql,$search_extra);
}
function find_uid($uid)
{
$sql = " AND ($this->table.cal_uid=".$this->db->quote($uid).')';
$found = $this->cal->get_event_ids(False,$sql);
if(!$found)
{
$found = $this->cal->get_event_ids(True,$sql);
}
if(is_array($found))
{
return $found[0];
}
else
{
return False;
}
}
function add_entry(&$event)
{
return $this->cal->save_event($event);
}
function save_alarm($cal_id,$alarm,$id=0)
{
return $this->cal->save_alarm($cal_id,$alarm,$id);
}
function delete_alarm($id)
{
return $this->cal->delete_alarm($id);
}
function delete_alarms($cal_id)
{
return $this->cal->delete_alarms($cal_id);
}
function delete_entry($id)
{
return $this->cal->delete_event($id);
}
function expunge()
{
$this->cal->expunge();
}
function delete_calendar($owner)
{
$this->cal->delete_calendar($owner);
}
function change_owner($account_id,$new_owner)
{
if($GLOBALS['phpgw_info']['server']['calendar_type'] == 'sql')
{
$db2 = $this->db;
$this->db->select($this->user_table,'cal_id',array('cal_user_id'=>$account_id),__LINE__,__FILE__);
while($this->db->next_record())
{
$id = $this->db->f('cal_id');
$db2->select($this->user_table,'count(*)',$where = array(
'cal_id' => $id,
'cal_user_id' => $new_owner,
),__LINE__,__FILE__);
$db2->next_record();
if($db2->f(0) == 0)
{
$db2->update($this->user_table,array('cal_user_id' => $new_owner),$where,__LINE__,__FILE__);
}
else
{
$db2->delete($this->user_table,$where,__LINE__,__FILE__);
}
}
$this->db->update($this->table,array('cal_owner'=>$new_owner),array('cal_owner'=>$account_id),__LINE__,__FILE__);
}
}
function set_status($id,$status)
{
$this->cal->set_status($id,$this->owner,$status);
}
function get_alarm($cal_id)
{
if (!method_exists($this->cal,'get_alarm'))
{
return False;
}
return $this->cal->get_alarm($cal_id);
}
function read_alarm($id)
{
if (!method_exists($this->cal,'read_alarm'))
{
return False;
}
return $this->cal->read_alarm($id);
}
function read_alarms($cal_id)
{
if (!method_exists($this->cal,'read_alarms'))
{
return False;
}
return $this->cal->read_alarms($cal_id);
}
function find_recur_exceptions($event_id)
{
if($GLOBALS['phpgw_info']['server']['calendar_type'] == 'sql')
{
$arr = Array();
$this->db->select($this->table,'cal_starttime',array('cal_reference'=>$event_id),__LINE__,__FILE__);
if($this->cal->num_rows())
{
while($this->cal->next_record())
{
$arr[] = (int)$this->cal->f('cal_starttime');
}
}
if(count($arr) == 0)
{
return False;
}
else
{
return $arr;
}
}
else
{
return False;
}
}
/* Begin mcal equiv functions */
function get_cached_event()
{
return $this->cal->event;
}
function add_attribute($var,$value,$element='**(**')
{
$this->cal->add_attribute($var,$value,$element);
}
function event_init()
{
$this->cal->event_init();
}
function set_date($element,$year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->cal->set_date($element,$year,$month,$day,$hour,$min,$sec);
}
function set_start($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->cal->set_start($year,$month,$day,$hour,$min,$sec);
}
function set_end($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->cal->set_end($year,$month,$day,$hour,$min,$sec);
}
function set_title($title='')
{
$this->cal->set_title($title);
}
function set_description($description='')
{
$this->cal->set_description($description);
}
function set_class($class)
{
$this->cal->set_class($class);
}
function set_category($category='')
{
$this->cal->set_category($category);
}
function set_alarm($alarm)
{
$this->cal->set_alarm($alarm);
}
function set_recur_none()
{
$this->cal->set_recur_none();
}
function set_recur_secondly($year,$month,$day,$interval)
{
$this->cal->set_recur_secondly($year,$month,$day,$interval);
}
function set_recur_minutely($year,$month,$day,$interval)
{
$this->cal->set_recur_minutely($year,$month,$day,$interval);
}
function set_recur_hourly($year,$month,$day,$interval)
{
$this->cal->set_recur_hourly($year,$month,$day,$interval);
}
function set_recur_daily($year,$month,$day,$interval)
{
$this->cal->set_recur_daily($year,$month,$day,$interval);
}
function set_recur_weekly($year,$month,$day,$interval,$weekdays)
{
$this->cal->set_recur_weekly($year,$month,$day,$interval,$weekdays);
}
function set_recur_monthly_mday($year,$month,$day,$interval)
{
$this->cal->set_recur_monthly_mday($year,$month,$day,$interval);
}
function set_recur_monthly_wday($year,$month,$day,$interval)
{
$this->cal->set_recur_monthly_wday($year,$month,$day,$interval);
}
function set_recur_yearly($year,$month,$day,$interval)
{
$this->cal->set_recur_yearly($year,$month,$day,$interval);
}
/* End mcal equiv functions */
}
?>

View File

@ -1,30 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Maintained and further developed by RalfBecker@outdoor-training.de *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Originaly modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
if(@$GLOBALS['phpgw_info']['server']['calendar_type'] == 'mcal' &&
extension_loaded('mcal') == False)
{
$GLOBALS['phpgw_info']['server']['calendar_type'] = 'sql';
}
/* This will be elminated when ical is fully implemented */
else
{
$GLOBALS['phpgw_info']['server']['calendar_type'] = 'sql';
}
include(PHPGW_INCLUDE_ROOT.'/calendar/inc/class.socalendar__.inc.php');
include(PHPGW_INCLUDE_ROOT.'/calendar/inc/class.socalendar_'.$GLOBALS['phpgw_info']['server']['calendar_type'].'.inc.php');
?>

View File

@ -1,222 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Maintained and further developed by RalfBecker@outdoor-training.de *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Originaly modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
if (@$GLOBALS['phpgw_info']['flags']['included_classes']['socalendar__'])
{
return;
}
$GLOBALS['phpgw_info']['flags']['included_classes']['socalendar__'] = True;
/* include(PHPGW_SERVER_ROOT.'/calendar/setup/setup.inc.php'); */
if(extension_loaded('mcal') == False)
{
define('MCAL_RECUR_NONE',0);
define('MCAL_RECUR_DAILY',1);
define('MCAL_RECUR_WEEKLY',2);
define('MCAL_RECUR_MONTHLY_MDAY',3);
define('MCAL_RECUR_MONTHLY_WDAY',4);
define('MCAL_RECUR_YEARLY',5);
define('MCAL_RECUR_SECONDLY',6);
define('MCAL_RECUR_MINUTELY',7);
define('MCAL_RECUR_HOURLY',8);
define('MCAL_M_SUNDAY',1);
define('MCAL_M_MONDAY',2);
define('MCAL_M_TUESDAY',4);
define('MCAL_M_WEDNESDAY',8);
define('MCAL_M_THURSDAY',16);
define('MCAL_M_FRIDAY',32);
define('MCAL_M_SATURDAY',64);
define('MCAL_M_WEEKDAYS',62);
define('MCAL_M_WEEKEND',65);
define('MCAL_M_ALLDAYS',127);
}
define('MSG_DELETED',0);
define('MSG_MODIFIED',1);
define('MSG_ADDED',2);
define('MSG_REJECTED',3);
define('MSG_TENTATIVE',4);
define('MSG_ACCEPTED',5);
define('MSG_ALARM',6);
define('REJECTED',0);
define('NO_RESPONSE',1);
define('TENTATIVE',2);
define('ACCEPTED',3);
class socalendar__
{
var $event;
var $stream;
var $user;
var $users_status;
var $debug = False;
// var $debug = True;
function socalendar__()
{
}
function maketime($time)
{
return mktime($time['hour'],$time['min'],$time['sec'],$time['month'],$time['mday'],$time['year']);
}
function get_cached_event()
{
return $this->event;
}
function event_init()
{
$this->event = Array();
$this->add_attribute('owner',(int)$this->user);
}
function set_category($category='')
{
$this->add_attribute('category',$category);
}
function set_title($title='')
{
$this->add_attribute('title',$title);
}
function set_description($description='')
{
$this->add_attribute('description',$description);
}
function set_date($element,$year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->add_attribute($element,(int)$year,'year');
$this->add_attribute($element,(int)$month,'month');
$this->add_attribute($element,(int)$day,'mday');
$this->add_attribute($element,(int)$hour,'hour');
$this->add_attribute($element,(int)$min,'min');
$this->add_attribute($element,(int)$sec,'sec');
$this->add_attribute($element,0,'alarm');
}
function set_start($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->set_date('start',$year,$month,$day,$hour,$min,$sec);
}
function set_end($year,$month,$day=0,$hour=0,$min=0,$sec=0)
{
$this->set_date('end',$year,$month,$day,$hour,$min,$sec);
}
function set_alarm($alarm)
{
$this->add_attribute('alarm',(int)$alarm);
}
function set_class($class)
{
$this->add_attribute('public',$class);
}
function set_common_recur($year=0,$month=0,$day=0,$interval=0)
{
$this->add_attribute('recur_interval',(int)$interval);
$this->set_date('recur_enddate',$year,$month,$day,0,0,0);
$this->add_attribute('recur_data',0);
}
function set_recur_none()
{
$this->set_common_recur(0,0,0,0);
$this->add_attribute('recur_type',MCAL_RECUR_NONE);
}
function set_recur_secondly($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_SECONDLY);
}
function set_recur_minutely($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_MINUTELY);
}
function set_recur_hourly($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_HOURLY);
}
function set_recur_daily($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_DAILY);
}
function set_recur_weekly($year,$month,$day,$interval,$weekdays)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_WEEKLY);
$this->add_attribute('recur_data',(int)$weekdays);
}
function set_recur_monthly_mday($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_MONTHLY_MDAY);
}
function set_recur_monthly_wday($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_MONTHLY_WDAY);
}
function set_recur_yearly($year,$month,$day,$interval)
{
$this->set_common_recur((int)$year,(int)$month,(int)$day,$interval);
$this->add_attribute('recur_type',MCAL_RECUR_YEARLY);
}
function fetch_current_stream_event()
{
return $this->fetch_event($this->event['id']);
}
function add_attribute($attribute,$value,$element='**(**')
{
if(is_array($value))
{
reset($value);
}
if($element!='**(**')
{
$this->event[$attribute][$element] = $value;
}
else
{
$this->event[$attribute] = $value;
}
}
}

View File

@ -1,754 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.eGroupWare.org *
* Maintained and further developed by RalfBecker@outdoor-training.de *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Originaly modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
if (@$GLOBALS['phpgw_info']['flags']['included_classes']['socalendar_'])
{
return;
}
$GLOBALS['phpgw_info']['flags']['included_classes']['socalendar_'] = True;
class socalendar_ extends socalendar__
{
var $deleted_events = Array();
var $cal_event;
var $today = Array('raw','day','month','year','full','dow','dm','bd');
function socalendar_()
{
$this->socalendar__();
if (!is_object($GLOBALS['phpgw']->asyncservice))
{
$GLOBALS['phpgw']->asyncservice = CreateObject('phpgwapi.asyncservice');
}
$this->async = &$GLOBALS['phpgw']->asyncservice;
$this->table = 'phpgw_cal';
$this->all_tables = array(
'table' => $this->table,
'user_table' => ($this->user_table = $this->table.'_user'),
'recur_table' => ($this->recur_table = $this->table.'_repeats'),
'extra_table' => ($this->extra_table = $this->table.'_extra'),
);
$this->db = $GLOBALS['phpgw']->db;
$this->db->set_app('calendar');
$this->stream = &$this->db; // legacy support
}
function open($calendar='',$user='',$passwd='',$options='')
{
if($user=='')
{
$this->user = $GLOBALS['phpgw_info']['user']['account_id'];
}
elseif(is_int($user))
{
$this->user = $user;
}
elseif(is_string($user))
{
$this->user = $GLOBALS['phpgw']->accounts->name2id($user);
}
return $this->db;
}
function popen($calendar='',$user='',$passwd='',$options='')
{
return $this->open($calendar,$user,$passwd,$options);
}
function reopen($calendar,$options='')
{
return $this->db;
}
function close($options='')
{
return True;
}
function create_calendar($calendar='')
{
return $calendar;
}
function rename_calendar($old_name='',$new_name='')
{
return $new_name;
}
function delete_calendar($calendar='')
{
$this->db->select($this->table,'cal_id',array('cal_owner' => $calendar),__LINE__,__FILE__);
if($this->db->num_rows())
{
while($this->db->next_record())
{
$this->delete_event((int)$this->db->f('cal_id'));
}
$this->expunge();
}
$this->db->lock(array($this->user_table));
$this->db->delete($this->user_table,array('cal_user_id' => $calendar),__LINE__,__FILE__);
$this->db->unlock();
return $calendar;
}
/*!
@function read_alarms
@abstract read the alarms of a calendar-event specified by $cal_id
@returns array of alarms with alarm-id as key
@note the alarm-id is a string of 'cal:'.$cal_id.':'.$alarm_nr, it is used as the job-id too
*/
function read_alarms($cal_id)
{
$alarms = array();
if ($jobs = $this->async->read('cal:'.(int)$cal_id.':%'))
{
foreach($jobs as $id => $job)
{
$alarm = $job['data']; // text, enabled
$alarm['id'] = $id;
$alarm['time'] = $job['next'];
$alarms[$id] = $alarm;
}
}
return $alarms;
}
/*!
@function read_alarm
@abstract read a single alarm specified by it's $id
@returns array with data of the alarm
@note the alarm-id is a string of 'cal:'.$cal_id.':'.$alarm_nr, it is used as the job-id too
*/
function read_alarm($id)
{
if (!($jobs = $this->async->read($id)))
{
return False;
}
list($id,$job) = each($jobs);
$alarm = $job['data']; // text, enabled
$alarm['id'] = $id;
$alarm['time'] = $job['next'];
//echo "<p>read_alarm('$id')="; print_r($alarm); echo "</p>\n";
return $alarm;
}
/*!
@function save_alarm
@abstract saves a new or updated alarm
@syntax save_alarm($cal_id,$alarm,$id=False)
@param $cal_id Id of the calendar-entry
@param $alarm array with fields: text, owner, enabled, ..
@returns the id of the alarm
*/
function save_alarm($cal_id,$alarm)
{
//echo "<p>save_alarm(cal_id=$cal_id, alarm="; print_r($alarm); echo ")</p>\n";
if (!($id = $alarm['id']))
{
$alarms = $this->read_alarms($cal_id); // find a free alarm#
$n = count($alarms);
do
{
$id = 'cal:'.(int)$cal_id.':'.$n;
++$n;
}
while (@isset($alarms[$id]));
}
else
{
$this->async->cancel_timer($id);
}
$alarm['cal_id'] = $cal_id; // we need the back-reference
$alarm['time'] -= $GLOBALS['phpgw']->datetime->tz_offset; // time should be stored in server timezone
if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm))
{
return False;
}
return $id;
}
/*!
@function delete_alarms($cal_id)
@abstract delete all alarms of a calendar-entry
@returns the number of alarms deleted
*/
function delete_alarms($cal_id)
{
$alarms = $this->read_alarms($cal_id);
foreach($alarms as $id => $alarm)
{
$this->async->cancel_timer($id);
}
return count($alarms);
}
/*!
@function delete_alarm($id)
@abstract delete one alarms identified by its id
@returns the number of alarms deleted
*/
function delete_alarm($id)
{
return $this->async->cancel_timer($id);
}
function fetch_event($event_id,$options='')
{
if(!isset($this->db))
{
return False;
}
$this->db->lock($this->all_tables);
$this->db->select($this->table,'*',array('cal_id'=>$event_id),__LINE__,__FILE__);
if($this->db->num_rows() > 0)
{
$this->event_init();
$this->db->next_record();
// Load the calendar event data from the db into $event structure
// Use http://www.php.net/manual/en/function.mcal-fetch-event.php as the reference
$this->add_attribute('owner',(int)$this->db->f('cal_owner'));
$this->add_attribute('id',(int)$this->db->f('cal_id'));
$this->set_class((int)$this->db->f('cal_public'));
$this->set_category($this->db->f('cal_category'));
$this->set_title(stripslashes($GLOBALS['phpgw']->strip_html($this->db->f('cal_title'))));
$this->set_description(stripslashes($GLOBALS['phpgw']->strip_html($this->db->f('cal_description'))));
$this->add_attribute('uid',$GLOBALS['phpgw']->strip_html($this->db->f('cal_uid')));
$this->add_attribute('location',stripslashes($GLOBALS['phpgw']->strip_html($this->db->f('cal_location'))));
$this->add_attribute('reference',(int)$this->db->f('cal_reference'));
// This is the preferred method once everything is normalized...
//$this->event->alarm = (int)$this->db->f('alarm');
// But until then, do it this way...
//Legacy Support (New)
$datetime = $GLOBALS['phpgw']->datetime->localdates($this->db->f('cal_starttime'));
$this->set_start($datetime['year'],$datetime['month'],$datetime['day'],$datetime['hour'],$datetime['minute'],$datetime['second']);
$datetime = $GLOBALS['phpgw']->datetime->localdates($this->db->f('cal_modified'));
$this->set_date('modtime',$datetime['year'],$datetime['month'],$datetime['day'],$datetime['hour'],$datetime['minute'],$datetime['second']);
$datetime = $GLOBALS['phpgw']->datetime->localdates($this->db->f('cal_endtime'));
$this->set_end($datetime['year'],$datetime['month'],$datetime['day'],$datetime['hour'],$datetime['minute'],$datetime['second']);
//Legacy Support
$this->add_attribute('priority',(int)$this->db->f('cal_priority'));
if($this->db->f('cal_group') || $this->db->f('cal_groups') != 'NULL')
{
for($j=1;$j<count($groups) - 1;$j++)
{
$this->add_attribute('groups',$groups[$j],$j-1);
}
}
$this->db->select($this->recur_table,'*',array('cal_id'=>$event_id),__LINE__,__FILE__);
if($this->db->num_rows())
{
$this->db->next_record();
$this->add_attribute('recur_type',(int)$this->db->f('recur_type'));
$this->add_attribute('recur_interval',(int)$this->db->f('recur_interval'));
$enddate = $this->db->f('recur_enddate');
if($enddate != 0 && $enddate != Null)
{
$datetime = $GLOBALS['phpgw']->datetime->localdates($enddate);
$this->add_attribute('recur_enddate',$datetime['year'],'year');
$this->add_attribute('recur_enddate',$datetime['month'],'month');
$this->add_attribute('recur_enddate',$datetime['day'],'mday');
$this->add_attribute('recur_enddate',$datetime['hour'],'hour');
$this->add_attribute('recur_enddate',$datetime['minute'],'min');
$this->add_attribute('recur_enddate',$datetime['second'],'sec');
}
else
{
$this->add_attribute('recur_enddate',0,'year');
$this->add_attribute('recur_enddate',0,'month');
$this->add_attribute('recur_enddate',0,'mday');
$this->add_attribute('recur_enddate',0,'hour');
$this->add_attribute('recur_enddate',0,'min');
$this->add_attribute('recur_enddate',0,'sec');
}
$this->add_attribute('recur_enddate',0,'alarm');
if($this->debug)
{
echo 'Event ID#'.$this->event['id'].' : Enddate = '.$enddate."<br>\n";
}
$this->add_attribute('recur_data',$this->db->f('recur_data'));
$exception_list = $this->db->f('recur_exception');
$exceptions = Array();
if(strpos(' '.$exception_list,','))
{
$exceptions = explode(',',$exception_list);
}
elseif($exception_list != '')
{
$exceptions[]= $exception_list;
}
$this->add_attribute('recur_exception',$exceptions);
}
//Legacy Support
$this->db->select($this->user_table,'*',array('cal_id'=>$event_id),__LINE__,__FILE__);
if($this->db->num_rows())
{
while($this->db->next_record())
{
if((int)$this->db->f('cal_user_id') == (int)$this->user)
{
$this->add_attribute('users_status',$this->db->f('cal_status'));
}
$this->add_attribute('participants',$this->db->f('cal_status'),(int)$this->db->f('cal_user_id'));
}
}
// Custom fields
$this->db->select($this->extra_table,'*',array('cal_id'=>$event_id),__LINE__,__FILE__);
if($this->db->num_rows())
{
while($this->db->next_record())
{
$this->add_attribute('#'.$this->db->f('cal_extra_name'),$this->db->f('cal_extra_value'));
}
}
}
else
{
$this->event = False;
}
$this->db->unlock();
if ($this->event)
{
$this->event['alarm'] = $this->read_alarms($event_id);
if($this->event['reference'])
{
$this->event['alarm'] += $this->read_alarms($event_id);
}
}
return $this->event;
}
function list_events($startYear,$startMonth,$startDay,$endYear=0,$endMonth=0,$endDay=0,$extra='',$tz_offset=0,$owner_id=0)
{
if(!isset($this->db))
{
return False;
}
$user_where = " AND ($this->user_table.cal_user_id IN (";
if(is_array($owner_id) && count($owner_id))
{
array_walk($owner_id,create_function('$key,&$val','$val = (int) $val;'));
$user_where .= implode(',',$owner_id);
}
else
{
$user_where .= (int)$this->user;
}
/* why ???
$member_groups = $GLOBALS['phpgw']->accounts->membership($this->user);
@reset($member_groups);
while($member_groups != False && list($key,$group_info) = each($member_groups))
{
$member[] = $group_info['account_id'];
}
@reset($member);
// $user_where .= ','.implode(',',$member);
*/
$user_where .= ')) ';
if($this->debug)
{
echo '<!-- '.$user_where.' -->'."\n";
}
$datetime = mktime(0,0,0,$startMonth,$startDay,$startYear) - $tz_offset;
$startDate = "AND ( ( ($this->table.cal_starttime >= $datetime) ";
$enddate = '';
if($endYear != 0 && $endMonth != 0 && $endDay != 0)
{
$edatetime = mktime(23,59,59,(int)$endMonth,(int)$endDay,(int)$endYear) - $tz_offset;
$endDate .= "AND ($this->table.cal_endtime <= $edatetime) ) "
. "OR ( ($this->table.cal_starttime <= $datetime) "
. "AND ($this->table.cal_endtime >= $edatetime) ) "
. "OR ( ($this->table.cal_starttime >= $datetime) "
. "AND ($this->table.cal_starttime <= $edatetime) "
. "AND ($this->table.cal_endtime >= $edatetime) ) "
. "OR ( ($this->table.cal_starttime <= $datetime) "
. "AND ($this->table.cal_endtime >= $datetime) "
. "AND ($this->table.cal_endtime <= $edatetime) ";
}
$endDate .= ') ) ';
$order_by = "ORDER BY $this->table.cal_starttime ASC, $this->table.cal_endtime ASC, $this->table.cal_priority ASC";
if($this->debug)
{
echo "SQL : ".$user_where.$startDate.$endDate.$extra."<br>\n";
}
return $this->get_event_ids(False,$user_where.$startDate.$endDate.$extra.$order_by);
}
function append_event()
{
$this->save_event($this->event);
$this->send_update(MSG_ADDED,$this->event->participants,'',$this->event);
return $this->event['id'];
}
function store_event()
{
return $this->save_event($this->event);
}
function delete_event($event_id)
{
$this->deleted_events[] = $event_id;
}
function snooze($event_id)
{
//Turn off an alarm for an event
//Returns true.
}
function list_alarms($begin_year='',$begin_month='',$begin_day='',$end_year='',$end_month='',$end_day='')
{
//Return a list of events that has an alarm triggered at the given datetime
//Returns an array of event ID's
}
// The function definition doesn't look correct...
// Need more information for this function
function next_recurrence($weekstart,$next)
{
// return next_recurrence (int stream, int weekstart, array next);
}
function expunge()
{
if(count($this->deleted_events) <= 0)
{
return 1;
}
$this_event = $this->event;
$this->db->lock($this->all_tables);
foreach($this->deleted_events as $cal_id)
{
foreach ($this->all_tables as $table)
{
$this->db->delete($table,array('cal_id'=>$cal_id),__LINE__,__FILE__);
}
}
$this->db->unlock();
foreach($this->deleted_events as $cal_id)
{
$this->delete_alarms($cal_id);
}
$this->deleted_events = array();
$this->event = $this_event;
return 1;
}
/***************** Local functions for SQL based Calendar *****************/
function get_event_ids($search_repeats=False,$extra='',$search_extra=False)
{
$from = $where = ' ';
if($search_repeats)
{
$from = ",$this->recur_table ";
$where = "AND ($this->recur_table.cal_id = $this->table.cal_id) ";
}
if($search_extra)
{
$from .= "LEFT JOIN $this->extra_table ON $this->extra_table.cal_id = $this->table.cal_id ";
}
$sql = "SELECT DISTINCT $this->table.cal_id,$this->table.cal_starttime,$this->table.cal_endtime,$this->table.cal_priority".
" FROM $this->user_table,$this->table$from".
" WHERE ($this->user_table.cal_id=$this->table.cal_id) $where $extra";
if($this->debug)
{
echo "FULL SQL : ".$sql."<br>\n";
}
$this->db->query($sql,__LINE__,__FILE__);
$retval = Array();
if($this->db->num_rows() == 0)
{
if($this->debug)
{
echo "No records found!<br>\n";
}
return $retval;
}
while($this->db->next_record())
{
$retval[] = (int)$this->db->f('cal_id');
}
if($this->debug)
{
echo "Records found!<br>\n";
}
return $retval;
}
function generate_uid($event)
{
if (!$event['id']) return False; // we need the id !!!
$suffix = $GLOBALS['phpgw_info']['server']['hostname'] ? $GLOBALS['phpgw_info']['server']['hostname'] : 'local';
$prefix = 'cal-'.$event['id'].'-'.$GLOBALS['phpgw_info']['server']['install_id'];
return $prefix . '@' . $suffix;
}
function save_event(&$event)
{
$this->db->lock($this->all_tables);
if($event['id'] == 0)
{
$this->db->insert($this->table,array(
'cal_uid' => '*new*',
'cal_title' => $event['title'],
'cal_owner' => $event['owner'],
'cal_priority' => $event['priority'],
'cal_public' => $event['public'],
'cal_category' => $event['category']
),False,__LINE__,__FILE__);
$event['id'] = $this->db->get_last_insert_id($this->table,'cal_id');
}
// new event or new created referencing event
if (!$event['uid'] || $event['reference'] && strstr($event['uid'],'cal-'.$event['reference'].'-'))
{
$event['uid'] = $this->generate_uid($event);
}
$this->db->update($this->table,array(
'cal_uid' => $event['uid'],
'cal_owner' => $event['owner'],
'cal_starttime' => $this->maketime($event['start']) - $GLOBALS['phpgw']->datetime->tz_offset,
'cal_modified' => time() - $GLOBALS['phpgw']->datetime->tz_offset,
'cal_endtime' => $this->maketime($event['end']) - $GLOBALS['phpgw']->datetime->tz_offset,
'cal_priority' => $event['priority'],
'cal_category' => $event['category'],
'cal_type' => $event['recur_type'] != MCAL_RECUR_NONE ? 'M' : 'E',
'cal_public' => $event['public'],
'cal_title' => $event['title'],
'cal_description'=> $event['description'],
'cal_location' => $event['location'],
'cal_groups' => is_array($event['groups']) ? ','.implode(',',$event['groups']).',' : '',
'cal_reference' => $event['reference'],
),array('cal_id' => $event['id']),__LINE__,__FILE__);
$this->db->delete($this->user_table,array('cal_id' => $event['id']),__LINE__,__FILE__);
foreach($event['participants'] as $uid => $status)
{
$this->db->insert($this->user_table,array(
'cal_id' => $event['id'],
'cal_user_id' => $uid,
'cal_status' => (int)$uid == $event['owner'] ? 'A' : $status,
),False,__LINE__,__FILE__);
}
if($event['recur_type'] != MCAL_RECUR_NONE)
{
$this->db->insert($this->recur_table,array(
'recur_type' => $event['recur_type'],
'recur_enddate' => $event['recur_enddate']['month'] != 0 && $event['recur_enddate']['mday'] != 0 && $event['recur_enddate']['year'] != 0 ?
$this->maketime($event['recur_enddate']) - $GLOBALS['phpgw']->datetime->tz_offset : 0,
'recur_data' => $event['recur_data'],
'recur_interval' => $event['recur_interval'],
'recur_exception'=> is_array($event['recur_exception']) ? implode(',',$event['recur_exception']) : '',
),array('cal_id' => $event['id']),__LINE__,__FILE__);
}
else
{
$this->db->delete($this->recur_table,array('cal_id' => $event['id']),__LINE__,__FILE__);
}
// Custom fields
foreach($event as $name => $value)
{
if ($name[0] == '#')
{
if (strlen($value))
{
$this->db->insert($this->extra_table,array(
'cal_extra_value' => $value,
),array(
'cal_id' => $event['id'],
'cal_extra_name' => substr($name,1),
),__LINE__,__FILE__);
}
else
{
$this->db->delete($this->extra_table,array(
'cal_id' => $event['id'],
'cal_extra_name' => substr($name,1),
),__LINE__,__FILE__);
}
}
}
print_debug('Event Saved: ID #',$event['id']);
$this->db->unlock();
if (is_array($event['alarm']))
{
foreach ($event['alarm'] as $alarm) // this are all new alarms
{
$this->save_alarm($event['id'],$alarm);
}
}
$GLOBALS['phpgw_info']['cal_new_event_id'] = $event['id'];
$this->event = $event;
return True;
}
function get_alarm($cal_id)
{
$alarms = $this->read_alarms($cal_id);
$ret = False;
foreach($alarms as $alarm)
{
if ($alarm['owner'] == $this->user || !$alarm['owner'])
{
$ret[$alarm['time']] = $alarm['text'];
}
}
return $ret;
}
function set_status($id,$owner,$status)
{
$status_code_short = Array(
REJECTED => 'R',
NO_RESPONSE => 'U',
TENTATIVE => 'T',
ACCEPTED => 'A'
);
$this->db->update($this->user_table,array(
'cal_status' => $status_code_short[$status],
),array(
'cal_id' => $id,
'cal_user_id' => $owner,
),__LINE__,__FILE__);
return True;
}
// End of ICal style support.......
function group_search($owner=0)
{
$owner = ($owner==$GLOBALS['phpgw_info']['user']['account_id']?0:$owner);
$groups = substr($GLOBALS['phpgw']->common->sql_search("$this->table.groups",(int)$owner),4);
if (!$groups)
{
return '';
}
else
{
return "($this->table.is_public=2 AND (". $groups .')) ';
}
}
function splittime_($time)
{
$temp = array('hour','minute','second','ampm');
$time = strrev($time);
$second = (int)strrev(substr($time,0,2));
$minute = (int)strrev(substr($time,2,2));
$hour = (int)strrev(substr($time,4));
$temp['second'] = (int)$second;
$temp['minute'] = (int)$minute;
$temp['hour'] = (int)$hour;
$temp['ampm'] = ' ';
return $temp;
}
function date_to_epoch($d)
{
return $this->localdates(mktime(0,0,0,(int)(substr($d,4,2)),(int)(substr($d,6,2)),(int)(substr($d,0,4))));
}
function list_dirty_events($lastmod=-1,$repeats=false)
{
if(!isset($this->db))
{
return False;
}
$lastmod = (int) $lastmod;
$repeats = (bool) $repeats;
$user_where = " AND $this->user_table.cal_user_id=".(int)$this->user;
/* why not used ???
if ($member_groups = $GLOBALS['phpgw']->accounts->membership($this->user))
{
foreach($member_groups as $key => $group_info)
{
$member[] = $group_info['account_id'];
}
}
$user_where .= ','.implode(',',$member) . ')) ';
*/
if($this->debug)
{
echo '<!-- '.$user_where.' -->'."\n";
}
if($lastmod > 0)
{
$wheremod = "AND $this->table.cal_modified=".(int)$lastmod;
}
$order_by = " ORDER BY $this->table.cal_id ASC";
if($this->debug)
{
echo "SQL : ".$user_where.$wheremod.$extra."<br>\n";
}
return $this->get_event_ids($repeats,$user_where.$wheremod.$extra.$order_by);
}
}

View File

@ -13,6 +13,14 @@
/* $Id$ */
/**
* Storage layer for calendar holidays
*
* @package calendar
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @author Mark Peters <skeeter@phpgroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class soholiday
{
var $debug = False;
@ -20,9 +28,9 @@
function soholiday()
{
$this->db = $GLOBALS['phpgw']->db;
$this->db = clone($GLOBALS['egw']->db);
$this->db->set_app('calendar');
$this->table = 'phpgw_cal_holidays';
$this->table = 'egw_cal_holidays';
}
/* Begin Holiday functions */
@ -72,7 +80,7 @@
$holidays[] = Array(
'index' => $this->db->f('hol_id'),
'locale' => $this->db->f('hol_locale'),
'name' => $GLOBALS['phpgw']->strip_html($this->db->f('hol_name')),
'name' => $GLOBALS['egw']->strip_html($this->db->f('hol_name')),
'day' => (int)$this->db->f('hol_mday'),
'month' => (int)$this->db->f('hol_month_num'),
'occurence' => (int)$this->db->f('hol_occurence'),
@ -116,7 +124,6 @@
}
$this->db->select($this->table,'*',array('hol_id'=>$id),__LINE__,__FILE__);
$this->store_to_array($holidays);
@reset($holidays);
return $holidays[0];
}
@ -127,7 +134,7 @@
function delete_locale($locale)
{
$this->db->delete($this->table,array('hol_local' => $locale),__LINE__,__FILE__);
$this->db->delete($this->table,array('hol_locale' => $locale),__LINE__,__FILE__);
}
/* Private functions */
@ -196,4 +203,3 @@
return $retval;
}
}
?>

View File

@ -1,217 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
class uialarm
{
var $template;
var $template_dir;
var $bo;
var $event;
var $debug = False;
// var $debug = True;
var $tz_offset;
var $theme;
var $public_functions = array(
'manager' => True
);
function uialarm()
{
$GLOBALS['phpgw']->nextmatchs = CreateObject('phpgwapi.nextmatchs');
$GLOBALS['phpgw']->browser = CreateObject('phpgwapi.browser');
$this->theme = $GLOBALS['phpgw_info']['theme'];
$this->bo = CreateObject('calendar.boalarm');
if($this->debug)
{
echo "BO Owner : ".$this->bo->owner."<br>\n";
}
$this->template_dir = $GLOBALS['phpgw']->common->get_tpl_dir('calendar');
if (!is_object($GLOBALS['phpgw']->html))
{
$GLOBALS['phpgw']->html = CreateObject('phpgwapi.html');
}
$this->html = &$GLOBALS['phpgw']->html;
// jscalendar is needed by the new navigation-menu AND it need to be loaded befor the header !!!
if (!is_object($GLOBALS['phpgw']->jscalendar))
{
$GLOBALS['phpgw']->jscalendar = CreateObject('phpgwapi.jscalendar');
}
}
function prep_page()
{
if ($this->bo->cal_id <= 0 ||
!$this->event = $this->bo->read_entry($this->bo->cal_id))
{
$GLOBALS['phpgw']->redirect_link('/index.php',Array(
'menuaction' => 'calendar.uicalendar.index'
));
}
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['calendar']['title'].' - '.lang('Alarm Management');
$GLOBALS['phpgw']->common->phpgw_header();
$this->template = CreateObject('phpgwapi.Template',$this->template_dir);
$this->template->set_unknowns('remove');
$this->template->set_file(
Array(
'alarm' => 'alarm.tpl'
)
);
$this->template->set_block('alarm','alarm_management','alarm_management');
$this->template->set_block('alarm','alarm_headers','alarm_headers');
$this->template->set_block('alarm','list','list');
$this->template->set_block('alarm','hr','hr');
$this->template->set_block('alarm','buttons','buttons');
}
function output_template_array($row,$list,$var)
{
if (!isset($var['tr_color']))
{
$var['tr_color'] = $GLOBALS['phpgw']->nextmatchs->alternate_row_color();
}
$this->template->set_var($var);
$this->template->parse($row,$list,True);
}
/* Public functions */
function manager()
{
if ($_POST['cancel'])
{
$GLOBALS['phpgw']->redirect_link('/index.php','menuaction='.($_POST['return_to'] ? $_POST['return_to'] : 'calendar.uicalendar.index'));
}
if ($_POST['delete'] && count($_POST['alarm']))
{
if ($this->bo->delete($_POST['alarm']) < 0)
{
echo '<center>'.lang('You do not have permission to delete this alarm !!!').'</center>';
$GLOBALS['phpgw']->common->phpgw_exit(True);
}
}
if (($_POST['enable'] || $_POST['disable']) && count($_POST['alarm']))
{
if ($this->bo->enable($_POST['alarm'],$_POST['enable']) < 0)
{
echo '<center>'.lang('You do not have permission to enable/disable this alarm !!!').'</center>';
$GLOBALS['phpgw']->common->phpgw_exit(True);
}
}
$this->prep_page();
if ($_POST['add'])
{
$time = (int)($_POST['time']['days'])*24*3600 +
(int)($_POST['time']['hours'])*3600 +
(int)($_POST['time']['mins'])*60;
if ($time > 0 && !$this->bo->add($this->event,$time,$_POST['owner']))
{
echo '<center>'.lang('You do not have permission to add alarms to this event !!!').'</center>';
$GLOBALS['phpgw']->common->phpgw_exit(True);
}
}
if (!ExecMethod('calendar.uicalendar.view_event',$this->event))
{
echo '<center>'.lang('You do not have permission to read this record!').'</center>';
$GLOBALS['phpgw']->common->phpgw_exit(True);
}
echo "<br>\n";
$GLOBALS['phpgw']->template->set_var('th_bg',$this->theme['th_bg']);
$GLOBALS['phpgw']->template->set_var('hr_text',lang('Alarms').':');
$GLOBALS['phpgw']->template->fp('row','hr',True);
$GLOBALS['phpgw']->template->pfp('phpgw_body','view_event');
$var = Array(
'tr_color' => $this->theme['th_bg'],
'lang_select' => lang('Select'),
'lang_time' => lang('Time'),
'lang_text' => lang('Text'),
'lang_owner' => lang('Owner'),
'lang_enabled' => lang('enabled'),
'lang_disabled' => lang('disabled'),
);
if($this->event['alarm'])
{
$this->output_template_array('rows','alarm_headers',$var);
foreach($this->event['alarm'] as $key => $alarm)
{
if (!$this->bo->check_perms(PHPGW_ACL_READALARM,$alarm['owner']))
{
continue;
}
$var = Array(
'field' => $GLOBALS['phpgw']->common->show_date($alarm['time']),
//'data' => $alarm['text'],
'data' => lang('Email Notification'),
'owner' => $GLOBALS['phpgw']->common->grab_owner_name($alarm['owner']),
'enabled' => $this->html->image('calendar',$alarm['enabled']?'enabled':'disabled',$alarm['enabled']?'enabled':'disabled','width="13" height="13"'),
'select' => $this->html->checkbox("alarm[$alarm[id]]")
);
if ($this->bo->check_perms(PHPGW_ACL_DELETEALARM,$alarm['owner']))
{
++$to_delete;
}
$this->output_template_array('rows','list',$var);
}
$this->template->set_var('enable_button',$this->html->submit_button('enable','Enable'));
$this->template->set_var('disable_button',$this->html->submit_button('disable','Disable'));
if ($to_delete)
{
$this->template->set_var('delete_button',$this->html->submit_button('delete','Delete',"return confirm('".lang("Are you sure\\nyou want to\\ndelete these alarms?")."')"));
}
$this->template->parse('rows','buttons',True);
}
if (isset($this->event['participants'][(int)$GLOBALS['phpgw_info']['user']['account_id']]))
{
$this->template->set_var(Array(
'input_days' => $this->html->select('time[days]',$_POST['time']['days'],range(0,31),True).' '.lang('days'),
'input_hours' => $this->html->select('time[hours]',$_POST['time']['hours'],range(0,24),True).' '.lang('hours'),
'input_minutes' => $this->html->select('time[mins]',$_POST['time']['mins'],range(0,60),True).' '.lang('minutes').' '.lang('before the event'),
'input_owner' => $this->html->select('owner',$GLOBALS['phpgw_info']['user']['account_id'],$this->bo->participants($this->event,True),True),
'input_add' => $this->html->submit_button('add','Add Alarm'),
));
}
$this->template->set_var(Array(
'action_url' => $GLOBALS['phpgw']->link('/index.php',Array('menuaction'=>'calendar.uialarm.manager')),
'hidden_vars' => $this->html->input_hidden(array(
'cal_id' => $this->bo->cal_id,
'return_to' => $_POST['return_to']
)),
'lang_enable' => lang('Enable'),
'lang_disable' => lang('Disable'),
'input_cancel' => $this->html->submit_button('cancel','Cancel')
));
//echo "<p>alarm_management='".htmlspecialchars($this->template->get_var('alarm_management'))."'</p>\n";
$this->template->pfp('out','alarm_management');
}
}
?>

View File

@ -1,8 +1,8 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar - shared base-class of all calendar UserInterfaces *
* eGroupWare - Calendar - shared base-class of all calendar UI classes *
* http://www.egroupware.org *
* Written and (c) 2004 by Ralf Becker <RalfBecker@outdoor-training.de> *
* Written and (c) 2004/5 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
@ -13,62 +13,144 @@
/* $Id$ */
/**
* shared base-class of all calendar UserInterfaces
* Shared base-class of all calendar UserInterface classes
*
* It manages eg. the state of the controls in the UI and generated the calendar navigation (sidebox-menu)
*
* The new UI, BO and SO classes have a strikt definition, in which time-zone they operate:
* UI only operates in user-time, so there have to be no conversation at all !!!
* BO's functions take and return user-time only (!), they convert internaly everything to servertime, because
* SO operates only on server-time
*
* All permanent debug messages of the calendar-code should done via the debug-message method of the bocal class !!!
*
* @package calendar
* @author RalfBecker@outdoor-training.de
* @license GPL
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2004/5 by RalfBecker-At-outdoor-training.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class uical
{
/**
* @var $debug mixed integer level or string function-name
*/
var $debug=False;
var $debug=false;
/**
* @var $bo class bocal
*/
var $bo;
var $bo,$jscal,$html,$datetime,$cats,$accountsel;
/**
* @var array $common_prefs reference to $GLOBALS['egw_info']['user']['preferences']['common']
*/
var $common_prefs;
/**
* @var array $cal_prefs reference to $GLOBALS['egw_info']['user']['preferences']['calendar']
*/
var $cal_prefs;
/**
* @var int $wd_start user pref. workday start
*/
var $wd_start;
/**
* @var int $wd_start user pref. workday end
*/
var $wd_end;
/**
* @var int $interval_m user pref. interval
*/
var $interval_m;
/**
* @var int $user account_id of loged in user
*/
var $user;
/**
* @var string $date session-state: date (Ymd) of shown view
*/
var $date;
/**
* @var int $cat_it session-state: selected category
*/
var $cat_id;
/**
* @var int $filter session-state: selected filter
*/
var $filter;
/**
* @var int/array $owner session-state: selected owner(s) of shown calendar(s)
*/
var $owner;
/**
* @var boolean $multiple session-state: true multiple owners selected, false single user/group
*/
var $multiple;
/**
* @var int $num_month session-state: number of month shown
*/
var $num_month;
/**
* @var string $sortby session-state: filter of planner: 'category' or 'user'
*/
var $sortby;
/**
* @var string $view session-state: selected view
*/
var $view;
/**
* @var string $view menuaction of the selected view
*/
var $view_menuaction;
/**
* @var int $first first day of the shown view
*/
var $first;
/**
* @var int $last last day of the shown view
*/
var $last;
/**
* Constructor
*
* @param boolean $use_bocalupdate use bocalupdate as parenent instead of bocal
* @param array $set_states=null to manualy set / change one of the states, default NULL = use $_REQUEST
*/
function uical()
function uical($use_bocalupdate=false,$set_states=NULL)
{
foreach(array(
'bo' => 'calendar.bocal',
'bo' => $use_bocalupdate ? 'calendar.bocalupdate' : 'calendar.bocal',
'jscal' => 'phpgwapi.jscalendar', // for the sidebox-menu
'html' => 'phpgwapi.html',
'datetime' => 'phpgwapi.datetime',
'cats' => 'phpgwapi.categories',
'accountsel' => 'phpgwapi.uiaccountsel',
) as $my => $app_class)
{
list(,$class) = explode('.',$app_class);
if (!is_object($GLOBALS['phpgw']->$class))
if (!is_object($GLOBALS['egw']->$class))
{
$GLOBALS['phpgw']->$class = CreateObject($app_class);
$GLOBALS['egw']->$class =& CreateObject($app_class);
}
$this->$my = &$GLOBALS['phpgw']->$class;
$this->$my = &$GLOBALS['egw']->$class;
}
$this->common_prefs = &$GLOBALS['phpgw_info']['user']['preferences']['common'];
$this->cal_prefs = &$GLOBALS['phpgw_info']['user']['preferences']['calendar'];
$this->wd_start = 60*$this->cal_prefs['workdaystarts'];
$this->wd_end = 60*$this->cal_prefs['workdayends'];
$this->interval_m = $this->cal_prefs['interval'];
if (!is_object($this->cats))
{
$this->cats =& CreateObject('phpgwapi.categories','','calendar'); // we need an own instance to get the calendar cats
}
$this->common_prefs = &$GLOBALS['egw_info']['user']['preferences']['common'];
$this->cal_prefs = &$GLOBALS['egw_info']['user']['preferences']['calendar'];
$this->wd_start = 60*$this->cal_prefs['workdaystarts'];
$this->wd_end = 60*$this->cal_prefs['workdayends'];
$this->interval_m = $this->cal_prefs['interval'];
$this->user = $GLOBALS['phpgw_info']['user']['account_id'];
$this->user = $GLOBALS['egw_info']['user']['account_id'];
$this->manage_states();
$this->manage_states($set_states);
$GLOBALS['uical'] = &$this; // make us available for ExecMethod, else it creates a new instance
// calendar does not work with hidden sidebox atm.
unset($GLOBALS['phpgw_info']['user']['preferences']['common']['auto_hide_sidebox']);
unset($GLOBALS['egw_info']['user']['preferences']['common']['auto_hide_sidebox']);
}
/**
@ -83,12 +165,12 @@ class uical
* - filter: the used filter: no filter / all or only privat
* - num_month: number of month shown in the planner
* - sortby: category or user of planner
* - return_to: the view the dialogs should return to
* - view: the actual view, where dialogs should return to or which they refresh
* @param set_states array to manualy set / change one of the states, default NULL = use $_REQUEST
*/
function manage_states($set_states=NULL)
{
$states = $states_session = $GLOBALS['phpgw']->session->appsession('session_data','calendar');
$states = $states_session = $GLOBALS['egw']->session->appsession('session_data','calendar');
if (is_null($set_states))
{
@ -108,7 +190,9 @@ class uical
'num_month' => 1,
'save_owner' => 0,
'sortby' => 'category',
'planner_days'=> 0, // full month
'multiple' => 0,
'view' => $this->bo->cal_prefs['defaultcalendar'],
) as $state => $default)
{
if (isset($set_states[$state]))
@ -129,14 +213,36 @@ class uical
}
$this->$state = $states[$state];
}
if (substr($this->view,0,8) == 'planner_')
{
$states['sortby'] = $this->sortby = $this->view == 'planner_cat' ? 'category' : 'user';
$states['view'] = $this->view = 'planner';
}
// set the actual view as return_to
list($app,$class,$func) = explode('.',$_GET['menuaction']);
if ($class == 'uiviews' && $func)
if (($class == 'uiviews' || $class == 'uilist') && $func)
{
$states['return_to'] = $_GET['menuaction'];
// if planner_start_with_group is set in the users prefs: switch owner for planner to planner_start_with_group and back
if ($this->cal_prefs['planner_start_with_group'])
{
if ($func == 'planner' && $this->view != 'planner' && $this->owner == $this->user)
{
//echo "<p>switched for planner to {$this->cal_prefs['planner_start_with_group']}, view was $this->view, func=$func, owner was $this->owner</p>\n";
$states['save_owner'] = $this->save_owner = $this->owner;
$states['owner'] = $this->owner = $this->cal_prefs['planner_start_with_group'];
}
elseif ($func != 'planner' && $this->view == 'planner' && $this->owner == $this->cal_prefs['planner_start_with_group'] && $this->save_owner)
{
//echo "<p>switched back to $this->save_owner, view was $this->view, func=$func, owner was $this->owner</p>\n";
$states['owner'] = $this->owner = $this->save_owner;
$states['save_owner'] = $this->save_owner = 0;
}
}
$this->view = $states['view'] = $func;
}
$this->view_menuaction = $this->view == 'listview' ? 'calendar.uilist.listview' : 'calendar.uiviews.'.$this->view;
// deal with group-owners
if (substr($this->owner,0,2) == 'g_' || $GLOBALS['phpgw']->accounts->get_type($this->owner) == 'g')
if (substr($this->owner,0,2) == 'g_' || $GLOBALS['egw']->accounts->get_type($this->owner) == 'g')
{
$this->set_owner_to_group($this->owner);
$states['owner'] = $this->owner;
@ -145,7 +251,7 @@ class uical
if ($this->debug > 0 || $this->debug == 'menage_states') $this->bo->debug_message('uical::manage_states(%1) session was %2, states now %3, is_group=%4, g_owner=%5',True,$set_states,$states_session,$states,$this->is_group,$this->g_owner);
// save the states in the session
$GLOBALS['phpgw']->session->appsession('session_data','calendar',$states);
$GLOBALS['egw']->session->appsession('session_data','calendar',$states);
}
/**
@ -159,13 +265,13 @@ class uical
$this->owner = (int) (substr($owner,0,2) == 'g_' ? substr($owner,2) : $owner);
$this->is_group = True;
$this->g_owner = Array();
$members = $GLOBALS['phpgw']->accounts->member($this->owner);
$members = $GLOBALS['egw']->accounts->member($this->owner);
if (is_array($members))
{
foreach($members as $user)
{
// use only members which gave the user a read-grant
if ($this->bo->check_perms(PHPGW_ACL_READ,0,$user['account_id']))
if ($this->bo->check_perms(EGW_ACL_READ,0,$user['account_id']))
{
$this->g_owner[] = $user['account_id'];
}
@ -182,8 +288,8 @@ class uical
*/
function event_icons($event)
{
$is_private = !$event['public'] && !$this->bo->check_perms(PHPGW_ACL_READ,$event);
$viewable = !$this->bo->printer_friendly && $this->bo->check_perms(PHPGW_ACL_READ,$event);
$is_private = !$event['public'] && !$this->bo->check_perms(EGW_ACL_READ,$event);
$viewable = !$this->bo->printer_friendly && $this->bo->check_perms(EGW_ACL_READ,$event);
if (!$is_private)
{
@ -191,16 +297,12 @@ class uical
{
$icons[] = $this->html->image('calendar','high',lang('high priority'));
}
if($event['recur_type'] == MCAL_RECUR_NONE)
{
//$icons[] = $this->html->image('calendar','circle',lang('single event'));
}
else
if($event['recur_type'] != MCAL_RECUR_NONE)
{
$icons[] = $this->html->image('calendar','recur',lang('recurring event'));
}
$icons[] = $this->html->image('calendar',count($event['participants']) > 1 ? 'multi_3' : 'single',
implode(",\n",$this->bo->participants($event['participants'])));
$icons[] = $this->html->image('calendar',count($event['participants']) > 1 ? 'users' : 'single',
implode(",\n",$this->bo->participants($event)));
}
if($event['public'] == 0)
{
@ -210,6 +312,18 @@ class uical
{
$icons[] = $this->html->image('calendar','alarm',lang('alarm'));
}
foreach($event['participants'] as $participant => $status)
{
if(is_numeric($participant)) continue;
if(isset($this->bo->resources[$participant{0}]) && isset($this->bo->resources[$participant{0}]['icon']) && !$seticon[$participant{0}])
{
$seticon[$participant{0}] = true;
$icons[] = $this->html->image($this->bo->resources[$participant{0}]['app'],
($this->bo->resources[$participant{0}]['icon'] ? $this->bo->resources[$participant{0}]['icon'] : 'navbar'),
lang($this->bo->resources[$participant{0}]['app']),
'width="16px" height="16px"');
}
}
return $icons;
}
@ -228,7 +342,7 @@ class uical
{
$onchange="location=location+(location.search.length ? '&' : '?')+'".$name."='+this.value;";
}
$select = ' <select style="width: 100%;" name="'.$name.'" onchange="'.$onchange.'" title="'.
$select = ' <select style="width: 185px;" name="'.$name.'" onchange="'.$onchange.'" title="'.
lang('Select a %1',lang($title)).'">'.
$options."</select>\n";
@ -239,6 +353,49 @@ class uical
);
}
/**
* Generate a link to add an event, incl. the necessary popup
*
* @param string $content content of the link
* @param string $date=null which date should be used as start- and end-date, default null=$this->date
* @param int $hour=null which hour should be used for the start, default null=$this->hour
* @param int $minute=0 start-minute
* @return string the link incl. content
*/
function add_link($content,$date=null,$hour=null,$minute=0)
{
$vars = array(
'menuaction'=>'calendar.uiforms.edit',
'date' => $date ? $date : $this->date,
);
if (!is_null($hour))
{
$vars['hour'] = $hour;
$vars['minute'] = $minute;
}
return $this->html->a_href($content,'/index.php',$vars,' target="_blank" title="'.$this->html->htmlspecialchars(lang('Add')).
'" onclick="'.$this->popup('this.href','this.target').'; return false;"');
}
/**
* returns javascript to open a popup window: window.open(...)
*
* @param string $link link or this.href
* @param string $target='_blank' name of target or this.target
* @param int $width=750 width of the window
* @param int $height=400 height of the window
* @return string javascript (using single quotes)
*/
function popup($link,$target='_blank',$width=750,$height=410)
{
return 'egw_openWindowCentered2('.($link == 'this.href' ? $link : "'".$link."'").','.
($target == 'this.target' ? $target : "'".$target."'").",$width,$height,'yes')";
return 'window.open('.($link == 'this.href' ? $link : "'".$link."'").','.
($target == 'this.target' ? $target : "'".$target."'").','.
"'dependent=yes,width=$width,height=$height,scrollbars=yes,status=yes')";
}
/**
* creates the content for the sidebox-menu, called as hook
*/
@ -252,33 +409,36 @@ class uical
$n = 0; // index for file-array
$planner_days_for_view = false;
switch($this->view)
{
case 'month': $planner_days_for_view = 0; break;
case 'week': $planner_days_for_view = $this->cal_prefs['days_in_weekview'] == 5 ? 5 : 7; break;
case 'day': $planner_days_for_view = 1; break;
}
// Toolbar with the views
$views = '<table style="width: 100%;"><tr>'."\n";
foreach(array(
'add' => array('icon'=>'new3','text'=>'add','menuaction'=>'calendar.uicalendar.add'),
'day' => array('icon'=>'today','text'=>'Today','menuaction' => 'calendar.uiviews.day'),
'week' => array('icon'=>'week','text'=>'This week','menuaction' => 'calendar.uiviews.week'),
'month' => array('icon'=>'month','text'=>'This month','menuaction' => 'calendar.uiviews.month'),
'year' => array('icon'=>'year','text'=>'This year','menuaction' => 'calendar.uicalendar.year'),
'planner' => array('icon'=>'planner','text'=>'Group Planner','menuaction' => 'calendar.uicalendar.planner'),
'matrixselect' => array('icon'=>'view','text'=>'Daily Matrix View','menuaction' => 'calendar.uicalendar.matrixselect'),
'add' => array('icon'=>'new','text'=>'add'),
'day' => array('icon'=>'today','text'=>'Today','menuaction' => 'calendar.uiviews.day','date' => $this->bo->date2string($this->bo->now_su)),
'week' => array('icon'=>'week','text'=>'Weekview','menuaction' => 'calendar.uiviews.week'),
'month' => array('icon'=>'month','text'=>'Monthview','menuaction' => 'calendar.uiviews.month'),
'planner' => array('icon'=>'planner','text'=>'Group planner','menuaction' => 'calendar.uiviews.planner','sortby' => $this->sortby)+
($planner_days_for_view !== false ? array('planner_days' => $planner_days_for_view) : array()),
'list' => array('icon'=>'list','text'=>'Listview','menuaction'=>'calendar.uilist.listview'),
) as $view => $data)
{
if ($view == 'add' && $this->owner != $this->user && !$this->bo->check_perms(PHPGW_ACL_ADD,0,$this->owner))
{
continue; // we dont have permission add events to the cal of $this->owner ==> skip the icon
}
$vars = $link_vars;
$vars['menuaction'] = $data['menuaction'];
if ($view == 'day')
{
$vars['date'] = $this->bo->date2string($this->bo->now_su); // go to today
}
$views .= '<td align="center"><a href="'.$GLOBALS['phpgw']->link('/index.php',$vars).'"><img src="'.
$GLOBALS['phpgw']->common->find_image('calendar',$data['icon']).
'" title="'.lang($data['text']).'"></a></td>'."\n";
$icon = array_shift($data);
$title = array_shift($data);
$vars = array_merge($link_vars,$data);
$icon = $this->html->image('calendar',$icon,lang($title));
$link = $view == 'add' ? $this->add_link($icon) : $this->html->a_href($icon,'/index.php',$vars);
$views .= '<td align="center">'.$link."</a></td>\n";
}
$views .= "</tr></table>\n";
$file[++$n] = array('text' => $views,'no_lang' => True,'link' => False,'icon' => False);
// special views and view-options menu
@ -292,15 +452,10 @@ class uical
array(
'text' => lang('dayview'),
'value' => 'menuaction=calendar.uiviews.day',
'selected' => $_GET['menuaction'] == 'calendar.uiviews.day' && $_GET['days'] != 2,
'selected' => $_GET['menuaction'] == 'calendar.uiviews.day',
),
/*array(
'text' => lang('two dayview'),
'value' => 'menuaction=calendar.uiviews.week&days=2',
'selected' => $_GET['menuaction'] == 'calendar.uiviews.day' && $_GET['days'] == 2,
),*/
array(
'text' => lang('weekview'),
'text' => lang('weekview with weekend'),
'value' => 'menuaction=calendar.uiviews.week&days=7',
'selected' => $_GET['menuaction'] == 'calendar.uiviews.week' && $this->cal_prefs['days_in_weekview'] != 5,
),
@ -314,71 +469,83 @@ class uical
'value' => 'menuaction=calendar.uiviews.month',
'selected' => $_GET['menuaction'] == 'calendar.uiviews.month',
),
array(
'text' => lang('yearview'),
'value' => 'menuaction=calendar.uicalendar.year',
'selected' => $_GET['menuaction'] == 'calendar.uicalendar.year',
),
array(
'text' => lang('planner by category'),
'value' => 'menuaction=calendar.uicalendar.planner&sortby=category',
'selected' => $_GET['menuaction'] == 'calendar.uicalendar.planner' && $this->sort_by != 'user',
'value' => 'menuaction=calendar.uiviews.planner&sortby=category'.
($planner_days_for_view !== false ? '&planner_days='.$planner_days_for_view : ''),
'selected' => $_GET['menuaction'] == 'calendar.uiviews.planner' && $this->sortby != 'user',
),
array(
'text' => lang('planner by user'),
'value' => 'menuaction=calendar.uicalendar.planner&sortby=user',
'selected' => $_GET['menuaction'] == 'calendar.uicalendar.planner' && $this->sort_by == 'user',
'value' => 'menuaction=calendar.uiviews.planner&sortby=user'.
($planner_days_for_view !== false ? '&planner_days='.$planner_days_for_view : ''),
'selected' => $_GET['menuaction'] == 'calendar.uiviews.planner' && $this->sortby == 'user',
),
array(
'text' => lang('matrixview'),
'value' => 'menuaction=calendar.uicalendar.matrixselect',
'selected' => $_GET['menuaction'] == 'calendar.uicalendar.matrixselect' ||
$_GET['menuaction'] == 'calendar.uicalendar.viewmatrix',
'text' => lang('listview'),
'value' => 'menuaction=calendar.uilist.list',
'selected' => $_GET['menuaction'] == 'calendar.uilist.listview',
),
) as $data)
{
$options .= '<option value="'.$data['value'].'"'.($data['selected'] ? ' selected="1"' : '').'>'.$this->html->htmlspecialchars($data['text'])."</option>\n";
}
$file[++$n] = $this->_select_box('displayed view','view',$options,$GLOBALS['phpgw']->link('/index.php'));
$file[++$n] = $this->_select_box('displayed view','view',$options,$GLOBALS['egw']->link('/index.php'));
// Search
$blur = addslashes($this->html->htmlspecialchars(lang('Search').'...'));
$value = @$_POST['keywords'] ? $this->html->htmlspecialchars($_POST['keywords']) : $blur;
$file[++$n] = array(
'text' => $this->html->form('<input name="keywords" value="'.$value.'" style="width: 100%;"'.
'text' => $this->html->form('<input name="keywords" value="'.$value.'" style="width: 185px;"'.
' onFocus="if(this.value==\''.$blur.'\') this.value=\'\';"'.
' onBlur="if(this.value==\'\') this.value=\''.$blur.'\';" title="'.lang('Search').'">',
$base_hidden_vars,'/index.php',array('menuaction'=>'calendar.uicalendar.search')),
'','/index.php',array('menuaction'=>'calendar.uilist.listview')),
'no_lang' => True,
'link' => False,
);
// Minicalendar
$link = array();
foreach(array(
'day'=>'calendar.uiviews.day',
'week'=>'calendar.uiviews.week',
'month'=>'calendar.uiviews.month') as $view => $menuaction)
'day' => 'calendar.uiviews.day',
'week' => 'calendar.uiviews.week',
'month' => 'calendar.uiviews.month') as $view => $menuaction)
{
$link_vars['menuaction'] = $view == 'month' && $_GET['menuaction'] == 'calendar.uicalendar.planner' ?
'calendar.uicalendar.planner' : $menuaction; // stay in the planner
if ($this->view == 'planner')
{
switch($view)
{
case 'day': $link_vars['planner_days'] = 1; break;
case 'week': $link_vars['planner_days'] = $this->cal_prefs['days_in_weekview'] == 5 ? 5 : 7; break;
case 'month': $link_vars['planner_days'] = 0; break;
}
$link_vars['menuaction'] = $this->view_menuaction; // stay in the planner
}
elseif ($this->view == 'listview')
{
$link_vars['menuaction'] = $this->view_menuaction; // stay in the listview
}
else
{
$link_vars['menuaction'] = $menuaction;
}
unset($link_vars['date']); // gets set in jscal
$link[$view] = $GLOBALS['phpgw']->link('/index.php',$link_vars);
$link[$view] = $l = $GLOBALS['egw']->link('/index.php',$link_vars);
}
$jscalendar = $GLOBALS['phpgw']->jscalendar->flat($link['day'],$this->date,
$jscalendar = $GLOBALS['egw']->jscalendar->flat($link['day'],$this->date,
$link['week'],lang('show this week'),$link['month'],lang('show this month'));
$file[++$n] = array('text' => $jscalendar,'no_lang' => True,'link' => False,'icon' => False);
// Category Selection
$file[++$n] = $this->_select_box('Category','cat_id',
'<option value="0">'.lang('All categories').'</option>'.
$this->cats->formated_list('select','all',$this->cat_id,'True'));
$this->cats->formatted_list('select','all',$this->cat_id,'True'));
// we need a form for the select-boxes => insert it in the first selectbox
$file[$n]['text'] = $this->html->form(False,$base_hidden_vars,'/index.php',array('menuaction' => $_GET['menuaction'])) .
$file[$n]['text'];
// Filter all or private
if($this->bo->check_perms(PHPGW_ACL_PRIVATE,0,$this->owner))
if(is_numeric($this->owner) && $this->bo->check_perms(EGW_ACL_PRIVATE,0,$this->owner))
{
$file[] = $this->_select_box('Filter','filter',
'<option value=" all "'.($this->filter==' all '?' selected="1"':'').'>'.lang('No filter').'</option>'."\n".
@ -386,14 +553,20 @@ class uical
}
// Calendarselection: User or Group
if(count($this->bo->grants) > 0 && (!isset($GLOBALS['phpgw_info']['server']['deny_user_grants_access']) ||
!$GLOBALS['phpgw_info']['server']['deny_user_grants_access']))
if(count($this->bo->grants) > 0 && (!isset($GLOBALS['egw_info']['server']['deny_user_grants_access']) ||
!$GLOBALS['egw_info']['server']['deny_user_grants_access']))
{
$grants = array();
foreach($this->bo->list_cals() as $grant)
{
$grants[] = $grant['grantor'];
}
// exclude non-accounts from the account-selection
$accounts = array();
foreach(explode(',',$this->owner) as $owner)
{
if (is_numeric($owner)) $accounts[] = $owner;
}
$file[] = array(
'text' => "
<script type=\"text/javascript\">
@ -411,55 +584,92 @@ function load_cal(url,id) {
}
</script>
".
$this->accountsel->selection('owner','uical_select_owner',$this->owner,'calendar+',$this->multiple ? 3 : 1,False,
' style="width: '.($this->multiple && $this->common_prefs['account_selection']=='selectbox' ? 100 : 85).'%;"'.
$this->accountsel->selection('owner','uical_select_owner',$accounts,'calendar+',$this->multiple ? 3 : 1,False,
' style="width: '.($this->multiple && $this->common_prefs['account_selection']=='selectbox' ? 185 : 165).'px;"'.
' title="'.lang('select a %1',lang('user')).'" onchange="load_cal(\''.
$GLOBALS['phpgw']->link('/index.php',array(
'menuaction' => $_GET['menuaction'],
$GLOBALS['egw']->link('/index.php',array(
'menuaction' => $this->view_menuaction,
'date' => $this->date,
)).'\',\'uical_select_owner\');"','',$grants),
'no_lang' => True,
'link' => False
);
}
// Import & Export
$file['Export'] = $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uicalendar.export');
$file['Import'] = $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uiicalendar.import');
$file[] = array(
'text' => lang('Export').': '.$this->html->a_href(lang('iCal'),'calendar.uiforms.export',$this->first ? array(
'start' => $this->bo->date2string($this->first),
'end' => $this->bo->date2string($this->last),
) : false),
'no_lang' => True,
'link' => False,
);
$file[] = array(
'text' => lang('Import').': '.$this->html->a_href(lang('iCal'),'calendar.uiforms.import').
' &amp; '.$this->html->a_href(lang('CSV'),'/calendar/csv_import.php'),
'no_lang' => True,
'link' => False,
);
/*
$print_functions = array(
'calendar.uiviews.day' => 'calendar.pdfcal.day',
'calendar.uiviews.week' => 'calendar.pdfcal.week',
);
if (isset($print_functions[$_GET['menuaction']]))
{
$file[] = array(
'text' => 'pdf-export / print',
'link' => $GLOBALS['egw']->link('/index.php',array(
'menuaction' => $print_functions[$_GET['menuaction']],
'date' => $this->date,
)),
'target' => '_blank',
);
}
*/
// we need to set the sidebox-width a bit wider, as idots.css sets it to 147, to small for the jscal
// setting it to auto, uses the smallest possible size, but IE kills the jscal if the width is set to auto !!!
$width = 203;
echo '<style>
.divSidebox
{
width: '.($this->html->user_agent=='msie'?'180px':'auto').';
/*max-width: 180px;*/
width: '.($this->html->user_agent == 'msie' ? $width.'px' : 'auto; max-width: '.$width.'px;').';
}
</style>'."\n";
$menu_title = $GLOBALS['phpgw_info']['apps'][$appname]['title'] . ' '. lang('Menu');
$appname = 'calendar';
$menu_title = $GLOBALS['egw_info']['apps'][$appname]['title'] . ' '. lang('Menu');
display_sidebox($appname,$menu_title,$file);
echo "</form>\n";
// resources menu hooks
foreach ($this->bo->resources as $resource)
{
if(!is_array($resource['cal_sidebox'])) continue;
$menu_title = $resource['cal_sidebox']['menu_title'] ? $resource['cal_sidebox']['menu_title'] : lang($resource['app']);
$file = ExecMethod($resource['cal_sidebox']['file'], $this->view_menuaction, $this->date);
display_sidebox($appname,$menu_title,$file);
}
if ($GLOBALS['phpgw_info']['user']['apps']['preferences'])
if ($GLOBALS['egw_info']['user']['apps']['preferences'])
{
$menu_title = lang('Preferences');
$file = Array(
'Calendar preferences'=>$GLOBALS['phpgw']->link('/index.php','menuaction=preferences.uisettings.index&appname=calendar'),
'Grant Access'=>$GLOBALS['phpgw']->link('/index.php','menuaction=preferences.uiaclprefs.index&acl_app=calendar'),
'Edit Categories' =>$GLOBALS['phpgw']->link('/index.php','menuaction=preferences.uicategories.index&cats_app=calendar&cats_level=True&global_cats=True'),
'Calendar preferences'=>$GLOBALS['egw']->link('/index.php','menuaction=preferences.uisettings.index&appname=calendar'),
'Grant Access'=>$GLOBALS['egw']->link('/index.php','menuaction=preferences.uiaclprefs.index&acl_app=calendar'),
'Edit Categories' =>$GLOBALS['egw']->link('/index.php','menuaction=preferences.uicategories.index&cats_app=calendar&cats_level=True&global_cats=True'),
);
display_sidebox($appname,$menu_title,$file);
}
if ($GLOBALS['phpgw_info']['user']['apps']['admin'])
if ($GLOBALS['egw_info']['user']['apps']['admin'])
{
$menu_title = lang('Administration');
$file = Array(
'Configuration'=>$GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=calendar'),
'Custom Fields'=>$GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uicustom_fields.index'),
'Holiday Management'=>$GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uiholiday.admin'),
'Import CSV-File' => $GLOBALS['phpgw']->link('/calendar/csv_import.php'),
'Global Categories' =>$GLOBALS['phpgw']->link('/index.php','menuaction=admin.uicategories.index&appname=calendar'),
'Configuration'=>$GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname=calendar'),
'Custom Fields'=>$GLOBALS['egw']->link('/index.php','menuaction=admin.customfields.edit&appname=calendar'),
'Holiday Management'=>$GLOBALS['egw']->link('/index.php','menuaction=calendar.uiholiday.admin'),
'Global Categories' =>$GLOBALS['egw']->link('/index.php','menuaction=admin.uicategories.index&appname=calendar'),
);
display_sidebox($appname,$menu_title,$file);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,212 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar - Custom fields and sorting *
* http://www.egroupware.org *
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
require_once(PHPGW_INCLUDE_ROOT.'/calendar/inc/class.bocustom_fields.inc.php');
$GLOBALS['phpgw_info']['flags']['included_classes']['bocustom_fields'] = True; // for 0.9.14
class uicustom_fields extends bocustom_fields
{
var $public_functions = array(
'index' => True,
'submited' => True
);
function uicustom_fields()
{
$this->bocustom_fields(); // call constructor of extended class
$this->tpl = $GLOBALS['phpgw']->template;
if (!is_object($GLOBALS['phpgw']->nextmatchs))
{
$GLOBALS['phpgw']->nextmatchs = CreateObject('phpgwapi.nextmatchs');
}
if (!is_object($GLOBALS['phpgw']->html))
{
$GLOBALS['phpgw']->html = CreateObject('phpgwapi.html');
}
$this->html = &$GLOBALS['phpgw']->html;
// jscalendar is needed by the new navigation-menu AND it need to be loaded befor the header !!!
if (!is_object($GLOBALS['phpgw']->jscalendar))
{
$GLOBALS['phpgw']->jscalendar = CreateObject('phpgwapi.jscalendar');
}
}
function index($error='')
{
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['calendar']['title'].' - '.lang('Custom fields and sorting');
$GLOBALS['phpgw']->common->phpgw_header();
$this->tpl = $GLOBALS['phpgw']->template;
$this->tpl->set_unknowns('remove');
$this->tpl->set_file(array(
'custom_fields_tpl' => 'custom_fields.tpl'
));
$this->tpl->set_block('custom_fields_tpl','custom_fields','custom_fields');
$this->tpl->set_block('custom_fields_tpl','row','row');
$n = 0;
foreach($this->fields as $field => $data)
{
$data['order'] = ($n += 10);
if (isset($this->stock_fields[$field]))
{
$this->set_row($data,$field);
}
else
{
$this->set_row($data,$field,'delete','Delete');
}
}
$this->tpl->set_var(array(
'hidden_vars' => '',
'lang_error' => $error,
'lang_name' => lang('Name'),
'lang_length' => lang('Length<br>(<= 255)'),
'lang_shown' => lang('Length shown<br>(emtpy for full length)'),
'lang_order' => lang('Order'),
'lang_title' => lang('Title-row'),
'lang_disabled'=> lang('Disabled'),
'action_url' => $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uicustom_fields.submited'),
'save_button' => $this->html->submit_button('save','Save'),
'cancel_button'=> $this->html->submit_button('cancel','Cancel'),
));
$this->set_row(array('order' => $n+10),'***new***','add','Add');
$this->tpl->pfp('out','custom_fields');
}
function set_row($values,$id='',$name='',$label='')
{
if ($id !== '')
{
$id = '['.htmlspecialchars($id).']';
}
$this->tpl->set_var(array(
'name' => $values['label'] ? lang($values['label']) : $this->html->input('name'.$id,$values['name'],'','SIZE="40" MAXLENGTH="40"'),
'length' => $values['label'] ? '&nbsp' : $this->html->input('length'.$id,$values['length'],'','SIZE="3"'),
'shown' => $values['label'] ? '&nbsp' : $this->html->input('shown'.$id,$values['shown'],'','SIZE="3"'),
'order' => $this->html->input('order'.$id,$values['order'],'','SIZE="3"'),
'title' => $this->html->checkbox('title'.$id,$values['title']),
'disabled'=> $this->html->checkbox('disabled'.$id,$values['disabled']),
'button' => $name ? $this->html->submit_button($name.$id,$label) : '&nbsp'
));
if ($name !== 'add')
{
$this->tpl->set_var('tr_color',$values['title'] ? $GLOBALS['phpgw_info']['theme']['th_bg'] : $GLOBALS['phpgw']->nextmatchs->alternate_row_color());
$this->tpl->parse('rows','row',True);
}
}
function submited()
{
if ($_POST['cancel'])
{
$GLOBALS['phpgw']->redirect_link('/admin/');
}
//echo "<pre>"; print_r($_POST); echo "</pre>";
foreach ($_POST['order'] as $field => $order)
{
if (isset($_POST['delete'][$field]) || $field == '***new***')
{
continue;
}
while(isset($ordered[$order]))
{
++$order;
}
$ordered[$order] = array(
'field' => $field,
'name' => stripslashes($_POST['name'][$field]),
'length' => (int)$_POST['length'][$field],
'shown' => (int)$_POST['shown'][$field],
'title' => !!$_POST['title'][$field],
'disabled' => !!$_POST['disabled'][$field]
);
if (isset($this->stock_fields[$field]))
{
$ordered[$order]['name'] = $this->fields[$field]['name'];
$ordered[$order]['label'] = $this->fields[$field]['label'];
}
}
if (isset($_POST['add']) || strlen($_POST['name']['***new***']))
{
$name = stripslashes($_POST['name']['***new***']);
if (!strlen($name) || array_search($name,$_POST['name']) != '***new***')
{
$error .= lang('New name must not exist and not be empty!!!');
}
else
{
$order = $_POST['order']['***new***'];
while(isset($_POST['order'][$order]))
{
++$order;
}
$ordered[$order] = array(
'field' => '#'.$name,
'name' => $name,
'length' => (int)$_POST['length']['***new***'],
'shown' => (int)$_POST['shown']['***new***'],
'title' => !!$_POST['title']['***new***'],
'disabled' => !!$_POST['disabled']['***new***']
);
}
}
//echo "<pre>"; print_r($ordered); echo "</pre>\n";
ksort($ordered,SORT_NUMERIC);
$this->fields = array();
foreach($ordered as $order => $data)
{
if ($data['length'] > 255)
{
$data['length'] = 255;
}
if ($data['length'] <= 0)
{
unset($data['length']);
}
if ($data['shown'] >= $data['length'] || $data['shown'] <= 0)
{
unset($data['shown']);
}
if (!$data['title'])
{
unset($data['title']);
}
if (!$data['disabled'])
{
unset($data['disabled']);
}
$field = $data['field'];
unset($data['field']);
$this->fields[$field] = $data;
}
if (!$error && isset($_POST['save']))
{
$this->save();
$GLOBALS['phpgw']->redirect_link('/admin/');
}
$this->index($error);
}
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,26 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/**
* User interface for calendar holidays
*
* @package calendar
* @author Mark Peters <skeeter@phpgroupware.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class uiholiday
{
var $debug = False;
@ -35,30 +42,42 @@
function uiholiday()
{
$GLOBALS['phpgw']->nextmatchs = CreateObject('phpgwapi.nextmatchs');
$GLOBALS['egw']->nextmatchs =& CreateObject('phpgwapi.nextmatchs');
$this->bo = CreateObject('calendar.boholiday');
$this->bo =& CreateObject('calendar.boholiday');
$this->bo->check_admin();
$this->base_url = $this->bo->base_url;
$this->template_dir = $GLOBALS['phpgw']->common->get_tpl_dir('calendar');
$this->sb = CreateObject('phpgwapi.sbox');
$this->template_dir = $GLOBALS['egw']->common->get_tpl_dir('calendar');
$this->sb =& CreateObject('phpgwapi.sbox');
// jscalendar is needed by the new navigation-menu AND it need to be loaded befor the header !!!
if (!is_object($GLOBALS['phpgw']->jscalendar))
if (!is_object($GLOBALS['egw']->jscalendar))
{
$GLOBALS['phpgw']->jscalendar = CreateObject('phpgwapi.jscalendar');
$GLOBALS['egw']->jscalendar =& CreateObject('phpgwapi.jscalendar');
}
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['calendar']['title'].' - '.lang('Holiday Management');
$GLOBALS['egw_info']['flags']['app_header'] = $GLOBALS['egw_info']['apps']['calendar']['title'].' - '.lang('Holiday Management');
$GLOBALS['egw']->template->set_var('help_msg',lang('<b>Please note</b>: The calendar use the holidays of your country, which is set to %1. You can change it in your %2.<br />Holidays are %3 automatic installed from %4. You can changed it in %5.',
'<b>'.$GLOBALS['egw_info']['user']['preferences']['common']['country'].'</b>','<a href="'.$GLOBALS['egw']->link('/index.php',array(
'menuaction' => 'preferences.uisettings.index',
'appname' => 'preferences',
)).'">'.lang('common preferences').'</a>',$GLOBALS['egw_info']['server']['auto_load_holidays'] ? '' : '<b>'.lang('not').'</b>',
'<b>'.$GLOBALS['egw_info']['server']['holidays_url_path'].'</b>',
'<a href="'.$GLOBALS['egw']->link('/index.php',array(
'menuaction' => 'admin.uiconfig.index',
'appname' => 'calendar',
)).'">'.lang('admin').' >> '.lang('calendar').' >> '.lang('site configuration').'</a>'));
$GLOBALS['egw']->template->set_var('total','');
}
function admin()
{
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
unset($GLOBALS['egw_info']['flags']['noheader']);
unset($GLOBALS['egw_info']['flags']['nonavbar']);
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw']->common->egw_header();
$p = &$GLOBALS['phpgw']->template;
$p = &$GLOBALS['egw']->template;
$p->set_file(Array('locales'=>'locales.tpl'));
$p->set_block('locales','list','list');
$p->set_block('locales','row','row');
@ -66,11 +85,11 @@
$p->set_block('locales','submit_column','submit_column');
$var = Array(
'th_bg' => $GLOBALS['phpgw_info']['theme']['th_bg'],
'left_next_matchs' => $GLOBALS['phpgw']->nextmatchs->left('/index.php?menuaction=calendar.uiholiday.admin',$this->bo->start,$this->bo->total),
'right_next_matchs' => $GLOBALS['phpgw']->nextmatchs->right('/index.php?menuaction=calendar.uiholiday.admin',$this->bo->start,$this->bo->total),
'th_bg' => $GLOBALS['egw_info']['theme']['th_bg'],
'left_next_matchs' => $GLOBALS['egw']->nextmatchs->left('/index.php?menuaction=calendar.uiholiday.admin',$this->bo->start,$this->bo->total),
'right_next_matchs' => $GLOBALS['egw']->nextmatchs->right('/index.php?menuaction=calendar.uiholiday.admin',$this->bo->start,$this->bo->total),
'center' => '<td align="center">'.lang('Countries').'</td>',
'sort_name' => $GLOBALS['phpgw']->nextmatchs->show_sort_order($this->bo->sort,'locale',$this->bo->order,'/calendar/'.basename($SCRIPT_FILENAME),lang('Country')),
'sort_name' => $GLOBALS['egw']->nextmatchs->show_sort_order($this->bo->sort,'locale',$this->bo->order,'/calendar/'.basename($SCRIPT_FILENAME),lang('Country')),
'header_edit' => lang('Edit'),
'header_delete' => lang('Delete'),
'header_extra' => lang('Submit to Repository'),
@ -94,16 +113,16 @@
$p->set_var('submit_extra',' width="5%"');
while (list(,$value) = each($locales))
{
$tr_color = $GLOBALS['phpgw']->nextmatchs->alternate_row_color($tr_color);
$tr_color = $GLOBALS['egw']->nextmatchs->alternate_row_color($tr_color);
if (! $value) $value = '&nbsp;';
$var = Array(
'tr_color' => $tr_color,
'group_name' => $value,
'edit_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$value)) . '"> '.lang('Edit').' </a>',
'delete_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.delete_locale','locale'=>$value)).'"> '.lang('Delete').' </a>',
'extra_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.submit','locale'=>$value)).'"> '.lang('Submit').' </a>'.
' &nbsp; &nbsp; <a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.submit','locale'=>$value,'download'=>1)).'"> '.lang('Download').' </a>'
'edit_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$value)) . '"> '.lang('Edit').' </a>',
'delete_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.delete_locale','locale'=>$value)).'"> '.lang('Delete').' </a>',
'extra_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.submit','locale'=>$value)).'"> '.lang('Submit').' </a>'.
' &nbsp; &nbsp; <a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.submit','locale'=>$value,'download'=>1)).'"> '.lang('Download').' </a>'
);
$p->set_var($var);
$p->parse('rows','row',True);
@ -111,9 +130,9 @@
}
$var = Array(
'new_action' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','id'=>0)),
'new_action' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','id'=>0)),
'lang_add' => lang('add'),
'search_action' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'search_action' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'lang_search' => lang('search')
);
@ -137,24 +156,24 @@
$link_params = Array(
'menuaction' => 'calendar.uiholiday.admin'
);
$GLOBALS['phpgw']->redirect_link($this->base_url,$link_params);
$GLOBALS['egw']->redirect_link($this->base_url,$link_params);
}
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
$p = CreateObject('phpgwapi.Template',$this->template_dir);
unset($GLOBALS['egw_info']['flags']['noheader']);
unset($GLOBALS['egw_info']['flags']['nonavbar']);
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw']->common->egw_header();
$p =& $GLOBALS['egw']->template;
$p->set_file(Array('locale'=>'locales.tpl'));
$p->set_block('locale','list','list');
$p->set_block('locale','row','row');
$p->set_block('locale','row_empty','row_empty');
$p->set_block('locale','back_button_form','back_button_form');
if (!is_object($GLOBALS['phpgw']->html))
if (!is_object($GLOBALS['egw']->html))
{
$GLOBALS['phpgw']->html = CreateObject('phpgwapi.html');
$GLOBALS['egw']->html =& CreateObject('phpgwapi.html');
}
$html = &$GLOBALS['phpgw']->html;
$html = &$GLOBALS['egw']->html;
$year_form = str_replace('<option value=""></option>','',$html->form($html->sbox_submit($this->sb->getYears('year',$this->bo->year),true),array(),
$this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$this->bo->locales[0])));
unset($html);
@ -163,14 +182,14 @@
$total = count($holidays);
$var = Array(
'th_bg' => $GLOBALS['phpgw_info']['theme']['th_bg'],
'left_next_matchs' => $GLOBALS['phpgw']->nextmatchs->left('/index.php',$this->bo->start,$total,'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'right_next_matchs' => $GLOBALS['phpgw']->nextmatchs->right('/index.php',$this->bo->start,$total,'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'th_bg' => $GLOBALS['egw_info']['theme']['th_bg'],
'left_next_matchs' => $GLOBALS['egw']->nextmatchs->left('/index.php',$this->bo->start,$total,'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'right_next_matchs' => $GLOBALS['egw']->nextmatchs->right('/index.php',$this->bo->start,$total,'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'center' => '<td align="right">'.lang('Holidays').' ('.$this->bo->locales[0].')</td><td align="left">'.$year_form.'</td>',
'sort_name' => $GLOBALS['phpgw']->nextmatchs->show_sort_order($this->bo->sort,'name',$this->bo->order,'/index.php',lang('Holiday'),'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'sort_name' => $GLOBALS['egw']->nextmatchs->show_sort_order($this->bo->sort,'name',$this->bo->order,'/index.php',lang('Holiday'),'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year),
'header_edit' => lang('Edit'),
'header_delete' => lang('Delete'),
'header_rule' => '<td>'.$GLOBALS['phpgw']->nextmatchs->show_sort_order($this->bo->sort,'month_num,mday',$this->bo->order,'/index.php',lang('Rule'),'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year).'</td>',
'header_rule' => '<td>'.$GLOBALS['egw']->nextmatchs->show_sort_order($this->bo->sort,'month_num,mday',$this->bo->order,'/index.php',lang('Rule'),'&menuaction=calendar.uiholiday.edit_locale&locale='.$this->bo->locales[0].'&year='.$this->bo->year).'</td>',
'header_extra' => lang('Copy'),
'extra_width' => 'width="5%"'
);
@ -179,17 +198,18 @@
if (!count($holidays))
{
$p->set_var('message',lang('no matches found'));
$p->parse('rows','row_empty',True);
$p->set_var('total',lang('no matches found'));
//$p->parse('rows','row_empty',True);
}
else
{
$maxmatchs = $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'];
$maxmatchs = $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'];
$end = min($total,$this->bo->start+$maxmatchs);
$p->set_var('rows',lang('showing %1 - %2 of %3',1+$this->bo->start,$end,$total));
$p->set_var('total',lang('showing %1 - %2 of %3',1+$this->bo->start,$end,$total));
//$p->parse('rows','row_empty',True);
for($i=$this->bo->start; $i < $end; $i++)
{
$tr_color = $GLOBALS['phpgw']->nextmatchs->alternate_row_color($tr_color);
$tr_color = $GLOBALS['egw']->nextmatchs->alternate_row_color($tr_color);
if (!$holidays[$i]['name'])
{
$holidays[$i]['name'] = '&nbsp;';
@ -200,9 +220,9 @@
'header_delete'=> lang('Delete'),
'group_name' => $holidays[$i]['name'],
'rule' => '<td>'.$this->bo->rule_string($holidays[$i]).'</td>',
'edit_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Edit').' </a>',
'extra_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.copy_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Copy').' </a>',
'delete_link' => '<a href="'.$GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.delete_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Delete').' </a>'
'edit_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Edit').' </a>',
'extra_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.copy_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Copy').' </a>',
'delete_link' => '<a href="'.$GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.delete_holiday','locale'=>$this->bo->locales[0],'id'=>$holidays[$i]['index'],'year'=>$this->bo->year)).'"> '.lang('Delete').' </a>'
);
$p->set_var($var);
@ -211,11 +231,11 @@
}
$var = Array(
'new_action' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','locale'=>$this->bo->locales[0],'id'=>0,'year'=>$this->bo->year)),
'new_action' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_holiday','locale'=>$this->bo->locales[0],'id'=>0,'year'=>$this->bo->year)),
'lang_add' => lang('add'),
'back_action' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'back_action' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'lang_back' => lang('Back'),
'search_action'=> $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$this->bo->locales[0],'year'=>$this->bo->year)),
'search_action'=> $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$this->bo->locales[0],'year'=>$this->bo->year)),
'lang_search' => lang('search')
);
$p->set_var($var);
@ -248,20 +268,20 @@
{
$holiday['locale'] = $this->locale;
}
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['calendar']['title'].' - '.($this->bo->id ? lang('Edit') : lang('Add')).' '.lang('Holiday');
$GLOBALS['phpgw']->common->phpgw_header();
unset($GLOBALS['egw_info']['flags']['noheader']);
unset($GLOBALS['egw_info']['flags']['nonavbar']);
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw_info']['flags']['app_header'] = $GLOBALS['egw_info']['apps']['calendar']['title'].' - '.($this->bo->id ? lang('Edit') : lang('Add')).' '.lang('Holiday');
$GLOBALS['egw']->common->egw_header();
$t = &$GLOBALS['phpgw']->template;
$t = &$GLOBALS['egw']->template;
$t->set_file(Array('holiday'=>'holiday.tpl','form_button'=>'form_button_script.tpl'));
$t->set_block('holiday','form','form');
$t->set_block('holiday','list','list');
if (@count($error))
{
$message = $GLOBALS['phpgw']->common->error_list($error);
$message = $GLOBALS['egw']->common->error_list($error);
}
else
{
@ -271,7 +291,7 @@
$var = Array(
'title_holiday' => ($this->bo->id ? lang('Edit') : lang('Add')).' '.lang('Holiday'),
'message' => $message,
'actionurl' => $GLOBALS['phpgw']->link($this->base_url,'menuaction=calendar.boholiday.add&year='.$this->bo->year),
'actionurl' => $GLOBALS['egw']->link($this->base_url,'menuaction=calendar.boholiday.add&year='.$this->bo->year),
'hidden_vars' => '<input type="hidden" name="holiday[hol_id]" value="'.$this->bo->id.'">'."\n"
. '<input type="hidden" name="holiday[locales]" value="'.$this->bo->locales[0].'">'."\n"
);
@ -284,7 +304,7 @@
$this->display_item($t,lang('title'),'<input name="holiday[name]" size="60" maxlength="50" value="'.$holiday['name'].'">');
// Date
$this->display_item($t,lang('Date'),$GLOBALS['phpgw']->common->dateformatorder($this->sb->getYears('holiday[year]',$holiday['occurence']>1900?$holiday['occurence']:0),$this->sb->getMonthText('holiday[month_num]',$holiday['month']),$this->sb->getDays('holiday[mday]',$holiday['day'])).
$this->display_item($t,lang('Date'),$GLOBALS['egw']->common->dateformatorder($this->sb->getYears('holiday[year]',$holiday['occurence']>1900?$holiday['occurence']:0),$this->sb->getMonthText('holiday[month_num]',$holiday['month']),$this->sb->getDays('holiday[mday]',$holiday['day'])).
'&nbsp;'.lang('Set a Year only for one-time / non-regular holidays.'));
// Occurence
@ -343,7 +363,7 @@
}
$t->set_var(Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,$link_params),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,$link_params),
'action_text_button' => lang('Cancel'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -359,7 +379,7 @@
'id' => $this->bo->id
);
$t->set_var(Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,$link_params),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,$link_params),
'action_text_button' => lang('Delete'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -381,18 +401,18 @@
$this->admin();
}
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
unset($GLOBALS['egw_info']['flags']['noheader']);
unset($GLOBALS['egw_info']['flags']['nonavbar']);
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw']->common->egw_header();
$p = CreateObject('phpgwapi.Template',$this->template_dir);
$p =& CreateObject('phpgwapi.Template',$this->template_dir);
$p->set_file(Array('form'=>'delete_common.tpl','form_button'=>'form_button_script.tpl'));
$p->set_var('messages',lang('Are you sure you want to delete this Country ?')."<br>".$this->bo->locales[0]);
$var = Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.admin')),
'action_text_button' => lang('No'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -401,7 +421,7 @@
$p->parse('no','form_button');
$var = Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.boholiday.delete_locale','locale'=>$this->bo->locales[0])),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.boholiday.delete_locale','locale'=>$this->bo->locales[0])),
'action_text_button' => lang('Yes'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -421,18 +441,18 @@
$this->edit_locale();
}
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
unset($GLOBALS['egw_info']['flags']['noheader']);
unset($GLOBALS['egw_info']['flags']['nonavbar']);
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw']->common->egw_header();
$p = CreateObject('phpgwapi.Template',$this->template_dir);
$p =& CreateObject('phpgwapi.Template',$this->template_dir);
$p->set_file(Array('form'=>'delete_common.tpl','form_button'=>'form_button_script.tpl'));
$p->set_var('messages',lang('Are you sure you want to delete this holiday ?')."<br>".$holiday['name'].' ('.$this->bo->locales[0].') '.$this->bo->rule_string($holiday));
$var = Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$this->bo->locales[0],'year'=>$this->bo->year)),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.uiholiday.edit_locale','locale'=>$this->bo->locales[0],'year'=>$this->bo->year)),
'action_text_button' => lang('No'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -441,7 +461,7 @@
$p->parse('no','form_button');
$var = Array(
'action_url_button' => $GLOBALS['phpgw']->link($this->base_url,Array('menuaction'=>'calendar.boholiday.delete_holiday','locale'=>$this->bo->locales[0],'id'=>$this->bo->id,'year'=>$this->bo->year)),
'action_url_button' => $GLOBALS['egw']->link($this->base_url,Array('menuaction'=>'calendar.boholiday.delete_holiday','locale'=>$this->bo->locales[0],'id'=>$this->bo->id,'year'=>$this->bo->year)),
'action_text_button' => lang('Yes'),
'action_confirm_button' => '',
'action_extra_field' => ''
@ -460,46 +480,61 @@
}
$this->bo->year = 0; // for a complete list with all years
$holidays = $this->bo->get_holiday_list();
if (!is_array($holidays) || !count($holidays))
{
$this->admin();
}
// sort holidays by year / occurence:
usort($holidays,'_holiday_cmp');
if (isset($_GET['download']))
{
$locale = $this->bo->locales[0];
$browser = CreateObject('phpgwapi.browser');
$browser =& CreateObject('phpgwapi.browser');
$browser->content_header("holidays.$locale.csv",'text/text');
unset($browser);
while (list(,$holiday) = @each($holidays))
echo "charset\t".$GLOBALS['egw']->translation->charset()."\n";
$last_year = -1;
foreach($holidays as $holiday)
{
$year = $holiday['occurence'] <= 0 ? 0 : $holiday['occurence'];
if ($year != $last_year)
{
echo "\n".($year ? $year : 'regular (year=0)').":\n";
$last_year = $year;
}
echo "$locale\t$holiday[name]\t$holiday[day]\t$holiday[month]\t$holiday[occurence]\t$holiday[dow]\t$holiday[observance_rule]\n";
}
$GLOBALS['phpgw']->common->phpgw_exit();
$GLOBALS['egw']->common->egw_exit();
}
elseif($this->debug)
if($this->debug)
{
$action = $GLOBALS['phpgw']->link('/calendar/phpgroupware.org/accept_holiday.php');
$action = $GLOBALS['egw']->link('/calendar/egroupware.org/accept_holiday.php');
}
else
{
$action = 'http://www.egroupware.org/cal/accept_holiday.php';
}
$GLOBALS['phpgw_info']['flags']['noappheader'] = True;
$GLOBALS['phpgw_info']['flags']['noappfooter'] = True;
$GLOBALS['phpgw_info']['flags']['nofooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
$GLOBALS['egw_info']['flags']['noappheader'] = True;
$GLOBALS['egw_info']['flags']['noappfooter'] = True;
$GLOBALS['egw_info']['flags']['nofooter'] = True;
$GLOBALS['egw']->common->egw_header();
echo '<body onLoad="document.submitform.submit()">'."\n";
echo '<form action="'.$action.'" method="post" name="submitform">'."\n";
$c_holidays = count($holidays);
echo '<input type="hidden" name="locale" value="'.$this->bo->locales[0].'">'."\n";
for($i=0;$i<$c_holidays;$i++)
echo '<input type="hidden" name="charset" value="'.$GLOBALS['egw']->translation->charset().'">'."\n";
foreach($holidays as $holiday)
{
echo '<input type="hidden" name="name[]" value="'.htmlspecialchars($holidays[$i]['name']).'">'."\n"
. '<input type="hidden" name="day[]" value="'.$holidays[$i]['day'].'">'."\n"
. '<input type="hidden" name="month[]" value="'.$holidays[$i]['month'].'">'."\n"
. '<input type="hidden" name="occurence[]" value="'.$holidays[$i]['occurence'].'">'."\n"
. '<input type="hidden" name="dow[]" value="'.$holidays[$i]['dow'].'">'."\n"
. '<input type="hidden" name="observance[]" value="'.$holidays[$i]['observance_rule'].'">'."\n";
echo '<input type="hidden" name="name[]" value="'.htmlspecialchars($holiday['name']).'">'."\n"
. '<input type="hidden" name="day[]" value="'.$holiday['day'].'">'."\n"
. '<input type="hidden" name="month[]" value="'.$holiday['month'].'">'."\n"
. '<input type="hidden" name="occurence[]" value="'.$holiday['occurence'].'">'."\n"
. '<input type="hidden" name="dow[]" value="'.$holiday['dow'].'">'."\n"
. '<input type="hidden" name="observance[]" value="'.$holiday['observance_rule'].'">'."\n\n";
}
echo "</form>\n</body>\n</head>";
}
@ -508,7 +543,7 @@
function display_item(&$p,$field,$data)
{
$var = Array(
'tr_color' => $GLOBALS['phpgw']->nextmatchs->alternate_row_color(),
'tr_color' => $GLOBALS['egw']->nextmatchs->alternate_row_color(),
'field' => $field,
'data' => $data
);

View File

@ -1,213 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
class uiicalendar
{
var $bo;
var $template;
var $public_functions = array(
'test' => True,
'import' => True
);
function uiicalendar()
{
$this->bo = CreateObject('calendar.boicalendar');
$this->template = $GLOBALS['phpgw']->template;
$GLOBALS['phpgw_info']['flags']['app_header'] = lang('Calendar - [iv]Cal Importer');
// jscalendar is needed by the new navigation-menu AND it need to be loaded befor the header !!!
if (!is_object($GLOBALS['phpgw']->jscalendar))
{
$GLOBALS['phpgw']->jscalendar = CreateObject('phpgwapi.jscalendar');
}
}
function print_test($val,$title,$x_pre='')
{
// echo 'VAL = '._debug_array($val,False)."<br>\n";
if(is_array($val))
{
@reset($val);
while(list($key,$value) = each($val))
{
if(is_array($key))
{
$this->print_test($key,$title,$x_pre);
}
elseif(is_array($value))
{
$this->print_test($value,$title,$x_pre);
}
else
{
if($x_pre && $key == 'name')
{
$x_key = $x_pre.$value;
list($key,$value) = each($val);
$key=$x_key;
}
if($this->bo->parameter[$key]['type'] == 'function')
{
$function = $this->bo->parameter[$key]['function'];
$v_value = $this->bo->$function($value);
}
else
{
$v_value = $value;
}
echo $title.' ('.$key.') = '.$v_value."<br>\n";
}
}
}
elseif($val != '')
{
echo $title.' = '.$val."<br>\n";
}
}
function test()
{
$print_events = True;
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw']->common->phpgw_header();
echo "Start Time : ".$GLOBALS['phpgw']->common->show_date()."<br>\n";
@set_time_limit(0);
$icsfile=PHPGW_APP_INC.'/events.ics';
$fp=fopen($icsfile,'rt');
$contents = explode("\n",fread($fp, filesize($icsfile)));
fclose($fp);
$vcalendar = $this->bo->parse($contents);
if($print_events)
{
$this->print_test($vcalendar['prodid'],'Product ID');
$this->print_test($vcalendar['method'],'Method');
$this->print_test($vcalendar['version'],'Version');
for($i=0;$i<count($vcalendar['event']);$i++)
{
$event = $vcalendar['event'][$i];
echo "<br>\nEVENT<br>\n";
// echo 'TEST Debug : '._debug_array($event,False)."<br>\n";
$this->print_test($event['uid'],'UID','X-');
$this->print_test($event['valscale'],'Calscale','X-');
$this->print_test($event['description'],'Description','X-');
$this->print_test($event['summary'],'Summary','X-');
$this->print_test($event['comment'],'Comment','X-');
$this->print_test($event['location'],'Location','X-');
$this->print_test($event['sequence'],'Sequence','X-');
$this->print_test($event['priority'],'Priority','X-');
$this->print_test($event['categories'],'Categories','X-');
$this->print_test($event['dtstart'],'Date Start','X-');
$this->print_test($event['dtstamp'],'Date Stamp','X-');
$this->print_test($event['rrule'],'Recurrence','X-');
echo "Class = ".$this->bo->switch_class($event['class'])."<br>\n";
$this->print_test($event['organizer'],'Organizer','X-');
$this->print_test($event['attendee'],'Attendee','X-');
$this->print_test($event['x_type'],'X-Type','X-');
$this->print_test($event['alarm'],'Alarm','X-');
}
}
/*
for($i=0;$i<count($vcalendar->todo);$i++)
{
echo "<br>\nTODO<br>\n";
if($vcalendar['todo'][$i]['summary']['value'])
{
echo "Summary = ".$vcalendar['todo'][$i]['summary']['value']."<br>\n";
}
if($vcalendar['todo'][$i]['description']['value'])
{
echo "Description (Value) = ".$vcalendar['todo'][$i]['description']['value']."<br>\n";
}
if($vcalendar['todo'][$i]['description']['altrep'])
{
echo "Description (Alt Rep) = ".$vcalendar['todo'][$i]['description']['altrep']."<br>\n";
}
if($vcalendar['todo'][$i]['location']['value'])
{
echo "Location = ".$vcalendar['todo'][$i]['location']['value']."<br>\n";
}
echo "Sequence = ".$vcalendar['todo'][$i]['sequence']."<br>\n";
echo "Date Start : ".$GLOBALS['phpgw']->common->show_date(mktime($vcalendar['todo'][$i]['dtstart']['hour'],$vcalendar['todo'][$i]['dtstart']['min'],$vcalendar['todo'][$i]['dtstart']['sec'],$vcalendar['todo'][$i]['dtstart']['month'],$vcalendar['todo'][$i]['dtstart']['mday'],$vcalendar['todo'][$i]['dtstart']['year']) - $this->datatime->tz_offset)."<br>\n";
echo "Class = ".$vcalendar['todo'][$i]['class']['value']."<br>\n";
}
*/
include(PHPGW_APP_INC.'/../setup/setup.inc.php');
$this->bo->set_var($vcalendar['prodid'],'value','-//phpGroupWare//phpGroupWare '.$setup_info['calendar']['version'].' MIMEDIR//'.strtoupper($GLOBALS['phpgw_info']['user']['preferences']['common']['lang']));
$this->bo->set_var($vcalendar['version'],'value','2.0');
$this->bo->set_var($vcalendar['method'],'value',strtoupper('publish'));
echo "<br><br><br>\n";
echo nl2br($this->bo->build_ical($vcalendar));
echo "End Time : ".$GLOBALS['phpgw']->common->show_date()."<br>\n";
}
function import()
{
unset($GLOBALS['phpgw_info']['flags']['noheader']);
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['nonappheader'] = True;
$GLOBALS['phpgw_info']['flags']['nonappfooter'] = True;
$GLOBALS['phpgw']->common->phpgw_header();
if(!@is_dir($GLOBALS['phpgw_info']['server']['temp_dir']))
{
mkdir($GLOBALS['phpgw_info']['server']['temp_dir'],0700);
}
echo '<body bgcolor="' . $GLOBALS['phpgw_info']['theme']['bg_color'] . '">';
if ($GLOBALS['HTTP_GET_VARS']['action'] == 'GetFile')
{
echo '<b><center>' . lang('You must select a [iv]Cal. (*.[iv]cs)') . '</b></center><br><br>';
}
$this->template->set_file(
Array(
'vcalimport' => 'vcal_import.tpl'
)
);
$var = Array(
'vcal_header' => '<p>',
'ical_lang' => lang('(i/v)Cal'),
'action_url' => $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.boicalendar.import'),
'lang_access' => lang('Access'),
'lang_groups' => lang('Which groups'),
'access_option'=> $access_option,
'group_option' => $group_option,
'load_vcal' => lang('Load [iv]Cal')
);
$this->template->set_var($var);
$this->template->pparse('out','vcalimport');
}
}
?>

View File

@ -0,0 +1,204 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar - Listview and Search *
* http://www.egroupware.org *
* Written and (c) 2005 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
include_once(EGW_INCLUDE_ROOT . '/calendar/inc/class.uical.inc.php');
/**
* Class to generate the calendar listview and the search
*
* The new UI, BO and SO classes have a strikt definition, in which time-zone they operate:
* UI only operates in user-time, so there have to be no conversation at all !!!
* BO's functions take and return user-time only (!), they convert internaly everything to servertime, because
* SO operates only on server-time
*
* The state of the UI elements is managed in the uical class, which all UI classes extend.
*
* All permanent debug messages of the calendar-code should done via the debug-message method of the bocal class !!!
*
* @package calendar
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2004/5 by RalfBecker-At-outdoor-training.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
*/
class uilist extends uical
{
var $public_functions = array(
'listview' => True,
);
/**
* @var $debug mixed integer level or string function- or widget-name
*/
var $debug=false;
/**
* Constructor
*
* @param array $set_states=null to manualy set / change one of the states, default NULL = use $_REQUEST
*/
function uilist($set_states=null)
{
$this->uical(false,$set_states); // call the parent's constructor
$GLOBALS['egw_info']['flags']['app_header'] = $GLOBALS['egw_info']['apps']['calendar']['title'].' - '.lang('Listview');
$this->date_filters = array(
'after' => lang('After current date'),
'before' => lang('Before current date'),
'all' => lang('All events'),
);
}
/**
* Show the calendar on the home page
*
* @return string with content
*/
function &home()
{
// set the defaults for the home-page
$this->uilist(array(
'date' => $this->bo->date2string($this->bo->now_su),
'cat_id' => 0,
'filter' => 'all',
'owner' => $this->user,
'multiple' => 0,
'view' => $this->bo->cal_prefs['defaultcalendar'],
));
$GLOBALS['egw']->session->appsession('calendar_list','calendar',''); // in case there's already something set
return $this->listview(null,'',true);
}
/**
* Show the listview
*/
function listview($content=null,$msg='',$home=false)
{
if ($_GET['msg']) $msg = $_GET['msg'];
$etpl =& CreateObject('etemplate.etemplate','calendar.list');
$content = array(
'nm' => $GLOBALS['egw']->session->appsession('calendar_list','calendar'),
'msg' => $msg,
);
if (!is_array($content['nm']))
{
$content['nm'] = array(
'get_rows' => 'calendar.uilist.get_rows',
'filter_no_lang' => True, // I set no_lang for filter (=dont translate the options)
'no_filter2' => True, // I disable the 2. filter (params are the same as for filter)
'no_cat' => True, // I disable the cat-selectbox
// 'bottom_too' => True,// I show the nextmatch-line (arrows, filters, search, ...) again after the rows
'filter' => 'after',
'order' => 'cal_start',// IO name of the column to sort after (optional for the sortheaders)
'sort' => 'ASC',// IO direction of the sort: 'ASC' or 'DESC'
);
}
if (isset($_REQUEST['keywords'])) // new search => set filters so every match is shown
{
$this->adjust_for_search($_REQUEST['keywords'],$content['nm']);
}
return $etpl->exec('calendar.uilist.listview',$content,array(
'filter' => &$this->date_filters,
),$readonlys,'',$home ? -1 : 0);
}
/**
* set filter for search, so that everything is shown
*/
function adjust_for_search($keywords,&$params)
{
$params['search'] = $keywords;
$params['start'] = 0;
$params['order'] = 'cal_start';
if ($keywords)
{
$params['filter'] = 'all';
$params['sort'] = 'DESC';
unset($params['col_filter']['participant']);
}
else
{
$params['filter'] = 'after';
$params['sort'] = 'ASC';
}
}
/**
* query calendar for nextmatch in the listview
*
* @internal
* @param array &$params parameters
* @param array &$rows returned rows/events
* @param array &$readonlys eg. to disable buttons based on acl
*/
function get_rows(&$params,&$rows,&$readonlys)
{
//echo "uilist::get_rows() params="; _debug_array($params);
$old_params = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
if ($old_params['filter'] && $old_params['filter'] != $params['filter']) // filter changed => order accordingly
{
$params['order'] = 'cal_start';
$params['sort'] = $params['filter'] == 'after' ? 'ASC' : 'DESC';
}
if ($old_params['search'] != $params['search'])
{
$this->adjust_for_search($params['search'],$params);
}
$GLOBALS['egw']->session->appsession('calendar_list','calendar',$params);
$search_params = array(
'cat_id' => $this->cat_id,
'filter' => $this->filter,
'query' => $params['search'],
'offset' => (int) $params['start'],
'order' => $params['order'] ? $params['order'].' '.$params['sort'] : 'cal_start',
);
switch($params['filter'])
{
case 'all':
break;
case 'before':
$search_params['end'] = $this->date;
break;
case 'after':
default:
$search_params['start'] = $this->date;
break;
}
if ((int) $params['col_filter']['participant'])
{
$search_params['users'] = (int) $params['col_filter']['participant'];
}
elseif(empty($params['search'])) // active search displays entries from all users
{
$search_params['users'] = $this->is_group ? $this->g_owner : explode(',',$this->owner);
}
$rows = array();
foreach((array) $this->bo->search($search_params) as $event)
{
$readonlys['edit['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_EDIT,$event);
$readonlys['delete['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_DELETE,$event);
$readonlys['view['.$event['id'].']'] = !$this->bo->check_perms(EGW_ACL_READ,$event);
$event['parts'] = implode(",\n",$this->bo->participants($event));
if (empty($event['description'])) $event['description'] = ' '; // no description screws the titles horz. alignment
if (empty($event['location'])) $event['location'] = ' '; // no location screws the owner horz. alignment
$rows[] = $event;
}
//_debug_array($rows);
return $this->bo->total;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,7 @@
<?php
/**************************************************************************\
* eGroupWare *
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Written by Joseph Engo <jengo@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
@ -15,11 +14,10 @@
// Only Modify the $file and $title variables.....
$title = $appname;
$file = Array(
'Site Configuration' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname),
'Custom fields and sorting' => $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uicustom_fields.index'),
'Calendar Holiday Management' => $GLOBALS['phpgw']->link('/index.php','menuaction=calendar.uiholiday.admin'),
'Import CSV-File' => $GLOBALS['phpgw']->link('/calendar/csv_import.php'),
'Global Categories' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uicategories.index&appname=calendar')
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uiconfig.index&appname=calendar'),
'Custom fields' => $GLOBALS['egw']->link('/index.php','menuaction=admin.customfields.edit&appname=calendar'),
'Calendar Holiday Management' => $GLOBALS['egw']->link('/index.php','menuaction=calendar.uiholiday.admin'),
'Global Categories' => $GLOBALS['egw']->link('/index.php','menuaction=admin.uicategories.index&appname=calendar')
);
//Do not modify below this line
display_section($appname,$title,$file);

View File

@ -1,31 +1,15 @@
<?php
/**************************************************************************\
* eGroupWare *
* http://www.egroupware.org *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare *
* http://www.egroupware.org *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
// Delete all records for a user
if((int)$GLOBALS['hook_values']['account_id'] > 0)
{
if((int)$_POST['new_owner'] == 0)
{
ExecMethod('calendar.bocalendar.delete_calendar',(int)$GLOBALS['hook_values']['account_id']);
}
else
{
ExecMethod('calendar.bocalendar.change_owner',
Array(
'old_owner' => (int)$GLOBALS['hook_values']['account_id'],
'new_owner' => (int)$_POST['new_owner']
)
);
}
}
?>
$socal =& CreateObject('calendar.socal');
$socal->change_delete_user((int)$_POST['account_id'],(int)$_POST['new_owner']);
unset($socal);

View File

@ -1,54 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
global $calendar_id;
$d1 = strtolower(substr($GLOBALS['phpgw_info']['server']['app_inc'],0,3));
if($d1 == 'htt' || $d1 == 'ftp')
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$phpgw->common->phpgw_exit();
}
unset($d1);
if ($calendar_id)
{
$GLOBALS['phpgw']->translation->add_app('calendar');
$cal = CreateObject('calendar.uicalendar');
//echo "Event ID: $calendar_id<br>\n";
if ($event = $cal->bo->read_entry($calendar_id))
{
echo $cal->timematrix(
Array(
'date' => $GLOBALS['phpgw']->datetime->localdates(mktime(0,0,0,$event['start']['month'],$event['start']['mday'],$event['start']['year']) - $phpgw->calendar->tz_offset),
'starttime' => $cal->bo->splittime('000000',False),
'endtime' => 0,
'participants' => $event['participants'])
) .
'</td></tr><tr><td>' .
$cal->view_event($event) .
'</td></tr><tr><td align="center">' .
$cal->get_response($calendar_id);
}
unset($cal); unset($event);
}
?>

View File

@ -1,100 +1,65 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - Calendar on Homepage *
* http://www.egroupware.org *
* Written and (c) 2004 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
if($GLOBALS['egw_info']['user']['preferences']['calendar']['mainscreen_showevents'])
{
$GLOBALS['egw']->translation->add_app('calendar');
$save_app_header = $GLOBALS['egw_info']['flags']['app_header'];
if ($GLOBALS['egw_info']['user']['preferences']['calendar']['defaultcalendar'] == 'listview')
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
$content =& ExecMethod('calendar.uilist.home');
}
unset($d1);
$showevents = (int)$GLOBALS['phpgw_info']['user']['preferences']['calendar']['mainscreen_showevents'];
if($showevents>0)
else
{
$GLOBALS['phpgw']->translation->add_app('calendar');
if(!is_object($GLOBALS['phpgw']->datetime))
{
$GLOBALS['phpgw']->datetime = CreateObject('phpgwapi.datetime');
}
$GLOBALS['date'] = date('Ymd',$GLOBALS['phpgw']->datetime->users_localtime);
$GLOBALS['g_year'] = substr($GLOBALS['date'],0,4);
$GLOBALS['g_month'] = substr($GLOBALS['date'],4,2);
$GLOBALS['g_day'] = substr($GLOBALS['date'],6,2);
$GLOBALS['owner'] = $GLOBALS['phpgw_info']['user']['account_id'];
$GLOBALS['css'] = "\n".'<style type="text/css">'."\n".'<!--'."\n"
. ExecMethod('calendar.uicalendar.css').'-->'."\n".'</style>';
if($showevents==2)
{
$_page = "small";
}
else
{
$page_ = explode('.',$GLOBALS['phpgw_info']['user']['preferences']['calendar']['defaultcalendar']);
$_page = substr($page_[0],0,7); // makes planner from planner_{user|category}
if ($_page=='index' || ($_page != 'day' && $_page != 'week' && $_page != 'month' && $_page != 'year' && $_page != 'planner'))
{
$_page = 'month';
// $GLOBALS['phpgw']->preferences->add('calendar','defaultcalendar','month');
// $GLOBALS['phpgw']->preferences->save_repository();
}
}
if(!@file_exists(PHPGW_INCLUDE_ROOT.'/calendar/inc/hook_home_'.$_page.'.inc.php'))
{
$_page = 'day';
}
include(PHPGW_INCLUDE_ROOT.'/calendar/inc/hook_home_'.$_page.'.inc.php');
$title = lang('Calendar');
$portalbox = CreateObject('phpgwapi.listbox',
Array(
'title' => $title,
'primary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'],
'secondary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'],
'tertiary' => $GLOBALS['phpgw_info']['theme']['navbar_bg'],
'width' => '100%',
'outerborderwidth' => '0',
'header_background_image' => $GLOBALS['phpgw']->common->image('phpgwapi/templates/default','bg_filler')
)
);
$app_id = $GLOBALS['phpgw']->applications->name2id('calendar');
$GLOBALS['portal_order'][] = $app_id;
$var = Array(
'up' => Array('url' => '/set_box.php', 'app' => $app_id),
'down' => Array('url' => '/set_box.php', 'app' => $app_id),
'close' => Array('url' => '/set_box.php', 'app' => $app_id),
'question' => Array('url' => '/set_box.php', 'app' => $app_id),
'edit' => Array('url' => '/set_box.php', 'app' => $app_id)
);
while(list($key,$value) = each($var))
{
$portalbox->set_controls($key,$value);
}
$portalbox->data = Array();
echo "\n".'<!-- BEGIN Calendar info -->'."\n".$portalbox->draw($GLOBALS['extra_data'])."\n".'<!-- END Calendar info -->'."\n";
unset($cal);
$content =& ExecMethod('calendar.uiviews.home');
}
flush();
unset($showevents);
?>
$portalbox =& CreateObject('phpgwapi.listbox',array(
'title' => $GLOBALS['egw_info']['flags']['app_header'],
'primary' => $GLOBALS['egw_info']['theme']['navbar_bg'],
'secondary' => $GLOBALS['egw_info']['theme']['navbar_bg'],
'tertiary' => $GLOBALS['egw_info']['theme']['navbar_bg'],
'width' => '100%',
'outerborderwidth' => '0',
'header_background_image' => $GLOBALS['egw']->common->image('phpgwapi/templates/default','bg_filler')
));
$GLOBALS['egw_info']['flags']['app_header'] = $save_app_header;
unset($save_app_header);
$GLOBALS['portal_order'][] = $app_id = $GLOBALS['egw']->applications->name2id('calendar');
foreach(array('up','down','close','question','edit') as $key)
{
$portalbox->set_controls($key,Array('url' => '/set_box.php', 'app' => $app_id));
}
$portalbox->data = Array();
if (!file_exists(EGW_SERVER_ROOT.($css_file ='/calendar/templates/'.$GLOBALS['egw_info']['user']['preferences']['common']['template_set'].'/app.css')))
{
$css_file = '/calendar/templates/default/app.css';
}
echo '
<!-- BEGIN Calendar info -->
<style type="text/css">
<!--
@import url('.$GLOBALS['egw_info']['server']['webserver_url'].$css_file.');
-->
</style>
'.$portalbox->draw($content)."\n".'<!-- END Calendar info -->'."\n";
unset($key);
unset($app_id);
unset($content);
unset($portalbox);
}

View File

@ -1,43 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$GLOBALS['extra_data'] = $GLOBALS['css']."\n".'<td>'."\n".'<table border="0" cols="3"><tr><td align="center" width="35%" valign="top">'
. ExecMethod('calendar.uicalendar.mini_calendar',
Array(
'day' => $GLOBALS['g_day'],
'month' => $GLOBALS['g_month'],
'year' => $GLOBALS['g_year'],
'link' => 'day'
)
).'</td><td align="center"><table border="0" width="100%" cellspacing="0" cellpadding="0">'
. '<tr><td align="center">'.ExecMethod('calendar.bocalendar.long_date',time())
.'</td></tr><tr><td bgcolor="'.$GLOBALS['phpgw_info']['theme']['bg_text']
.'" valign="top">'.ExecMethod('calendar.uicalendar.print_day',
Array(
'year' => $GLOBALS['g_year'],
'month' => $GLOBALS['g_month'],
'day' => $GLOBALS['g_day']
)
).'</td></tr></table>'."\n".'</td>'."\n".'</tr>'."\n".'</table>'."\n".'</td>'."\n";
?>

View File

@ -1,28 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$GLOBALS['extra_data'] = $GLOBALS['css']."\n".'<td>'."\n".'<table border="0" cols="3"><tr><td align="center" width="100%" valign="top">'
. ExecMethod('calendar.uicalendar.get_month')
.'</td>'."\n".'</tr>'."\n".'</table>'."\n".'</td>'."\n";
?>

View File

@ -1,27 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar - Planner *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$GLOBALS['extra_data'] = '<table width="100%" cellpadding="0"><tr><td bgcolor="white">'.
ExecMethod('calendar.uicalendar.planner').'</td></tr></table>';
?>

View File

@ -1,59 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$today = $GLOBALS['phpgw']->datetime->users_localtime;
$dates = array($today);
$wday = date('w',$today);
if($wday=='5') // if it's Friday, show the weekend, plus Monday
{
$dates[] = $today + 86400; // Saturday
$dates[] = $today + (2*86400); // Sunday
}
if($wday=='6') // if it's Saturday, show Sunday, plus Monday
{
$dates[] = $today + 86400; // Sunday
}
$dates[] = $dates[count($dates)-1] + 86400; // the next business day
$extra_data = $GLOBALS['css']."\n"
. '<table border="0" width="100%" cellspacing="0" cellpadding="1">'
. '<tr><td valign="top" width="100%">';
foreach($dates as $id=>$day)
{
$dayprint = ExecMethod('calendar.uicalendar.print_day',
Array(
'year' => date('Y',$day),
'month' => date('m',$day),
'day' => date('d',$day)
));
$extra_data .= '<font class="event-off" style="font-weight: bold">&nbsp;&nbsp&nbsp;'.lang(date('l',$day)) .'</font><br />' . $dayprint;
}
$extra_data .= '</td></tr></table>'."\n";
$GLOBALS['extra_data'] = $extra_data;
unset($dates);
unset($today);
unset($extra_data);
?>

View File

@ -1,28 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$GLOBALS['extra_data'] = $GLOBALS['css']."\n".'<td>'."\n".'<table border="0" cols="3"><tr><td align="center" width="100%" valign="top">'
. ExecMethod('calendar.uicalendar.get_week')
.'</td>'."\n".'</tr>'."\n".'</table>'."\n".'</td>'."\n";
?>

View File

@ -1,28 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Written by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
$d1 = strtolower(substr(PHPGW_APP_INC,0,3));
if($d1 == 'htt' || $d1 == 'ftp' )
{
echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
$GLOBALS['phpgw']->common->phpgw_exit();
}
unset($d1);
$GLOBALS['extra_data'] = $GLOBALS['css']."\n".'<td>'."\n".'<table border="0" cols="3"><tr><td align="center" width="100%" valign="top">'
. ExecMethod('calendar.uicalendar.get_year')
.'</td>'."\n".'</tr>'."\n".'</table>'."\n".'</td>'."\n";
?>

View File

@ -1,8 +1,7 @@
<?php
/**************************************************************************\
* eGroupWare *
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Written by Joseph Engo <jengo@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
@ -16,9 +15,9 @@
$file = array(
'Preferences' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uisettings.index&appname=' . $appname),
'Grant Access' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uiaclprefs.index&acl_app='.$appname),
'Edit Categories' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uicategories.index&cats_app='.$appname.'&cats_level=True&global_cats=True')
'Edit Categories' => $GLOBALS['egw']->link('/index.php','menuaction=preferences.uicategories.index&cats_app='.$appname.'&cats_level=True&global_cats=True'),
'Import CSV-File' => $GLOBALS['egw']->link('/calendar/csv_import.php'),
);
//Do not modify below this line
display_section($appname,$title,$file);
}
?>

View File

@ -15,25 +15,20 @@
/* $Id$ */
// jscalendar is needed by the new navigation-menu AND it need to be loaded befor the header !!!
if (!is_object($GLOBALS['egw']->jscalendar))
{
$GLOBALS['egw']->jscalendar = CreateObject('phpgwapi.jscalendar');
}
ExecMethod('calendar.bocalendar.check_set_default_prefs');
ExecMethod('calendar.bocal.check_set_default_prefs');
$default = array(
'day' => lang('Daily'),
'week' => lang('Weekly'),
'month' => lang('Monthly'),
'year' => lang('Yearly'),
'day' => lang('Dayview'),
'week' => lang('Weekview'),
'month' => lang('Monthview'),
'planner_cat' => lang('Planner by category'),
'planner_user' => lang('Planner by user'),
'listview' => lang('Listview'),
);
/* Select list with number of day by week */
$week_view = array(
'5' => lang('Weekview without weekend'),
'7' => lang('Weekview including weekend'),
'5' => lang('Weekview without weekend'),
'7' => lang('Weekview with weekend'),
);
/* Selection of list for home page is different from default calendar,
since the decision for the front page is different for the decision
@ -83,6 +78,7 @@
'repetition' => lang('Repetitiondetails (or empty)'),
'action' => lang('Action that caused the notify: Added, Canceled, Accepted, Rejected, ...'),
'link' => lang('Link to view the event'),
'disinvited' => lang('Participants disinvited from an event'),
);
$weekdaystarts = array(
'Monday' => lang('Monday'),
@ -113,12 +109,6 @@
$options[$group['account_id']] = $GLOBALS['egw']->common->grab_owner_name($group['account_id']);
}
}
$planner_intervals = array(
1 => '1',
2 => '2',
3 => '3',
4 => '4',
);
$defaultfilter = array(
'all' => lang('all'),
'private' => lang('private only'),
@ -219,6 +209,19 @@
'xmlrpc' => True,
'admin' => False
),
'notifyDisinvited' => array(
'type' => 'notify',
'label' => 'Notification messages for disinvited participants ',
'name' => 'notifyDisinvited',
'rows' => 5,
'cols' => 50,
'help' => 'This message is sent to disinvited participants.',
'default' => '',
'values' => $event_details,
'subst_help' => False,
'xmlrpc' => True,
'admin' => False
),
'notifyResponse' => array(
'type' => 'notify',
'label' => 'Notification messages for your responses ',
@ -314,15 +317,6 @@
'xmlrpc' => True,
'admin' => False
),
'planner_intervals_per_day' => array(
'type' => 'select',
'label' => 'Intervals per day in planner view',
'name' => 'planner_intervals_per_day',
'values' => $planner_intervals,
'help' => 'Specifies the the number of intervals shown in the planner view.',
'xmlrpc' => True,
'admin' => False
),
'defaultfilter' => array(
'type' => 'select',
'label' => 'Default calendar filter',
@ -340,24 +334,6 @@
'xmlrpc' => True,
'admin' => False
),
/* not used at the moment
'display_minicals' => array(
'type' => 'check',
'label' => 'Print the mini calendars',
'name' => 'display_minicals',
'help' => 'Should the mini calendars by printed / displayed in the printer friendly views ?',
'xmlrpc' => True,
'admin' => False
),
'print_black_white' => array(
'type' => 'check',
'label' => 'Print calendars in black & white',
'name' => 'print_black_white',
'help' => 'Should the printer friendly view be in black & white or in color (as in normal view)?',
'xmlrpc' => True,
'admin' => False
),
*/
'freebusy' => array(
'type' => 'check',
'label' => 'Make freebusy information available to not loged in persons?',

View File

@ -1,29 +0,0 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar's Sidebox-Menu for idots-template *
* http://www.egroupware.org *
* Written by Pim Snel <pim@lingewoud.nl> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/**
* File is depricated, the hook moved into the class uical !!!
*/
// register the new hooks, if the admin missed it ;-)
if (!is_object($GLOBALS['phpgw']->hooks))
{
$GLOBALS['phpgw']->hooks = CreateObject('phpgwapi.hooks');
}
include(PHPGW_INCLUDE_ROOT . '/calendar/setup/setup.inc.php');
$GLOBALS['phpgw']->hooks->register_hooks('calendar',$setup_info['calendar']['hooks']);
ExecMethod($setup_info['calendar']['hooks']['sidebox_menu']);

View File

@ -1,45 +1,25 @@
<?php
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Based on Webcalendar by Craig Knudsen <cknudsen@radix.net> *
* http://www.radix.net/~cknudsen *
* Modified by Mark Peters <skeeter@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/**************************************************************************\
* eGroupWare - Calendar *
* http://www.egroupware.org *
* Written and (c) 2005 by Ralf Becker <RalfBecker@outdoor-training.de> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
/* $Id$ */
$phpgw_flags = Array(
'currentapp' => 'calendar',
'noheader' => True,
'nonavbar' => True,
'noappheader' => True,
'noappfooter' => True,
'nofooter' => True
);
$GLOBALS['egw_info'] = array('flags' => array(
'currentapp'=> 'calendar',
'noheader' => True,
'nonavbar' => True,
));
$GLOBALS['phpgw_info']['flags'] = $phpgw_flags;
include('../header.inc.php');
include('../header.inc.php');
if(!is_object($GLOBALS['phpgw']->datetime))
{
$GLOBALS['phpgw']->datetime = CreateObject('phpgwapi.datetime');
}
ExecMethod('calendar.uiviews.index');
$parms = Array(
# 'menuaction'=> 'calendar.uicalendar.index',
'date' => date('Ymd',$GLOBALS['phpgw']->datetime->users_localtime)
);
//echo 'Local DateTime: '.date('Ymd H:i:s',$GLOBALS['phpgw']->datetime->users_localtime).'<br>'."\n";
# $GLOBALS['phpgw']->redirect_link('/index.php',$parms);
ExecMethod('calendar.uicalendar.index',$parms);
$GLOBALS['phpgw']->common->phpgw_exit();
?>
$GLOBALS['egw']->common->egw_footer();

View File

@ -12,5 +12,15 @@
/* $Id$ */
// enable auto-loading of holidays from localhost by default
$oProc->query("INSERT INTO phpgw_config (config_app, config_name, config_value) VALUES ('phpgwapi','auto_load_holidays','True')");
$oProc->query("INSERT INTO phpgw_config (config_app, config_name, config_value) VALUES ('phpgwapi','holidays_url_path','localhost')");
foreach(array(
'auto_load_holidays' => 'True',
'holidays_url_path' => 'localhost',
) as $name => $value)
{
$oProc->insert($GLOBALS['egw_setup']->config_table,array(
'config_value' => $value,
),array(
'config_app' => 'phpgwapi',
'config_name' => $name,
),__FILE__,__LINE__);
}

View File

@ -1,13 +1,52 @@
<?php
// eTemplates for Application 'calendar', generated by etemplate.dump() 2004-12-12 13:22
// eTemplates for Application 'calendar', generated by soetemplate::dump4setup() 2005-11-08 22:20
/* $Id$ */
$templ_data[] = array('name' => 'calendar.freetimesearch','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:7:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:9:",size120b";s:5:"label";s:15:"Freetime Search";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:5:",ired";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:17:"Startdate / -time";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:4:"help";s:33:"Startdate and -time of the search";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:4:{s:4:"type";s:13:"select-number";s:4:"size";s:5:",0,12";s:4:"name";s:10:"duration_h";s:4:"help";s:23:"Duration of the meeting";}i:2;a:5:{s:4:"type";s:13:"select-number";s:4:"size";s:8:",0,59,05";s:5:"label";s:1:":";s:4:"name";s:12:"duration_min";s:4:"help";s:19:"Timeframe to search";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:18:"or Enddate / -time";}i:4;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:4:"help";s:57:"Enddate / -time of the meeting, eg. for more then one day";}}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Timeframe";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:10:"start_time";s:4:"help";s:19:"Timeframe to search";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"til";}i:3;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:8:"end_time";s:4:"help";s:19:"Timeframe to search";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Weekdays";}i:5;a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:1:"3";s:4:"name";s:8:"weekdays";s:4:"help";s:25:"Weekdays to use in search";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"button";s:5:"label";s:10:"New search";s:4:"name";s:6:"search";s:4:"help";s:36:"new search with the above parameters";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"search_window";s:4:"help";s:34:"how far to search (from startdate)";}}i:6;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:8:"freetime";s:4:"span";s:3:"all";s:4:"name";s:4:"rows";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}','size' => '','style' => '.size120b { text-size: 120%; font-weight: bold; }
$templ_version=1;
$templ_data[] = array('name' => 'calendar.conflicts','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:3:{i:0;a:3:{s:4:"type";s:5:"label";s:5:"label";s:20:" Scheduling conflict";s:4:"span";s:9:",size120b";}i:1;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:4:{s:1:"A";a:4:{s:4:"type";s:5:"image";s:4:"name";s:34:"conflicts[$row][icon_participants]";s:5:"label";s:38:"@conflicts[$row][tooltip_participants]";s:7:"no_lang";s:1:"1";}s:1:"B";a:4:{s:4:"type";s:5:"image";s:4:"name";s:27:"conflicts[$row][icon_recur]";s:5:"label";s:28:"@conflicts[$row][text_recur]";s:7:"no_lang";s:1:"1";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"name";s:21:"conflicts[$row][time]";s:7:"no_lang";s:1:"1";}s:1:"D";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:6:"2,,0,0";i:1;a:4:{s:4:"type";s:5:"label";s:4:"name";s:22:"conflicts[$row][title]";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"b";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:41:"conflicts[$row][conflicting_participants]";s:7:"no_lang";s:1:"1";}s:4:"help";s:23:"conflict[$row][tooltip]";}}}s:4:"rows";i:1;s:4:"cols";i:4;}i:2;a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"button";s:5:"label";s:15:"Ignore conflict";s:4:"name";s:14:"button[ignore]";s:4:"help";s:37:"Saves the event ignoring the conflict";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[reedit]";s:5:"label";s:13:"Re-Edit event";s:4:"help";s:30:"Allows to edit the event again";}i:3;a:4:{s:4:"type";s:6:"button";s:5:"label";s:15:"Freetime search";s:4:"name";s:16:"button[freetime]";s:4:"help";s:88:"Find free timeslots where the selected participants are availible for the given timespan";}}}','size' => '','style' => '','modified' => '1119080124',);
$templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:6:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"c4";s:3:"row";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";}i:1;a:3:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Title";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"name";s:5:"title";s:4:"span";s:3:"all";s:6:"needed";s:1:"1";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:3;a:3:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:63:"General|Description|Participants|Recurrence|Custom|Links|Alarms";s:4:"name";s:63:"general|description|participants|recurrence|custom|links|alarms";s:4:"help";s:158:"Location, Start- and Endtimes, ...|Full description|Participants, Resources, ...|Repeating Event Information|Custom fields|Links, Attachments|Alarm management";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:4;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:5:"owner";s:8:"readonly";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{s:4:"type";s:9:"date-time";s:5:"label";s:7:"Updated";s:4:"name";s:8:"modified";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}i:2;a:4:{s:4:"type";s:14:"select-account";s:5:"label";s:2:"by";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";}}}i:5;a:3:{s:1:"A";a:10:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"7";s:4:"span";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:4:"name";s:19:"button[edit_series]";s:5:"label";s:11:"Edit series";s:4:"help";s:35:"Edit this series of recuring events";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[edit]";s:5:"label";s:4:"Edit";s:4:"help";s:15:"Edit this event";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[copy]";s:5:"label";s:4:"Copy";s:4:"help";s:15:"Copy this event";}i:4;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:22:"saves the changes made";}i:5;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"apply the changes";}i:6;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";s:4:"help";s:16:"Close the window";}i:7;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:11:"custom_mail";s:5:"label";s:21:"mail all participants";s:4:"help";s:59:"compose a mail to all participants after the event is saved";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:5:"align";s:5:"right";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"name";s:21:"button[delete_series]";s:5:"label";s:13:"Delete series";s:4:"help";s:37:"Delete this series of recuring events";s:7:"onclick";s:56:"return confirm(\'Delete this series of recuring events\');";}i:2;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this event";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";}}}}s:4:"rows";i:5;s:4:"cols";i:3;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1118477069',);
$templ_data[] = array('name' => 'calendar.edit','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:6:{i:0;a:6:{s:2:"h1";s:6:",!@msg";s:2:"c2";s:2:"th";s:1:"A";s:3:"100";s:2:"c4";s:3:"row";s:2:"h4";s:8:",!@owner";s:1:"B";s:3:"300";}i:1;a:3:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:2;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Title";}s:1:"B";a:5:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"name";s:5:"title";s:4:"span";s:3:"all";s:6:"needed";s:1:"1";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:3;a:3:{s:1:"A";a:5:{s:4:"type";s:3:"tab";s:4:"span";s:3:"all";s:5:"label";s:63:"General|Description|Participants|Recurrence|Custom|Links|Alarms";s:4:"name";s:63:"general|description|participants|recurrence|custom|links|alarms";s:4:"help";s:158:"Location, Start- and Endtimes, ...|Full description|Participants, Resources, ...|Repeating Event Information|Custom fields|Links, Attachments|Alarm management";}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:4;a:3:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:5:"owner";s:8:"readonly";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";s:5:"align";s:5:"right";i:1;a:5:{s:4:"type";s:9:"date-time";s:5:"label";s:7:"Updated";s:4:"name";s:8:"modified";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}i:2;a:4:{s:4:"type";s:14:"select-account";s:5:"label";s:2:"by";s:4:"name";s:8:"modifier";s:8:"readonly";s:1:"1";}}}i:5;a:3:{s:1:"A";a:11:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";s:4:"span";s:1:"2";i:1;a:4:{s:4:"type";s:6:"button";s:4:"name";s:19:"button[edit_series]";s:5:"label";s:11:"Edit series";s:4:"help";s:35:"Edit this series of recuring events";}i:2;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[edit]";s:5:"label";s:4:"Edit";s:4:"help";s:15:"Edit this event";}i:3;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[copy]";s:5:"label";s:4:"Copy";s:4:"help";s:15:"Copy this event";}i:4;a:4:{s:4:"type";s:6:"button";s:4:"name";s:12:"button[vcal]";s:5:"label";s:6:"Export";s:4:"help";s:27:"Download this event as iCal";}i:5;a:4:{s:4:"type";s:6:"button";s:5:"label";s:4:"Save";s:4:"name";s:12:"button[save]";s:4:"help";s:22:"saves the changes made";}i:6;a:4:{s:4:"type";s:6:"button";s:4:"name";s:13:"button[apply]";s:5:"label";s:5:"Apply";s:4:"help";s:17:"apply the changes";}i:7;a:5:{s:4:"type";s:6:"button";s:4:"name";s:14:"button[cancel]";s:5:"label";s:6:"Cancel";s:7:"onclick";s:15:"window.close();";s:4:"help";s:16:"Close the window";}i:8;a:4:{s:4:"type";s:8:"checkbox";s:4:"name";s:11:"custom_mail";s:5:"label";s:21:"mail all participants";s:4:"help";s:59:"compose a mail to all participants after the event is saved";}}s:1:"B";a:1:{s:4:"type";s:5:"label";}s:1:"C";a:5:{s:4:"type";s:4:"hbox";s:5:"align";s:5:"right";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:6:"button";s:4:"name";s:21:"button[delete_series]";s:5:"label";s:13:"Delete series";s:4:"help";s:37:"Delete this series of recuring events";s:7:"onclick";s:56:"return confirm(\'Delete this series of recuring events\');";}i:2;a:5:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"name";s:14:"button[delete]";s:4:"help";s:17:"Delete this event";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";}}}}s:4:"rows";i:5;s:4:"cols";i:3;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1118477069',);
$templ_data[] = array('name' => 'calendar.edit.alarms','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:5:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";s:2:"h1";s:16:"20,@no_add_alarm";s:2:"c2";s:4:",top";s:2:"h2";s:8:",!@alarm";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"before the event";}s:1:"B";a:10:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"8";i:1;a:3:{s:4:"type";s:13:"select-number";s:4:"size";s:4:",0,7";s:4:"name";s:15:"new_alarm[days]";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,new_alarm[days]";s:5:"label";s:4:"days";}i:3;a:3:{s:4:"type";s:13:"select-number";s:4:"name";s:16:"new_alarm[hours]";s:4:"size";s:5:",0,23";}i:4;a:3:{s:4:"type";s:5:"label";s:4:"size";s:19:",,,new_alarm[hours]";s:5:"label";s:5:"hours";}i:5;a:3:{s:4:"type";s:13:"select-number";s:4:"name";s:15:"new_alarm[mins]";s:4:"size";s:7:",0,55,5";}i:6;a:3:{s:4:"type";s:5:"label";s:4:"size";s:18:",,,new_alarm[mins]";s:5:"label";s:7:"Minutes";}i:7;a:5:{s:4:"type";s:6:"select";s:4:"name";s:16:"new_alarm[owner]";s:7:"no_lang";s:1:"1";s:5:"label";s:3:"for";s:4:"help";s:31:"Select who should get the alarm";}i:8;a:3:{s:4:"type";s:6:"button";s:4:"name";s:17:"button[add_alarm]";s:5:"label";s:9:"Add alarm";}}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Alarms";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Time";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"before the event";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"All participants";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:5:"Owner";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Action";}}i:2;a:5:{s:1:"A";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:12:"${row}[time]";s:8:"readonly";s:1:"1";}s:1:"B";a:3:{s:4:"type";s:5:"label";s:4:"name";s:14:"${row}[offset]";s:7:"no_lang";s:1:"1";}s:1:"C";a:4:{s:4:"type";s:8:"checkbox";s:5:"align";s:6:"center";s:4:"name";s:11:"${row}[all]";s:8:"readonly";s:1:"1";}s:1:"D";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"${row}[owner]";s:8:"readonly";s:1:"1";}s:1:"E";a:7:{s:4:"type";s:6:"button";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:5:"align";s:6:"center";s:4:"name";s:27:"delete_alarm[$row_cont[id]]";s:4:"help";s:17:"Delete this alarm";s:7:"onclick";s:36:"return confirm(\'Delete this alarm\');";}}}s:4:"rows";i:2;s:4:"cols";i:5;s:4:"name";s:5:"alarm";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:2;s:4:"size";s:17:"100%,200,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1118780740',);
$templ_data[] = array('name' => 'calendar.edit.custom','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"c1";s:4:",top";}i:1;a:1:{s:1:"A";a:2:{s:4:"type";s:12:"customfields";s:4:"name";s:12:"customfields";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:17:"100%,200,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1118737582',);
$templ_data[] = array('name' => 'calendar.edit.description','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:14:",,,description";s:5:"label";s:11:"Description";}s:1:"B";a:3:{s:4:"type";s:8:"textarea";s:4:"size";s:5:"12,70";s:4:"name";s:11:"description";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118480337',);
$templ_data[] = array('name' => 'calendar.edit.general','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:9:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";s:2:"c3";s:3:"row";s:2:"c4";s:7:"row,top";s:2:"c6";s:3:"row";s:2:"c5";s:3:"row";s:2:"c2";s:3:"row";s:2:"h4";s:2:"60";s:1:"B";s:3:"35%";}i:1;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,start";s:5:"label";s:5:"Start";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:6:"needed";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:8:"checkbox";s:4:"name";s:9:"whole_day";s:5:"label";s:9:"whole day";s:4:"help";s:31:"Event will occupy the whole day";s:4:"size";s:11:",, ,disable";}}i:2;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:6:",,,end";s:5:"label";s:3:"End";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:6:"needed";s:1:"1";}s:1:"C";a:5:{s:4:"type";s:6:"button";s:5:"label";s:15:"Freetime search";s:4:"name";s:8:"freetime";s:4:"help";s:88:"Find free timeslots where the selected participants are availible for the given timespan";s:7:"onclick";s:239:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.uiforms.freetimesearch\')+values2url(this.form,\'start,end,participants,recur_type,whole_day\'),\'ft_search\',\'dependent=yes,width=700,height=500,scrollbars=yes,status=yes\'); return false;";}}i:3;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,location";s:5:"label";s:8:"Location";}s:1:"B";a:4:{s:4:"type";s:4:"text";s:4:"size";s:6:"80,255";s:4:"name";s:8:"location";s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:4;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,category";s:5:"label";s:8:"Category";}s:1:"B";a:4:{s:4:"type";s:10:"select-cat";s:4:"size";s:1:"3";s:4:"name";s:8:"category";s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:5;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:11:",,,priority";s:5:"label";s:8:"Priority";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:6:"2,,0,0";i:1;a:2:{s:4:"type";s:15:"select-priority";s:4:"name";s:8:"priority";}i:2;a:5:{s:4:"type";s:8:"checkbox";s:5:"label";s:12:"non blocking";s:4:"help";s:56:"A non blocking event will not conflict with other events";s:4:"name";s:12:"non_blocking";s:4:"size";s:11:",, ,disable";}s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}i:6;a:3:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:9:",,,public";s:5:"label";s:7:"Private";}s:1:"B";a:4:{s:4:"type";s:8:"checkbox";s:4:"size";s:3:"0,1";s:4:"name";s:6:"public";s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:3;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118477982',);
$templ_data[] = array('name' => 'calendar.edit.links','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:7:{s:1:"A";s:2:"95";s:2:"h1";s:6:",@view";s:2:"h2";s:6:",@view";s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";s:2:"c3";s:2:"th";s:2:"c4";s:11:"row_off,top";}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:16:"Create new links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:7:"link-to";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:14:"Existing links";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"link-list";s:4:"span";s:3:"all";s:4:"name";s:7:"link_to";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:4:"size";s:17:"100%,200,,,,,auto";s:7:"options";a:3:{i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,,,,auto','style' => '','modified' => '1118758702',);
$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:15:",,,participants";s:5:"label";s:12:"Participants";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:2:"14";s:4:"name";s:22:"participants[accounts]";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:16:"resources_select";s:4:"size";s:2:"14";s:4:"name";s:23:"participants[resources]";}}}s:4:"rows";i:1;s:4:"cols";i:4;s:4:"size";s:16:"100%,200,,row_on";s:7:"options";a:3:{i:3;s:6:"row_on";i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200,,row_on','style' => '','modified' => '1118481127',);
$templ_data[] = array('name' => 'calendar.edit.participants','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:5:{s:2:"c1";s:7:"row,top";s:1:"A";s:2:"95";s:2:"h1";s:6:",@view";s:2:"h2";s:7:",!@view";s:2:"c2";s:4:",top";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:15:",,,participants";s:5:"label";s:12:"Participants";}s:1:"B";a:3:{s:4:"type";s:14:"select-account";s:4:"size";s:2:"14";s:4:"name";s:22:"participants[accounts]";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:3:{s:4:"type";s:16:"resources_select";s:4:"size";s:2:"14";s:4:"name";s:23:"participants[resources]";}}i:2;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:12:"Participants";}s:1:"B";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:26:"accounts_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:22:"participants[accounts]";s:7:"options";a:0:{}}s:1:"C";a:3:{s:4:"type";s:5:"label";s:5:"label";s:9:"Resources";s:5:"align";s:5:"right";}s:1:"D";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:1:{s:2:"h1";s:19:",!@resources_status";}i:1;a:2:{s:1:"A";a:4:{s:4:"type";s:16:"resources_select";s:4:"name";s:6:"${row}";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"B";a:5:{s:4:"type";s:6:"select";s:4:"name";s:27:"resources_status[$row_cont]";s:8:"onchange";s:1:"1";s:4:"help";s:30:"Accept or reject an invitation";s:7:"no_lang";s:1:"1";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:23:"participants[resources]";s:7:"options";a:0:{}}}}s:4:"rows";i:2;s:4:"cols";i:4;s:4:"size";s:23:"100%,200,,row_on,,,auto";s:7:"options";a:4:{i:3;s:6:"row_on";i:0;s:4:"100%";i:1;s:3:"200";i:6;s:4:"auto";}}}','size' => '100%,200,,row_on,,,auto','style' => '','modified' => '1129665796',);
$templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:2:{s:2:"c1";s:3:"row";s:1:"A";s:2:"95";}i:1;a:1:{s:1:"A";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:1;s:4:"cols";i:1;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',);
$templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:6:{s:2:"c1";s:2:"th";s:1:"A";s:2:"95";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:3:"row";s:1:"D";s:3:"50%";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:27:"Repeating Event Information";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"be back soon ;-)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_type";s:5:"label";s:11:"Repeat type";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:10:"recur_type";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,recur_interval";s:5:"label";s:8:"Interval";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:14:"recur_interval";s:4:"help";s:53:"repeating interval, eg. 2 to repeat every second week";s:4:"size";s:9:"None,2,10";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:16:",,,recur_enddate";s:5:"label";s:8:"End date";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:13:"recur_enddate";s:4:"help";s:57:"repeat the event until which date (empty means unlimited)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_data";s:5:"label";s:11:"Repeat days";}s:1:"B";a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:3:"5,1";s:4:"name";s:10:"recur_data";s:4:"help";s:44:"Days of the week for a weekly repeated event";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:4;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',);
$templ_data[] = array('name' => 'calendar.edit.recurrence','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:9:{s:2:"c1";s:2:"th";s:1:"A";s:2:"95";s:2:"c2";s:3:"row";s:2:"c3";s:3:"row";s:2:"c4";s:7:"row,top";s:1:"D";s:3:"50%";s:2:"h1";s:2:"12";s:2:"h2";s:2:"12";s:2:"h3";s:2:"12";}i:1;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";s:5:"label";s:27:"Repeating Event Information";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:16:"be back soon ;-)";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:2;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_type";s:5:"label";s:11:"Repeat type";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:10:"recur_type";}s:1:"C";a:3:{s:4:"type";s:5:"label";s:4:"size";s:17:",,,recur_interval";s:5:"label";s:8:"Interval";}s:1:"D";a:4:{s:4:"type";s:13:"select-number";s:4:"name";s:14:"recur_interval";s:4:"help";s:53:"repeating interval, eg. 2 to repeat every second week";s:4:"size";s:9:"None,2,10";}}i:3;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:16:",,,recur_enddate";s:5:"label";s:8:"End date";}s:1:"B";a:4:{s:4:"type";s:4:"date";s:4:"name";s:13:"recur_enddate";s:4:"help";s:57:"repeat the event until which date (empty means unlimited)";s:4:"span";s:3:"all";}s:1:"C";a:1:{s:4:"type";s:5:"label";}s:1:"D";a:1:{s:4:"type";s:5:"label";}}i:4;a:4:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:13:",,,recur_data";s:5:"label";s:11:"Repeat days";}s:1:"B";a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:3:"6,1";s:4:"name";s:10:"recur_data";s:4:"help";s:44:"Days of the week for a weekly repeated event";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:10:"Exceptions";}s:1:"D";a:6:{s:4:"type";s:4:"grid";s:4:"data";a:2:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:4:"$row";s:8:"readonly";s:1:"1";}s:1:"B";a:6:{s:4:"type";s:6:"button";s:5:"label";s:6:"Delete";s:4:"size";s:6:"delete";s:4:"name";s:27:"delete_exception[$row_cont]";s:4:"help";s:21:"Delete this exception";s:7:"onclick";s:40:"return confirm(\'Delete this exception\');";}}}s:4:"rows";i:1;s:4:"cols";i:2;s:4:"name";s:15:"recur_exception";s:7:"options";a:0:{}}}}s:4:"rows";i:4;s:4:"cols";i:4;s:4:"size";s:8:"100%,200";s:7:"options";a:2:{i:0;s:4:"100%";i:1;s:3:"200";}}}','size' => '100%,200','style' => '','modified' => '1118737412',);
$templ_data[] = array('name' => 'calendar.export','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:8:{i:0;a:1:{s:2:"h5";s:2:",1";}i:1;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:8:",,,start";s:5:"label";s:5:"Start";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:5:"start";s:4:"help";s:23:"Startdate of the export";}}i:3;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:6:",,,end";s:5:"label";s:3:"End";}s:1:"B";a:3:{s:4:"type";s:4:"date";s:4:"name";s:3:"end";s:4:"help";s:21:"Enddate of the export";}}i:4;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:7:",,,file";s:5:"label";s:8:"Filename";}s:1:"B";a:3:{s:4:"type";s:4:"text";s:4:"name";s:4:"file";s:4:"help";s:24:"Filename of the download";}}i:5;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"size";s:10:",,,version";s:5:"label";s:7:"Version";}s:1:"B";a:2:{s:4:"type";s:6:"select";s:4:"name";s:7:"version";}}i:6;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:6:"button";s:5:"label";s:8:"Download";s:4:"name";s:8:"download";}}i:7;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:7;s:4:"cols";i:2;s:5:"align";s:6:"center";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1130738737',);
$templ_data[] = array('name' => 'calendar.freetimesearch','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:9:",size120b";s:5:"label";s:15:"Freetime Search";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:5:",ired";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:17:"Startdate / -time";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:4:"help";s:33:"Startdate and -time of the search";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:6:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"4";i:1;a:4:{s:4:"type";s:13:"select-number";s:4:"size";s:5:",0,12";s:4:"name";s:10:"duration_h";s:4:"help";s:23:"Duration of the meeting";}i:2;a:5:{s:4:"type";s:13:"select-number";s:4:"size";s:8:",0,59,05";s:5:"label";s:1:":";s:4:"name";s:12:"duration_min";s:4:"help";s:19:"Timeframe to search";}i:3;a:2:{s:4:"type";s:5:"label";s:5:"label";s:18:"or Enddate / -time";}i:4;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:4:"help";s:57:"Enddate / -time of the meeting, eg. for more then one day";}}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Timeframe";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:10:"start_time";s:4:"help";s:19:"Timeframe to search";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"til";}i:3;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:8:"end_time";s:4:"help";s:19:"Timeframe to search";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Weekdays";}i:5;a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:1:"3";s:4:"name";s:8:"weekdays";s:4:"help";s:25:"Weekdays to use in search";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"button";s:5:"label";s:10:"New search";s:4:"name";s:6:"search";s:4:"help";s:36:"new search with the above parameters";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"search_window";s:4:"help";s:34:"how far to search (from startdate)";}}i:6;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:8:"freetime";s:4:"span";s:3:"all";s:4:"name";s:4:"rows";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:2;}}','size' => '','style' => '.size120b { text-size: 120%; font-weight: bold; }
.ired { color: red; font-style: italic; }','modified' => '1097251203',);
$templ_data[] = array('name' => 'calendar.freetimesearch','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:7:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:9:",size120b";s:5:"label";s:15:"Freetime Search";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:5:",ired";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:17:"Startdate / -time";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:4:"help";s:33:"Startdate and -time of the search";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:8:"duration";s:4:"help";s:23:"Duration of the meeting";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:18:"or Enddate / -time";}i:3;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:4:"help";s:57:"Enddate / -time of the meeting, eg. for more then one day";}}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Timeframe";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:10:"start_time";s:4:"help";s:19:"Timeframe to search";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"til";}i:3;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:8:"end_time";s:4:"help";s:19:"Timeframe to search";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Weekdays";}i:5;a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:1:"3";s:4:"name";s:8:"weekdays";s:4:"help";s:25:"Weekdays to use in search";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"button";s:5:"label";s:10:"New search";s:4:"name";s:6:"search";s:4:"help";s:36:"new search with the above parameters";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"search_window";s:4:"help";s:34:"how far to search (from startdate)";}}i:6;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:8:"freetime";s:4:"span";s:3:"all";s:4:"name";s:4:"rows";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}','size' => '','style' => '.size120b { text-size: 120%; font-weight: bold; }
.ired { color: red; font-style: italic; }','modified' => '1102850646',);
$templ_data[] = array('name' => 'calendar.freetimesearch','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:7:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:3:{s:4:"type";s:5:"label";s:4:"span";s:9:",size120b";s:5:"label";s:15:"Freetime Search";}s:1:"B";a:4:{s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";s:7:"no_lang";s:1:"1";s:4:"name";s:3:"msg";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:17:"Startdate / -time";}s:1:"B";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:5:"start";s:4:"help";s:33:"Startdate and -time of the search";}}i:3;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Duration";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:8:"duration";s:4:"help";s:23:"Duration of the meeting";}i:2;a:4:{s:4:"type";s:9:"date-time";s:4:"name";s:3:"end";s:4:"help";s:57:"Enddate / -time of the meeting, eg. for more then one day";s:4:"span";s:9:",end_hide";}}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"Timeframe";}s:1:"B";a:7:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"5";i:1;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:10:"start_time";s:4:"help";s:19:"Timeframe to search";}i:2;a:2:{s:4:"type";s:5:"label";s:5:"label";s:3:"til";}i:3;a:3:{s:4:"type";s:13:"date-houronly";s:4:"name";s:8:"end_time";s:4:"help";s:19:"Timeframe to search";}i:4;a:2:{s:4:"type";s:5:"label";s:5:"label";s:8:"Weekdays";}i:5;a:4:{s:4:"type";s:10:"select-dow";s:4:"size";s:1:"3";s:4:"name";s:8:"weekdays";s:4:"help";s:25:"Weekdays to use in search";}}}i:5;a:2:{s:1:"A";a:4:{s:4:"type";s:6:"button";s:5:"label";s:10:"New search";s:4:"name";s:6:"search";s:4:"help";s:36:"new search with the above parameters";}s:1:"B";a:4:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"search_window";s:4:"help";s:34:"how far to search (from startdate)";}i:2;a:5:{s:4:"type";s:6:"button";s:4:"name";s:6:"cancel";s:5:"label";s:6:"Cancel";s:4:"help";s:16:"Close the window";s:7:"onclick";s:15:"window.close();";}}}i:6;a:2:{s:1:"A";a:4:{s:4:"type";s:8:"template";s:4:"size";s:8:"freetime";s:4:"span";s:3:"all";s:4:"name";s:4:"rows";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:6;s:4:"cols";i:2;}}','size' => '','style' => '.size120b { text-size: 120%; font-weight: bold; }
.redItalic { color: red; font-style: italic; }
.end_hide { visibility: hidden; }','modified' => '1102850646',);
$templ_data[] = array('name' => 'calendar.freetimesearch.rows','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Date";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Time";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Select";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";}}i:2;a:4:{s:1:"A";a:4:{s:4:"type";s:4:"date";s:4:"size";s:3:",16";s:4:"name";s:13:"${row}[start]";s:8:"readonly";s:1:"1";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[start]";s:4:"help";s:13:"select a time";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Select";s:4:"name";s:12:"select[$row]";s:4:"help";s:41:"use the selected time and close the popup";}s:1:"D";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"${row}[end]";s:8:"readonly";s:1:"1";}}}','size' => '','style' => '','modified' => '1097183756',);
$templ_data[] = array('name' => 'calendar.freetimesearch.rows','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:4:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:2:{s:2:"c1";s:2:"th";s:2:"c2";s:3:"row";}i:1;a:4:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Date";}s:1:"B";a:2:{s:4:"type";s:5:"label";s:5:"label";s:4:"Time";}s:1:"C";a:2:{s:4:"type";s:5:"label";s:5:"label";s:6:"Select";}s:1:"D";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Enddate";}}i:2;a:4:{s:1:"A";a:4:{s:4:"type";s:4:"date";s:4:"size";s:3:",16";s:4:"name";s:13:"${row}[start]";s:8:"readonly";s:1:"1";}s:1:"B";a:4:{s:4:"type";s:6:"select";s:7:"no_lang";s:1:"1";s:4:"name";s:13:"${row}[start]";s:4:"help";s:13:"select a time";}s:1:"C";a:4:{s:4:"type";s:6:"button";s:5:"label";s:6:"Select";s:4:"name";s:12:"select[$row]";s:4:"help";s:41:"use the selected time and close the popup";}s:1:"D";a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"${row}[end]";s:8:"readonly";s:1:"1";}}}s:4:"rows";i:2;s:4:"cols";i:4;}}','size' => '','style' => '','modified' => '1097183756',);
$templ_data[] = array('name' => 'calendar.import','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:5:{i:0;a:0:{}i:1;a:2:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:13:"all,redItalic";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";s:5:"align";s:6:"center";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}i:2;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:5:"label";s:9:"iCal file";}s:1:"B";a:3:{s:4:"type";s:4:"file";s:4:"name";s:9:"ical_file";s:6:"needed";s:1:"1";}}i:3;a:2:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:3:{s:4:"type";s:6:"button";s:5:"label";s:6:"Import";s:4:"name";s:6:"import";}}i:4;a:2:{s:1:"A";a:2:{s:4:"type";s:5:"label";s:4:"span";s:3:"all";}s:1:"B";a:1:{s:4:"type";s:5:"label";}}}s:4:"rows";i:4;s:4:"cols";i:2;s:5:"align";s:6:"center";s:7:"options";a:0:{}}}','size' => '','style' => '','modified' => '1131469789',);
$templ_data[] = array('name' => 'calendar.list','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:1:{s:2:"h1";s:6:",!@msg";}i:1;a:1:{s:1:"A";a:5:{s:4:"type";s:5:"label";s:4:"span";s:10:",redItalic";s:5:"align";s:6:"center";s:4:"name";s:3:"msg";s:7:"no_lang";s:1:"1";}}i:2;a:1:{s:1:"A";a:3:{s:4:"type";s:9:"nextmatch";s:4:"size";s:18:"calendar.list.rows";s:4:"name";s:2:"nm";}}}s:4:"rows";i:2;s:4:"cols";i:1;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1128458939',);
$templ_data[] = array('name' => 'calendar.list.rows','template' => '','lang' => '','group' => '0','version' => '1.0.1.001','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:3:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";s:1:"C";s:3:"50%";}i:1;a:5:{s:1:"A";a:1:{s:4:"type";s:5:"label";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:5:"Start";s:4:"name";s:5:"start";}i:2;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:3:"end";s:5:"label";s:3:"End";}}s:1:"C";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:5:"Title";s:4:"name";s:5:"title";}i:2;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Description";s:4:"name";s:3:"des";}}s:1:"D";a:3:{s:4:"type";s:23:"nextmatch-accountfilter";s:4:"size";s:12:"Participants";s:4:"name";s:11:"participant";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:2;a:5:{s:1:"A";a:2:{s:4:"type";s:5:"image";s:4:"name";s:12:"${row}[icon]";}s:1:"B";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[start]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"${row}[end]";s:8:"readonly";s:1:"1";}s:4:"name";s:5:"start";}s:1:"C";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[title]";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"b";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[description]";s:7:"no_lang";s:1:"1";}}s:1:"D";a:4:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[parts]";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"E";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"view";s:5:"label";s:4:"view";s:4:"name";s:19:"view[$row_cont[id]]";s:4:"help";s:15:"view this entry";s:7:"onclick";s:176:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.uiforms.view&cal_id=$row_cont[id]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:4:"Edit";s:4:"name";s:19:"edit[$row_cont[id]]";s:4:"help";s:15:"Edit this entry";s:7:"onclick";s:176:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.uiforms.edit&cal_id=$row_cont[id]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";}i:3;a:6:{s:4:"type";s:6:"button";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:17:"Delete this entry";s:7:"onclick";s:36:"return confirm(\'Delete this entry\');";}}}}s:4:"rows";i:2;s:4:"cols";i:5;s:4:"size";s:4:"100%";s:7:"options";a:1:{i:0;s:4:"100%";}}}','size' => '100%','style' => '','modified' => '1128457387',);
$templ_data[] = array('name' => 'calendar.list.rows','template' => '','lang' => '','group' => '0','version' => '1.0.1.002','data' => 'a:1:{i:0;a:6:{s:4:"type";s:4:"grid";s:4:"data";a:3:{i:0;a:4:{s:2:"c1";s:2:"th";s:2:"c2";s:7:"row,top";s:1:"B";s:3:"40%";s:1:"E";s:3:"10%";}i:1;a:5:{s:1:"A";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:5:"Start";s:4:"name";s:9:"cal_start";}i:2;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:7:"cal_end";s:5:"label";s:3:"End";}}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:5:"Title";s:4:"name";s:9:"cal_title";}i:2;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:5:"label";s:11:"Description";s:4:"name";s:15:"cal_description";}}s:1:"C";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:4:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:9:"cal_owner";s:5:"label";s:5:"Owner";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:20:"nextmatch-sortheader";s:4:"name";s:12:"cal_location";s:5:"label";s:8:"Location";}}s:1:"D";a:3:{s:4:"size";s:16:"All participants";s:4:"name";s:11:"participant";s:4:"type";s:23:"nextmatch-accountfilter";}s:1:"E";a:2:{s:4:"type";s:5:"label";s:5:"label";s:7:"Actions";}}i:2;a:5:{s:1:"A";a:5:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:13:"${row}[start]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:9:"date-time";s:4:"name";s:11:"${row}[end]";s:8:"readonly";s:1:"1";}s:4:"name";s:5:"start";}s:1:"B";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:5:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[title]";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";s:4:"size";s:1:"b";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:19:"${row}[description]";s:7:"no_lang";s:1:"1";}}s:1:"C";a:4:{s:4:"type";s:4:"vbox";s:4:"size";s:1:"2";i:1;a:3:{s:4:"type";s:14:"select-account";s:4:"name";s:13:"${row}[owner]";s:8:"readonly";s:1:"1";}i:2;a:3:{s:4:"type";s:5:"label";s:4:"name";s:16:"${row}[location]";s:7:"no_lang";s:1:"1";}}s:1:"D";a:4:{s:4:"type";s:5:"label";s:4:"name";s:13:"${row}[parts]";s:8:"readonly";s:1:"1";s:7:"no_lang";s:1:"1";}s:1:"E";a:5:{s:4:"type";s:4:"hbox";s:4:"size";s:1:"3";i:1;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"view";s:5:"label";s:4:"view";s:4:"name";s:19:"view[$row_cont[id]]";s:4:"help";s:15:"View this event";s:7:"onclick";s:176:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.uiforms.view&cal_id=$row_cont[id]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";}i:2;a:6:{s:4:"type";s:6:"button";s:4:"size";s:4:"edit";s:5:"label";s:4:"Edit";s:4:"name";s:19:"edit[$row_cont[id]]";s:4:"help";s:15:"Edit this event";s:7:"onclick";s:176:"window.open(egw::link(\'/index.php\',\'menuaction=calendar.uiforms.edit&cal_id=$row_cont[id]\'),\'425\',\'dependent=yes,width=750,height=450,scrollbars=yes,status=yes\'); return false;";}i:3;a:6:{s:4:"type";s:6:"button";s:4:"name";s:21:"delete[$row_cont[id]]";s:4:"size";s:6:"delete";s:5:"label";s:6:"Delete";s:4:"help";s:17:"Delete this event";s:7:"onclick";s:36:"return confirm(\'Delete this event\');";}}}}s:4:"rows";i:2;s:4:"cols";i:5;s:7:"options";a:0:{}s:4:"size";s:4:"100%";}}','size' => '100%','style' => '','modified' => '1128457387',);

View File

@ -1,352 +1,275 @@
%1 %2 in %3 calendar de %1 %2 im %3
%1 matches found calendar de %1 Treffer gefunden
%1 records imported calendar de %1 Datensätze importiert
%1 records read (not yet imported, you may go back and uncheck test import) calendar de %1 Datensätze gelesen (noch nicht importiert, sie können zurück gehen und Test Import ausschalten)
(for weekly) calendar de (für wöchentlich)
(i/v)cal calendar de [iv]Cal
1 match found calendar de 1 Treffer gefunden
a calendar de a
accept calendar de Zusagen
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar de <b>Bitte beachten</b>: Der Kalender verwendet die Feiertages Ihres Landes, welches auf %1 eingestellt ist. Das können Sie in Ihren %2 ändern.<br />Feiertage werden %3 automatisch von %4 installiert, was in %5 änderbar ist.
a non blocking event will not conflict with other events calendar de Ein nicht blockierender Termin ergibt keine Konflikt mit anderen Terminen
accept or reject an invitation calendar de Einladung zu- oder absagen
accepted calendar de Zugesagt
action that caused the notify: added, canceled, accepted, rejected, ... calendar de Aktion die die Benachrichtigung verursacht hat: Zugefügt, Storniert, Zugesagt, Abgesagt
add a single entry by passing the fields. calendar de Einen einzelnen neuen Eintrag über seine Felder erzeugen.
actions calendar de Befehle
add alarm calendar de Alarm zufügen
add contact calendar de Kontakt zufügen
add or update a single entry by passing the fields. calendar de Einen einzelnen Eintrag zufügen oder speichern durch Angabe der Felder.
added calendar de Neuer Termin
address book calendar de Adressbuch
after current date calendar de Nach dem aktuellen Datum
alarm calendar de Alarm
alarm added calendar de Alarm zugefügt
alarm deleted calendar de Alarm gelöscht
alarm for %1 at %2 in %3 calendar de Alarm für %1 am %2 in %3
alarm management calendar de Alarm Management
alarm-management calendar de Alarm Management
alarms calendar de Alarme
all categories calendar de Alle Kategorien
all day calendar de ganztägig
all events calendar de Alle Termine
all participants calendar de Alle Teilnehmer
allows to edit the event again calendar de Erlaubt den Termin erneut zu bearbeiten
apply the changes calendar de Übernimmt die Änderungen
are you sure you want to delete this country ? calendar de Sind Sie sicher, dass Sie dieses Land löschen wollen ?
are you sure you want to delete this holiday ? calendar de Sind Sie sicher, dass Sie diesen Feiertag löschen wollen ?
are you sure\nyou want to\ndelete these alarms? calendar de Sind Sie sicher,\ndass Sie diese\nAlarme löschen wollen ?
are you sure\nyou want to\ndelete this entry ? calendar de Sind Sie sicher,\ndass Sie diesen\nEintrag löschen wollen ?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar de Sind Sie sicher,\ndass Sie diesen\nEintrag löschen wollen ?\n\nDieser Eintrag wird damit\nfür alle Benutzer gelöscht.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar de Sind Sie sicher,\ndass Sie diesen einzelnen\nEintrag löschen wollen ?\n\nDieser Eintrag wird damit\nfür alle Benutzer gelöscht.
are you surenyou want tondelete these alarms? calendar de Sind Sie sicher,\ndass Sie diese\nAlarme löschen wollen ?
are you surenyou want tondelete this entry ? calendar de Sind Sie sicher,\ndass Sie diesen\nEintrag löschen wollen ?
are you surenyou want tondelete this entry ?nnthis will deletenthis entry for all users. calendar de Sind Sie sicher,\ndass Sie diesen\nEintrag löschen wollen ?\n\nDieser Eintrag wird damit\nfür alle Benutzer gelöscht.
are you surenyou want tondelete this single occurence ?nnthis will deletenthis entry for all users. calendar de Sind Sie sicher,\ndass Sie diesen einzelnen\nEintrag löschen wollen ?\n\nDieser Eintrag wird damit\nfür alle Benutzer gelöscht.
back calendar de zurück
back half a month calendar de einen halben Monat zurück
back one month calendar de einen Monat zurück
before current date calendar de Vor dem aktuellen Datum
before the event calendar de vor dem Termin
brief description calendar de Kurzbeschreibung
business calendar de geschäftlich
calendar common de Kalender
calendar - [iv]cal importer calendar de Kalendar - [iv]Cal Importieren
calendar - add calendar de Kalendereintrag hinzufügen
calendar - edit calendar de Kalendereintrag bearbeiten
birthday calendar de Geburtstag
busy calendar de belegt
by calendar de von
calendar event calendar de Kalender Aktualisierung
calendar holiday management admin de Feiertage verwalten
calendar preferences calendar de Kalender Einstellungen
calendar settings admin de Kalender Einstellungen
calendar-fieldname calendar de Kalender Feldname
can't add alarms in the past !!! calendar de Kann keine Alarme in der Vergangenheit setzen !!!
canceled calendar de Abgesagt
change all events for $params['old_owner'] to $params['new_owner']. calendar de Ändere alle Termine für $params['old_owner'] auf $params['new_owner'].
change status calendar de Zusage ändern
charset of file calendar de Zeichensatz der Datei
choose the category calendar de Kategorie auswählen
click %1here%2 to return to the calendar. calendar de %1Hier%2 klicken um zum Kalender zurück zu kehren.
configuration calendar de Konfiguration
close the window calendar de Schließt das Fenster
compose a mail to all participants after the event is saved calendar de Schreibe eine Mail an alle Teilnehmer nachdem der Termin gespeichert wurde
copy of: calendar de Kopie von:
copy this event calendar de Kopiert diesen Termin
countries calendar de Länder
country calendar de Land
created by calendar de Angelegt von
create new links calendar de Neue Verknüpfung erstellen
csv calendar de CSV
csv-fieldname calendar de CSV-Feldname
csv-filename calendar de CSV-Dateiname
custom fields calendar de Benutzerdefinierte Felder
custom fields and sorting common de Benutzerdefinierte Felder und Sortierung
daily calendar de Täglich
daily matrix view calendar de Matrix-Ansicht
days calendar de Tage
days of the week for a weekly repeated event calendar de Wochentage für wöchentlich wiederholten Termin
days repeated calendar de wiederholte Tage
dayview calendar de Tagesansicht
default appointment length (in minutes) calendar de Standardlänge eines neuen Kalendareintrags (in Minuten)
default calendar filter calendar de Standard-Filter des Kalenders
default calendar view calendar de Standard-Ansicht des Kalenders
default length of newly created events. the length is in minutes, eg. 60 for 1 hour. calendar de Vorgabe für die Länge von neuen Kalendareinträgen. Die Länge ist in Minuten, zb. 60 für 1 Stunde.
default view of appointments calendar de Standard-Ansicht der Termine
default week view calendar de Vorgabe Wochenansicht
defines the size in minutes of the lines in the day view. calendar de Bestimmt die Zeitskala in Minuten der Tagesansicht des Kalendars.
delete a single entry by passing the id. calendar de Lösche einen einzelnen Eintrag über seine Id.
delete an entire users calendar. calendar de Lösche den kompletten Kalender eines Benutzers.
delete selected contacts calendar de Löscht die ausgewählten Kontakte.
delete selected participants calendar de Löscht die ausgewählten Teilnehmer
delete series calendar de Serie löschen
delete single calendar de Einzelevent löschen
deleted calendar de Abgesagt
description calendar de Beschreibung
determining window width ... calendar de Bestimme die Fensterbreite ...
disable calendar de Ausschalten
disabled calendar de ausgeschaltet
display interval in day view calendar de Intervall der Tagesansicht
display mini calendars when printing calendar de zeige einen kleinen Kalender beim drucken
delete this alarm calendar de Diesen Alarm löschen
delete this event calendar de Diesen Termin löschen
delete this exception calendar de Diese Ausnahme löschen
delete this series of recuring events calendar de Diese Serie von wiederholenden Terminen löschen
disinvited calendar de Ausgeladen
display status of events calendar de Status von Terminen anzeigen
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 Zeigt Ihre Standard-Kalendar-Ansicht auf der Startseite angezeigt werden (die Seite die sich nach dem Login öffnet oder wenn Sie auf Home klicken)?
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 changes include changes of title, description, participants and the acceptions and rejections of the appointment. calendar de Möchten Sie über neue oder geänderte Termine benachrichtigt werden? Sie werden benachrichtigt werden über Änderungen welche Sie selbst durchführen.<br> Sie können die benachrichtigungen beschränken auf bestimmte Änderungen. Jeder auszuwählende Punkt schließt auch die darüber aufgeführten Benachrichtigungen mit ein. Alle Änderungen beinhaltet Änderungen des Titels, der Beschreibung, Teilnehmer so wie Zusagen so wie Absagen von Terminen.
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 benachrichtig.<br>Sie können die Benachrichtigungen auf verschiedene Änderungen begrenzen. Jede Zeile enthält die Benachrichtigungen der darüberliegenden. Alle Änderungen umfasst den Title, die Beschreibung, Teilnehmer, aber keine Antworten der Teilnehmer. Wenn der Ersteller eines Event irgendeine Benachrichtigung will, erhält er automatisch auch die Antworten der Teilnehmer, wie Zusagen und Absagen.
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?
download calendar de Herunterladen
duration calendar de Dauer
download this event as ical calendar de Termin als iCal herunterladen
duration of the meeting calendar de Dauer des Termins
edit series calendar de Serie bearbeiten
edit single calendar de Einzel bearbeiten
email notification calendar de Benachrichtigung per Email
email notification for %1 calendar de Benachrichtigung per Email für %1
edit this event calendar de Diesen Termin bearbeiten
edit this series of recuring events calendar de Diese Serie von wiederholenden Terminen bearbeiten
empty for all calendar de leer für alle
enable calendar de Einschalten
enabled calendar de eingeschaltet
end calendar de Ende
end date/time calendar de Enddatum/-zeit
enddate calendar de Enddatum
enddate / -time of the meeting, eg. for more then one day calendar de Enddatum und -zeit des Termins, zB. für mehr als einen Tag
enddate of the export calendar de Enddatum des Exports
ends calendar de endet
enter output filename: ( .vcs appended ) calendar de Namen der Ausgabedatei (.vcs angehangen)
error adding the alarm calendar de Fehler beim Zufügen des Alarms
error: importing the ical calendar de Fehler: beim Importieren des iCal
error: saving the event !!! calendar de Fehler: beim Speichern des Termins !!!
event copied - the copy can now be edited calendar de Termin kopiert - die Kopie kann jetzt bearbeitet werden
event deleted calendar de Termin gelöscht
event details follow calendar de Details zum Termin folgen
event saved calendar de Termin gespeichert
event will occupy the whole day calendar de Termin nimmt den ganzen Tag ein
exceptions calendar de Ausnahmen
existing links calendar de Bestehende Verknüpfungen
export calendar de Exportieren
export a list of entries in ical format. calendar de Eine Liste von Einträgen im iCal Format exportieren.
extended calendar de Erweitert
extended updates always include the complete event-details. ical's can be imported by certain other calendar-applications. calendar de Erweiterte Benachrichtigungen enthälten immer die kompletten Termindetails. iCal's können von vielen anderen Kalendarprogrammen importiert werden.
external participants calendar de Externe Teilnehmer
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar de Fehler beim Senden einer Email an '%1' #%2 Betreff='%3', Absender='%4' !!!
fieldseparator calendar de Feldtrenner
find free timeslots where the marked participants are availible for the given timespan calendar de Such freie Zeitslots an denen die ausgewählten Teilnehmer für die gegebene Zeitspanne verfügbar sind
filename calendar de Dateiname
filename of the download calendar de Name der herunterzuladenden Datei
find free timeslots where the selected participants are availible for the given timespan calendar de Such freie Zeitslots an denen die ausgewählten Teilnehmer für die gegebene Zeitspanne verfügbar sind
firstname of person to notify calendar de Vorname der zu benachrichtigenden Person
for calendar de für
format of event updates calendar de Format der Benachrichtigungen
fr calendar de Fr
free/busy calendar de frei/belegt
forward half a month calendar de einen halben Monat weiter
forward one month calendar de einen Monat weiter
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar de Belegtzeiten: Unbekannter Benutzername '%1', falsches Passwort oder nicht verfügbar für nicht angemeldete Benutzer !!!
freetime search calendar de Terminsuche
frequency calendar de Häufigkeit
fri calendar de Fr
full description calendar de vollständige Beschreibung
fullname of person to notify calendar de Name der zu benachrichtigenden Person
generate printer-friendly version calendar de Drucker-freundliche Version erzeugen
global categories calendar de Globale Kategorien
general calendar de Allgemein
global public and group public calendar de Global öffentlich und Gruppen-öffentlich
global public only calendar de nur Global öffentlich
go! calendar de Go!
grant calendar access common de Berechtigungen für Kalenderzugriffe
group planner calendar de Gruppenplaner
group public only calendar de Gruppen-Öffentlich
here is your requested alarm. calendar de Hier ist ihr bestellter Alarm.
high calendar de hoch
high priority calendar de Hohe Priorität
holiday calendar de Feiertag
holiday management calendar de Feiertagsverwaltung
holiday-management calendar de Feiertagsverwaltung
holidays calendar de Feiertage
hours calendar de Stunden
how far to search (from startdate) calendar de wie weit suchen (vom Startdatum)
i participate calendar de Ich nehme teil
ical calendar de iCal
ical / rfc2445 calendar de iCal / RFC2445
ical export calendar de iCal Export
ical file calendar de iCal Datei
ical import calendar de iCal Import
ical successful imported calendar de iCal erfolgreich importiert
if checked holidays falling on a weekend, are taken on the monday after. calendar de Wenn ausgewählt werden Feiertage die auf ein Wochenende fallen, am drauffolgenden Montag nachgeholt.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar de Wenn Sie hier kein Passwort angeben, ist die Information für jeden verfügbar, der die Adresse (URL) kennt!!!
ignore conflict calendar de Konflikt ignorieren
import calendar de Importieren
import csv-file common de CSV-Datei importieren
import csv-file calendar de CSV-Datei importieren
interval calendar de Interval
intervals in day view calendar de Zeitintervalle in der Tagesansicht
intervals per day in planner view calendar de Zeitintervalle pro Tag in der Planeransicht
invalid entry id. calendar de ungültige Id des Eintrags.
invalid email-address "%1" for user %2 calendar de Ungültige Email-Adresse "%1" für Benutzer %2
last calendar de letzte
lastname of person to notify calendar de Nachname der zu benachrichtigenden Person
length shown<br>(emtpy for full length) calendar de angezeigte Länge<br>(leer für volle Länge)
length<br>(<= 255) calendar de Länge<br>(<= 255)
link calendar de Verweis
link to view the event calendar de Verweis (Weblink) um den Termin anzuzeigen
list all categories. calendar de Alle Kategorien auflisten.
load [iv]cal calendar de [iv]Cal Laden
links calendar de Verknüpfungen
links, attachments calendar de Verknüpfungen, Dateianhänge
listview calendar de Listenansicht
location calendar de Ort
location to autoload from admin de Von wo sollen sie geladen werden
low calendar de niedrig
location, start- and endtimes, ... calendar de Ort, Start- und Endzeiten
mail all participants calendar de Mail an alle Teilnehmer
make freebusy information available to not loged in persons? calendar de Die Belegtzeiten für nicht angemeldete Personen verfügbar machen?
matrixview calendar de Matrixansicht
minutes calendar de Minuten
mo calendar de Mo
modified calendar de Geändert
modify list of external participants calendar de Liste der externen Teilnehmer änderen
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)
monthview calendar de Monatsansicht
needs javascript to be enabled !!! calendar de Dafür muss Javascript aktiviert sein !!!
new entry calendar de Neuer Eintrag
new name must not exist and not be empty!!! calendar de Neuer Name darf nicht exisitieren und nicht leer sein!!!
new search with the above parameters calendar de neue Suche mit den obigen Parametern
next day calendar de nächster Tag
no events found calendar de Keine Termine gefunden
no filter calendar de Kein Filter
no matches found calendar de Keine Treffer gefunden
no matches found. calendar de Keine Treffer gefunden.
no response calendar de Keine Antwort
normal calendar de normal
notification message for updates you send calendar de Mitteilungs Text für updates welche Sie versenden
non blocking calendar de nicht blockierend
notification messages for added events calendar de Benachrichtigungstext für neue Termine
notification messages for canceled events calendar de Benachrichtigungstext für stornierte Termine
notification messages for disinvited participants calendar de Benachrichtigung für ausgeladene Teilnehmer
notification messages for modified events calendar de Benachrichtigungstext für geänderte Termine
notification messages for your alarms calendar de Benachrichtigungstext für Ihre Alarme
notification messages for your responses calendar de Benachrichtigungstext für Ihre Antworten
number of intervals per day in planner view calendar de Anzahl Intervale pro Tag im Planer
number of months calendar de Anzahl Monate
number of records to read (%1) calendar de Anzeil Datensätze zu lesen (%1)
observance rule calendar de Observance Rule
occurence calendar de Wiederholung
old startdate calendar de Altes Startdatum
olddate calendar de AltesDatum
on %1 %2 %3 your meeting request for %4 calendar de Am %1 hat %2 Ihre Einladung für den %4 %3
on all changes calendar de bei allen Veränderungen
on all modification, but responses calendar de bei allen Änderungen, außer Antworten
on any time change (and above options) calendar de bei allen zeitliche Änderunge (und obige optionen)
on any time change too calendar de auch jede zeitliche Veränderung
on invitation / cancelation only calendar de nur bei Einladungen/Absagen
on participant responses too calendar de auch bei Antworten der Teilnehmer
on time change of more than 4 hours too calendar de bei zeitlichen Änderungen größer als 4 Stunden
on time change of time of more than 4 hours (and above options) calendar de wenn der Termin sich um mehr als 4 Stunde verschiebt (und obige Optionen)
one month calendar de ein Monat
one week calendar de eine Woche
one year calendar de ein Jahr
only the initial date of that recuring event is checked! calendar de Nur das Startdatum diese wiederholenden Termins wird geprüft!
open todo's: calendar de unerledigte Aufgaben:
or enddate / -time calendar de oder Enddatum / -zeit
order calendar de Reihenfolge
overlap holiday calendar de überlappender Feiertag
participant calendar de Teilnehmer
participants calendar de Teilnehmer
participates calendar de nimmt teil
participants disinvited from an event calendar de Ausgeladene Teilnehmer eines Termins
participants, resources, ... calendar de Teilnehmer, Ressourcen
password for not loged in users to your freebusy information? calendar de Passwort für Ihre Belegtzeiten für nicht angemeldete Personen?
people holiday calendar de Feiertag
permission denied calendar de Zugriff verweigert
planner calendar de Planer
planner by category calendar de Planer nach Kategorien
planner by user calendar de Planer nach Benutzern
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar de Bitte den entsprechenden Eintrag im Ihrem Kalendar bestätigen, Zusagen, Absagen oder die Änderungen beachten
please enter a filename !!! calendar de Bitte geben Sie einen Dateinamen an !!!
please note: you can configure the field assignments after you uploaded the file. calendar de Bitte beachten: Die Feldzuordnung kann NACH dem Hochladen der Datei konfiguriert werden.
preselected group for entering the planner calendar de vorausgewählte Gruppe beim Planeraufruf
previous day calendar de vorheriger Tag
print calendars in black & white calendar de Kalender in schwarz und weiß drucken
print the mini calendars calendar de Mini- Kalender drucken
printer friendly calendar de Drucker-freundlich
privat calendar de Privat
previous calendar de vorherig
private and global public calendar de Privat und Global öffentlich
private and group public calendar de Privat und Gruppen öffentlich
private only calendar de nur private
re-edit event calendar de Event erneut bearbeiten
read a list of entries. calendar de Eine Liste von Einträgen lesen.
read a single entry by passing the id and fieldlist. calendar de Einen einzelnen Eintrag über seine Id und eine Feldliste lesen.
read this list of methods. calendar de Diese Liste der Methoden lesen.
receive email updates calendar de Empfange E-Mail updates
receive email updates when: calendar de Empfange E-Mail updates wenn:
receive extra information in event mails calendar de Zusätzliche Informationen bei EMail-Benachrichtigung
receive summary of appointments calendar de Zusammenfassung der Termine erhalten
recurrence calendar de Wiederholung
recurring event calendar de Wiederholender Termin
refresh calendar de Aktualisieren
reinstate calendar de Wiedereinsetzen
reject calendar de Absagen
rejected calendar de Abgesagt
repeat day calendar de Wiederholungstag
repeat end date calendar de Enddatum
repeat days calendar de Wiederholungstage
repeat the event until which date (empty means unlimited) calendar de Bis zu welchen Datum soll der Termin wiederholt werden (leer bedeutet unbegrenzt)
repeat type calendar de Wiederholungstyp
repeating event information calendar de Informationen zu sich wiederholenden Ereignissen
repeating interval, eg. 2 to repeat every second week calendar de Wiederholungsinterval, zB. 2 für jeder zweite Woche
repetition calendar de Wiederholung
repetitiondetails (or empty) calendar de Details der Wiederholung (oder leer)
reset calendar de Zurücksetzen
resources calendar de Ressourcen
rule calendar de Regel
sa calendar de Sa
sat calendar de Sa
saves the changes made calendar de Speichert die Änderungen
saves the event ignoring the conflict calendar de Speichert den Konflikt ignorierend den Termin
scheduling conflict calendar de Terminüberschneidung
search results calendar de Suchergebnisse
select a %1 calendar de %1 auswählen
select a time calendar de eine Zeit auswählen
selected contacts (%1) calendar de Ausgewählte Kontakte (%1)
send updates via email common de Updates via E-Mail senden
send/receive updates via email calendar de Senden/Empfangen von Aktualisierungen via EMail
select resources calendar de Ressourcen auswählen
select who should get the alarm calendar de Auswählen wer den Alarm erhalten soll
set a year only for one-time / non-regular holidays. calendar de Nur für einmalige/unregelmäßige Feiertage das Jahr angeben.
set new events to private calendar de Neue Termine als private Termine eintragen
should invitations you rejected still be shown in your calendar ?<br>you can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar! calendar de Sollen Einladungen welche von Ihnen abgelehnt wurden in Ihrem Kalender angezeigt werden?<br> Sie können diese Einladungen dann später akzeptieren (z. B. wenn Sie eine Terminkolission gelöst haben), wenn Sie in Ihrem Kalender noch vorhanden sind!
should new events created as private by default ? calendar de Sollen neue Termine generell als Privat angelegt werden?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar de Sollen nicht angemeldete Personen ihre Belegtzeiten einsehen können? Sie können ein Passwort setzen um diese Informationen zu schützen. Das Passwort sollte sich von Ihrem normalen Passwort unterscheiden. Die Belegtzeiten sind im iCal Format und enthalten ausschließlich die Zeiten an denen sie nicht verfügbar sind. Sie enthalten NICHT den Namen, die Beschreibung oder den Ort des Termins. Die Adresse (URL) Ihrer Belegtzeiten ist %1.
should the mini calendars by printed / displayed in the printer friendly views ? calendar de Soll der Mini Kalender "gedruckt werden/angezeigt werden" in einer Druck freundlichen Ansicht ?
should the printer friendly view be in black & white or in color (as in normal view)? calendar de Soll die Drucker freundliche Ansicht in schwarz-weiß dargestellt werden oder in Farbe (identisch der normalen Ansicht)?
should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ? calendar de Soll der Status (Zugesagt,Abgesagt ...)der Termin- Teilnehmer in Klammern hinter jeden Teilnehmer angezeigt werden?
show day view on main screen calendar de Tagesansicht auf Startseite anzeigen
show default view on main screen calendar de Standardansicht auf der Startseite anzeigen
show high priority events on main screen calendar de Termine mit hoher Priorität auf der Startseite anzeigen
show invitations you rejected calendar de Zeige Einladungen welche abgelehnt wurden an
show list of upcoming events calendar de Zeige eine Liste der kommenden Termine
show next seven days calendar de Nächsten sieben Tage anzeigen
show only one day calendar de Nur einen Tag anzeigen
show the calendar of multiple users calendar de Kalender von mehreren Benutzeren anzeigen
show this month calendar de Diesen Monat anzeigen
show this week calendar de Diese Woche anzeigen
single event calendar de Einzelner Termin
sorry, the owner has just deleted this event calendar de Der Eigentümer hat diesen Termin gerade gelöscht
sorry, this event does not exist calendar de Dieser Termin existiert nicht
sorry, this event does not have exceptions defined calendar de Dieser Termin hat keine Ausnahmen definiert
sort by calendar de Sortieren nach
specifies the the number of intervals shown in the planner view. calendar de Legt die Anzahl der Zeitintervalle fest welche in der Kalenderplanung angezeigt werden.
start calendar de Start
start date/time calendar de Startdatum/-zeit
start- and enddates calendar de Start- und Enddatum/-zeit
startdate calendar de Startdatum
startdate / -time calendar de Startdatum / -zeit
startdate and -time of the search calendar de Startdatum und -zeit der Suche
startdate of the export calendar de Startdatum des Exports
startrecord calendar de Startdatensatz
su calendar de So
status changed calendar de Status geändert
submit to repository calendar de Übertragen zu eGroupWare.org
sun calendar de So
tentative calendar de Vorläufige Zusage
test import (show importable records <u>only</u> in browser) calendar de Test Import (zeigt importierte Datensätze <u>nur</u> im Webbrowser an)
text calendar de Text
th calendar de Do
the following conflicts with the suggested time:<ul>%1</ul> calendar de Im gewählten Zeitraum gibt es einen Konflikt:<ul>%1</ul>
the user %1 is not participating in this event! calendar de Der Benutzer %1 nimmt nicht an diesem Event teil!
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar de Fehler beim Kontaktieren Ihres News-Servers.<br>Bitte benachrichtigen Sie Ihren Administrator um Servername, Username und Passwort für News zu überprüfen.
this day is shown as first day in the week or month view. calendar de Dieser Tag wird als erster in der Wochen- oder Monatsansicht angezeigt
this defines the end of your dayview. events after this time, are shown below the dayview. calendar de Diese Zeit definiert das Ende des Arbeitstags in der Tagesansicht. Alle späteren Einträge werden darunter dargestellt.
this defines the start of your dayview. events before this time, are shown above the dayview. calendar de Diese Zeit definiert das Start des Arbeitstags in der Tageseinsicht. Alle späteren Einträge werden darüber dargestellt.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar de Diese Zeit definiert den Anfang des Arbeitstags in der Tagesansicht. Alle früheren Einträge werden darüber dargestellt.
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar de Diese Gruppe wird als vorauswahl ausgewählt wenn Sie den Planer öffnen. Sie können die Gruppe jederzeit wechseln wenn Sie möchten.
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar de Das wird meistens durch einen nicht oder falsch konfigurierten SMTP Server verursacht. Benachrichtigen Sie Ihren Administrator.
this message is sent for canceled or deleted events. calendar de Diese Benachrichtigung wird für stornierte oder gelöschte Termine versandt.
this message is sent for modified or moved events. calendar de Diese Benachrichtigung wird für geänderte Termine versandt.
this message is sent to disinvited participants. calendar de Diese Nachricht wird ausgeladenen Teilnehmern geschickt.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar de Diese Nachricht wird an alle Teilnehmer der Termine die Sie anlegen versandt, die Benachrichtigungen wünschen.<br>Sie können verschiedene Variablen verwenden, welche durch die Daten des Termins ersetzt werden. Die erste Zeite ist der Betreff der E-Mail.
this message is sent to every participant of events you own, who has requested notifcations.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar de Mit dieser Nachricht laden Sie Teilnehmer zu einem Termin ein, welche eine automatische Benachrichtigung aktiviert haben.<br> Sie können verschiedene Variablen benutzen welche durch die Daten des Meetings ersetzt werden. Die erste Zeile ist der Betreff der E-Mail
this message is sent when you accept, tentative accept or reject an event. calendar de Diese Nachricht wird gesendet wenn Sie einen Termin zusagen, vorläufig zusagen oder absagen.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar de Diese Meldung wird ihnen gesandt, wenn sie einen Alarm für einen Termin setzen. Nehmen sie alle Information darin auf, die sie benötigen.
this month calendar de Dieser Monat
this week calendar de Diese Woche
this year calendar de Dieses Jahr
three month calendar de drei Monate
thu calendar de Do
til calendar de bis
timeframe calendar de Zeitrahmen
timeframe to search calendar de Zeitrahmen für die Suche
title calendar de Titel
title of the event calendar de Titel des Termin
title-row calendar de Titelzeile
to many might exceed your execution-time-limit calendar de zu viele können ihre Laufzeitbeschränkung überschreiten
to-firstname calendar de An-Vorname
to-fullname calendar de An-Name
to-lastname calendar de An-Nachname
today calendar de Heute
translation calendar de Übersetzung
tu calendar de Di
tue calendar de Di
two dayview calendar de Zweitagesansicht
two weeks calendar de zwei Wochen
update a single entry by passing the fields. calendar de Einen einzelnen Termin über seine Felder updaten.
updated calendar de Aktualisiert
use end date calendar de Enddatum benutzen
use the selected time and close the popup calendar de benutzt die ausgewählte Zeit und schließt das Popup
view this entry calendar de Diesen Eintrag anzeigen
we calendar de Mi
view this event calendar de Diesen Termin anzeigen
wed calendar de Mi
week calendar de Woche
weekday starts on calendar de Arbeitswoche beginnt am
@ -354,37 +277,21 @@ weekdays calendar de Wochentage
weekdays to use in search calendar de Wochentage für die Suche
weekly calendar de Wöchentlich
weekview calendar de Wochenansicht
weekview including weekend calendar de Wochenansicht mit Wochenende
weekview with weekend calendar de Wochenansicht mit Wochenende
weekview without weekend calendar de Wochenansicht ohne Wochenende
when creating new events default set to private calendar de neue Termine sind privat
which events do you want to see when you enter the calendar. calendar de Welche Termine möchten Sie angezeigt bekommen wenn Sie den Kalender öffnen?
which of calendar view do you want to see, when you start calendar ? calendar de Welche der möglichen Ansichten des Kalenders möchten Sie als Standard sehen wenn der Kalender geöffnet wird?
wk calendar de KW
whole day calendar de ganztägig
work day ends on calendar de Arbeitstag endet um
work day starts on calendar de Arbeitstag beginnt um
workdayends calendar de Arbeitstag endet
year calendar de Jahr
yearly calendar de Jährlich
yearview calendar de Jahresansicht
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!
you can only set a year or a occurence !!! calendar de Sie können nur ein Jahr oder eine Wiederholung angeben !
you do not have permission to add alarms to this event !!! calendar de Sie haben keine Berechtigung Alarme zu diesem Termin zuzufügen !!!
you do not have permission to delete this alarm !!! calendar de Sie haben keine Berechtigung diesen Alarm zu löschen !!!
you do not have permission to enable/disable this alarm !!! calendar de Sie haben keine Berechtigung diesen Alarm ein- oder auszuschalten !!!
you do not have permission to read this record! calendar de Sie haben keine Berechtigung diesen Eintrag zu lesen!
you have %1 high priority events on your calendar today. common de Sie haben heute %1 Einträge mit hoher Priorität auf Ihrer Liste!
you have 1 high priority event on your calendar today. common de Sie haben heute einen Eintrag mit hoher Priorität auf Ihrer Liste!
you have a meeting scheduled for %1 calendar de Sie haben einen Termin am %1.
you have not entered a title calendar de Sie haben keinen Titel angegeben
you have not entered a valid date calendar de Sie haben kein gültiges Datum angegeben
you have not entered a valid time of day calendar de Sie haben keine gültige Uhrzeit angegeben
you have not entered a\nbrief description calendar de Sie haben keine a\nKurzbeschreibung eingegeben
you have not entered a\nvalid time of day calendar de Sie haben keine a\ngültige Tageszeit eingegeben.
you have not entered participants calendar de Sie haben keine Teilnehmer angegeben
you must enter one or more search keywords calendar de Sie müssen einen oder mehrere Suchbegriffe angeben
you must enter one or more search keywords. calendar de Sie müssen einen oder mehrere Suchbegriffe angeben.
you must select a [iv]cal. (*.[iv]cs) calendar de Sie müssen einen [iv]Cal (*.[iv]cs) auswählen.
you have been disinvited from the meeting at %1 calendar de Sie wurden vom Termin am %1 ausgeladen
you need to select an ical file first calendar de Sie müssen zuerst eine iCal Datei auswählen
you need to set either a day or a occurence !!! calendar de Sie müssen entweder einen Tag oder eine Wiederholung angeben !!!
your meeting scheduled for %1 has been canceled calendar de Ihr Termin am %1 wurde abgesagt.
your meeting that had been scheduled for %1 has been rescheduled to %2 calendar de Ihr Termin am %1 wurde auf %2 verschoben.
your suggested time of <b> %1 - %2 </b> conflicts with the following existing calendar entries: calendar de Der von Ihnen gewählte Zeitraum <B> %1 - %2 </B> führt zu Konflikten mit folgenden bereits existierenden Kalendereinträgen:

View File

@ -1,195 +1,179 @@
%1 %2 in %3 calendar en %1 %2 in %3
%1 matches found calendar en %1 matches found
%1 records imported calendar en %1 records imported
%1 records read (not yet imported, you may go back and uncheck test import) calendar en %1 records read (not yet imported, you may go back and uncheck Test Import)
(for weekly) calendar en (for Weekly)
(i/v)cal calendar en (i/v)Cal
1 match found calendar en 1 match found
a calendar en a
accept calendar en Accept
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar en <b>Please note</b>: The calendar use the holidays of your country, which is set to %1. You can change it in your %2.<br />Holidays are %3 automatic installed from %4. You can changed it in %5.
a non blocking event will not conflict with other events calendar en A non blocking event will not conflict with other events
accept or reject an invitation calendar en Accept or reject an invitation
accepted calendar en Accepted
action that caused the notify: added, canceled, accepted, rejected, ... calendar en Action that caused the notify: Added, Canceled, Accepted, Rejected, ...
add a single entry by passing the fields. calendar en Add a single entry by passing the fields.
add alarm calendar en Add Alarm
add contact calendar en Add Contact
add or update a single entry by passing the fields. calendar en Add or update a single entry by passing the fields.
actions calendar en Actions
add alarm calendar en Add alarm
added calendar en Added
address book calendar en Address Book
after current date calendar en After current date
alarm calendar en Alarm
alarm added calendar en Alarm added
alarm deleted calendar en Alarm deleted
alarm for %1 at %2 in %3 calendar en Alarm for %1 at %2 in %3
alarm management calendar en Alarm Management
alarm-management calendar en Alarm-Management
alarm management calendar en Alarm management
alarms calendar en Alarms
all categories calendar en All categories
all day calendar en All Day
all day calendar en all day
all events calendar en All events
all participants calendar en All participants
allows to edit the event again calendar en Allows to edit the event again
apply the changes calendar en apply the changes
are you sure you want to delete this country ? calendar en Are you sure you want to delete this Country ?
are you sure you want to delete this holiday ? calendar en Are you sure you want to delete this holiday ?
are you sure\nyou want to\ndelete these alarms? calendar en Are you sure\nyou want to\ndelete these alarms?
are you sure\nyou want to\ndelete this entry ? calendar en Are you sure\nyou want to\ndelete this entry ?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar en Are you sure\nyou want to\ndelete this entry ?\n\nThis will delete\nthis entry for all users.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar en Are you sure\nyou want to\ndelete this single occurence ?\n\nThis will delete\nthis entry for all users.
back half a month calendar en back half a month
back one month calendar en back one month
before current date calendar en Before current date
before the event calendar en before the event
brief description calendar en Brief Description
business calendar en Business
calendar common en Calendar
calendar - [iv]cal importer calendar en Calendar - [iv]Cal Importer
calendar - add calendar en Calendar - Add
calendar - edit calendar en Calendar - Edit
birthday calendar en Birthday
busy calendar en busy
by calendar en by
calendar event calendar en Calendar Event
calendar holiday management admin en Calendar Holiday Management
calendar preferences calendar en Calendar Preferences
calendar settings admin en Calendar Settings
calendar-fieldname calendar en Calendar-Fieldname
calendar preferences calendar en Calendar preferences
calendar settings admin en Calendar settings
calendar-fieldname calendar en calendar-Fieldname
can't add alarms in the past !!! calendar en Can't add alarms in the past !!!
canceled calendar en Canceled
change all events for $params['old_owner'] to $params['new_owner']. calendar en Change all events for $params['old_owner'] to $params['new_owner'].
change status calendar en Change Status
charset of file calendar en Charset of file
click %1here%2 to return to the calendar. calendar en Click %1here%2 to return to the calendar.
configuration calendar en Configuration
close the window calendar en Close the window
compose a mail to all participants after the event is saved calendar en compose a mail to all participants after the event is saved
copy of: calendar en Copy of:
copy this event calendar en Copy this event
countries calendar en Countries
country calendar en Country
created by calendar en Created by
create new links calendar en Create new links
csv calendar en CSV
csv-fieldname calendar en CSV-Fieldname
csv-filename calendar en CSV-Filename
custom fields calendar en Custom Fields
custom fields and sorting common en Custom fields and sorting
custom fields calendar en Custom fields
daily calendar en Daily
daily matrix view calendar en Daily Matrix View
days calendar en days
days of the week for a weekly repeated event calendar en Days of the week for a weekly repeated event
days repeated calendar en days repeated
dayview calendar en Day View
dayview calendar en dayview
default appointment length (in minutes) calendar en default appointment length (in minutes)
default calendar filter calendar en Default calendar filter
default calendar view calendar en Default calendar view
default calendar view calendar en default calendar view
default length of newly created events. the length is in minutes, eg. 60 for 1 hour. calendar en Default length of newly created events. The length is in minutes, eg. 60 for 1 hour.
default week view calendar en Default week view
default week view calendar en default week view
defines the size in minutes of the lines in the day view. calendar en Defines the size in minutes of the lines in the day view.
delete a single entry by passing the id. calendar en Delete a single entry by passing the id.
delete an entire users calendar. calendar en Delete an entire users calendar.
delete selected contacts calendar en Delete selected contacts
delete selected participants calendar en Delete selected participants
delete series calendar en Delete Series
delete single calendar en Delete Single
deleted calendar en Deleted
description calendar en Description
determining window width ... calendar en Determining window width ...
disable calendar en Disable
disabled calendar en disabled
display interval in day view calendar en Display interval in Day View
display mini calendars when printing calendar en Display mini calendars when printing
display status of events calendar en Display Status of Events
displayed view calendar en displayed view
delete series calendar en Delete series
delete this alarm calendar en Delete this alarm
delete this event calendar en Delete this event
delete this exception calendar en Delete this exception
delete this series of recuring events calendar en Delete this series of recuring events
disinvited calendar en Disinvited
display status of events calendar en Display status of events
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar en Displays your default calendar view on the startpage (page you get when you enter eGroupWare or click on the homepage icon)?
do you want a weekview with or without weekend? calendar en Do you want a weekview with or without weekend?
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 en 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.
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 en 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.
do you wish to autoload calendar holidays files dynamically? admin en Do you wish to autoload calendar holidays files dynamically?
download calendar en Download
duration calendar en Duration
download this event as ical calendar en Download this event as iCal
duration of the meeting calendar en Duration of the meeting
edit series calendar en Edit Series
edit single calendar en Edit Single
email notification calendar en Email Notification
email notification for %1 calendar en Email Notification for %1
edit series calendar en Edit series
edit this event calendar en Edit this event
edit this series of recuring events calendar en Edit this series of recuring events
empty for all calendar en empty for all
enable calendar en Enable
enabled calendar en enabled
end calendar en End
end date/time calendar en End Date/Time
enddate calendar en Enddate
enddate / -time of the meeting, eg. for more then one day calendar en Enddate / -time of the meeting, eg. for more then one day
enddate of the export calendar en Enddate of the export
ends calendar en ends
enter output filename: ( .vcs appended ) calendar en Enter Output Filename: ( .vcs appended )
event details follow calendar en Event Details Follow
error adding the alarm calendar en Error adding the alarm
error: importing the ical calendar en Error: importing the iCal
error: saving the event !!! calendar en Error: saving the event !!!
event copied - the copy can now be edited calendar en Event copied - the copy can now be edited
event deleted calendar en Event deleted
event details follow calendar en Event Details follow
event saved calendar en Event saved
event will occupy the whole day calendar en Event will occupy the whole day
exceptions calendar en Exceptions
existing links calendar en Existing links
export calendar en Export
export a list of entries in ical format. calendar en Export a list of entries in iCal format.
extended calendar en Extended
extended updates always include the complete event-details. ical's can be imported by certain other calendar-applications. calendar en Extended updates always include the complete event-details. iCal's can be imported by certain other calendar-applications.
external participants calendar en External Participants
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar en Failed sending message to '%1' #%2 subject='%3', sender='%4' !!!
fieldseparator calendar en Fieldseparator
find free timeslots where the marked participants are availible for the given timespan calendar en Find free timeslots where the marked participants are availible for the given timespan
filename calendar en Filename
filename of the download calendar en Filename of the download
find free timeslots where the selected participants are availible for the given timespan calendar en Find free timeslots where the selected participants are availible for the given timespan
firstname of person to notify calendar en Firstname of person to notify
for calendar en for
format of event updates calendar en Format of event updates
fr calendar en F
free/busy calendar en Free/Busy
forward half a month calendar en forward half a month
forward one month calendar en forward one month
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar en freebusy: Unknow user '%1', wrong password or not availible to not loged in users !!!
freetime search calendar en Freetime Search
frequency calendar en Frequency
fri calendar en Fri
full description calendar en Full Description
full description calendar en Full description
fullname of person to notify calendar en Fullname of person to notify
generate printer-friendly version calendar en Generate printer-friendly version
global categories calendar en Global Categories
global public and group public calendar en Global Public and group public
global public only calendar en Global Public Only
go! calendar en Go!
grant calendar access common en Grant Calendar Access
group planner calendar en Group Planner
group public only calendar en Group Public Only
general calendar en General
global public and group public calendar en global public and group public
global public only calendar en global public only
group planner calendar en Group planner
group public only calendar en group public only
here is your requested alarm. calendar en Here is your requested alarm.
high priority calendar en high priority
holiday calendar en Holiday
holiday management calendar en Holiday Management
holiday-management calendar en Holiday-Management
holidays calendar en Holidays
hours calendar en hours
how far to search (from startdate) calendar en how far to search (from startdate)
i participate calendar en I Participate
ical calendar en iCal
ical / rfc2445 calendar en iCal / rfc2445
ical export calendar en iCal Export
ical file calendar en iCal file
ical import calendar en iCal Import
ical successful imported calendar en iCal successful imported
if checked holidays falling on a weekend, are taken on the monday after. calendar en If checked holidays falling on a weekend, are taken on the monday after.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar en If you dont set a password here, the information is available to everyone, who knows the URL!!!
ignore conflict calendar en Ignore Conflict
ignore conflict calendar en Ignore conflict
import calendar en Import
import csv-file common en Import CSV-File
import csv-file calendar en Import CSV-File
interval calendar en Interval
intervals in day view calendar en Intervals in day view
intervals per day in planner view calendar en Intervals per day in planner view
invalid entry id. calendar en Invalid entry id.
last calendar en last
invalid email-address "%1" for user %2 calendar en Invalid email-address "%1" for user %2
last calendar en Last
lastname of person to notify calendar en Lastname of person to notify
length shown<br>(emtpy for full length) calendar en Length shown<br>(emtpy for full length)
length<br>(<= 255) calendar en Length<br>(<= 255)
link calendar en Link
link to view the event calendar en Link to view the event
list all categories. calendar en List all categories.
load [iv]cal calendar en Load [iv]Cal
links calendar en Links
links, attachments calendar en Links, Attachments
listview calendar en listview
location calendar en Location
location to autoload from admin en Location to autoload from
location, start- and endtimes, ... calendar en Location, Start- and Endtimes, ...
mail all participants calendar en mail all participants
make freebusy information available to not loged in persons? calendar en Make freebusy information available to not loged in persons?
matrixview calendar en Matrix View
minutes calendar en minutes
mo calendar en M
minutes calendar en Minutes
modified calendar en Modified
modify list of external participants calendar en Modify List of External Participants
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)
monthview calendar en Month View
needs javascript to be enabled !!! calendar en Needs javascript to be enabled !!!
new entry calendar en New Entry
new name must not exist and not be empty!!! calendar en New name must not exist and not be empty!!!
monthview calendar en monthview
new search with the above parameters calendar en new search with the above parameters
next day calendar en next day
no events found calendar en No events found
no filter calendar en No filter
no matches found calendar en No matches found
no response calendar en No Response
no matches found calendar en no matches found
no response calendar en No response
non blocking calendar en non blocking
notification messages for added events calendar en Notification messages for added events
notification messages for canceled events calendar en Notification messages for canceled events
notification messages for disinvited participants calendar en Notification messages for disinvited participants
notification messages for modified events calendar en Notification messages for modified events
notification messages for your alarms calendar en Notification messages for your alarms
notification messages for your responses calendar en Notification messages for your responses
number of intervals per day in planner view calendar en Number of Intervals per Day in Planner View
number of months calendar en Number of months
number of records to read (%1) calendar en Number of records to read (%1)
observance rule calendar en Observance Rule
occurence calendar en Occurence
old startdate calendar en Old Startdate
olddate calendar en OldDate
on %1 %2 %3 your meeting request for %4 calendar en On %1 %2 %3 your meeting request for %4
on all changes calendar en on all changes
on all modification, but responses calendar en on all modification, but responses
on any time change too calendar en on any time change too
on invitation / cancelation only calendar en on invitation / cancelation only
@ -199,169 +183,115 @@ one month calendar en one month
one week calendar en one week
one year calendar en one year
only the initial date of that recuring event is checked! calendar en Only the initial date of that recuring event is checked!
open todo's: calendar en Open To Do Items:
or enddate / -time calendar en or Enddate / -time
order calendar en Order
open todo's: calendar en open ToDo's:
overlap holiday calendar en overlap holiday
participant calendar en Participant
participants calendar en Participants
participates calendar en Participates
participants disinvited from an event calendar en Participants disinvited from an event
participants, resources, ... calendar en Participants, Resources, ...
password for not loged in users to your freebusy information? calendar en Password for not loged in users to your freebusy information?
people holiday calendar en people holiday
permission denied calendar en Permission denied
planner calendar en Planner
planner by category calendar en Planner by category
planner by user calendar en Planner by user
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar en Please confirm, accept, reject or examine changes in the corresponding entry in your calendar
please enter a filename !!! calendar en please enter a filename !!!
planner by category calendar en planner by category
planner by user calendar en planner by user
please note: you can configure the field assignments after you uploaded the file. calendar en Please note: You can configure the field assignments AFTER you uploaded the file.
preselected group for entering the planner calendar en Preselected group for entering the planner
previous day calendar en previous day
print calendars in black & white calendar en Print calendars in black & white
print the mini calendars calendar en Print the mini calendars
printer friendly calendar en Printer Friendly
privat calendar en Privat
private and global public calendar en Private and Global Public
private and group public calendar en Private and Group Public
previous calendar en previous
private and global public calendar en private and global public
private and group public calendar en private and group public
private only calendar en Private Only
re-edit event calendar en Re-Edit Event
read a list of entries. calendar en Read a list of entries.
read a single entry by passing the id and fieldlist. calendar en Read a single entry by passing the id and fieldlist.
read this list of methods. calendar en Read this list of methods.
re-edit event calendar en Re-Edit event
receive email updates calendar en Receive email updates
receive extra information in event mails calendar en Receive extra information in event mails
receive summary of appointments calendar en Receive summary of appointments
recurring event calendar en recurring event
refresh calendar en Refresh
reinstate calendar en Reinstate
recurrence calendar en Recurrence
recurring event calendar en Recurring event
rejected calendar en Rejected
repeat day calendar en Repeat day
repeat end date calendar en Repeat End date
repeat days calendar en Repeat days
repeat the event until which date (empty means unlimited) calendar en repeat the event until which date (empty means unlimited)
repeat type calendar en Repeat type
repeating event information calendar en Repeating Event Information
repeating interval, eg. 2 to repeat every second week calendar en repeating interval, eg. 2 to repeat every second week
repetition calendar en Repetition
repetitiondetails (or empty) calendar en Repetitiondetails (or empty)
reset calendar en Reset
resources calendar en Resources
rule calendar en Rule
sa calendar en Sa
sat calendar en Sat
scheduling conflict calendar en Scheduling Conflict
search results calendar en Search Results
select a %1 calendar en Select a %1
saves the changes made calendar en saves the changes made
saves the event ignoring the conflict calendar en Saves the event ignoring the conflict
scheduling conflict calendar en Scheduling conflict
select a %1 calendar en select a %1
select a time calendar en select a time
selected contacts (%1) calendar en Selected contacts (%1)
send updates via email common en Send updates via EMail
send/receive updates via email calendar en Send/Receive updates via EMail
select resources calendar en Select resources
select who should get the alarm calendar en Select who should get the alarm
set a year only for one-time / non-regular holidays. calendar en Set a Year only for one-time / non-regular holidays.
set new events to private calendar en Set new events to private
should invitations you rejected still be shown in your calendar ?<br>you can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar! calendar en Should invitations you rejected still be shown in your calendar ?<br>You can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar!
should new events created as private by default ? calendar en Should new events created as private by default ?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar en Should not loged in persons be able to see your freebusy information? You can set an extra password, different from your normal password, to protect this informations. The freebusy information is in iCal format and only include the times when you are busy. It does not include the event-name, description or locations. The URL to your freebusy information is %1.
should the mini calendars by printed / displayed in the printer friendly views ? calendar en Should the mini calendars by printed / displayed in the printer friendly views ?
should the printer friendly view be in black & white or in color (as in normal view)? calendar en Should the printer friendly view be in black & white or in color (as in normal view)?
should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ? calendar en Should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ?
show day view on main screen calendar en show day view on main screen
show default view on main screen calendar en Show default view on main screen
show high priority events on main screen calendar en Show high priority events on main screen
show default view on main screen calendar en show default view on main screen
show invitations you rejected calendar en Show invitations you rejected
show list of upcoming events calendar en Show list of upcoming events
show next seven days calendar en Show next seven days
show only one day calendar en Show only one day
show the calendar of multiple users calendar en show the calendar of multiple users
show list of upcoming events calendar en show list of upcoming events
show this month calendar en show this month
show this week calendar en show this week
single event calendar en single event
sorry, the owner has just deleted this event calendar en Sorry, the owner has just deleted this event
sorry, this event does not exist calendar en Sorry, this event does not exist
sorry, this event does not have exceptions defined calendar en Sorry, this event does not have exceptions defined
sort by calendar en Sort by
specifies the the number of intervals shown in the planner view. calendar en Specifies the the number of intervals shown in the planner view.
start calendar en Start
start date/time calendar en Start Date/Time
start- and enddates calendar en Start- and Enddates
startdate calendar en Startdate
startdate / -time calendar en Startdate / -time
startdate and -time of the search calendar en Startdate and -time of the search
startdate of the export calendar en Startdate of the export
startrecord calendar en Startrecord
su calendar en Su
status changed calendar en Status changed
submit to repository calendar en Submit to Repository
sun calendar en Sun
tentative calendar en Tentative
test import (show importable records <u>only</u> in browser) calendar en Test Import (show importable records <u>only</u> in browser)
text calendar en Text
th calendar en T
the following conflicts with the suggested time:<ul>%1</ul> calendar en The following conflicts with the suggested time:<ul>%1</ul>
the user %1 is not participating in this event! calendar en The user %1 is not participating in this event!
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar en There was an error trying to connect to your news server.<br>Please contact your admin to check the news servername, username or password.
this day is shown as first day in the week or month view. calendar en This day is shown as first day in the week or month view.
this defines the end of your dayview. events after this time, are shown below the dayview. calendar en This defines the end of your day view. Events after this time are shown below the day view.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar en This defines the start of your day view. Events before this time are shown above the day view.<br>This time is also used as a default start time for new events.
this defines the end of your dayview. events after this time, are shown below the dayview. calendar en This defines the end of your dayview. Events after this time, are shown below the dayview.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar en This defines the start of your dayview. Events before this time, are shown above the dayview.<br>This time is also used as a default starttime for new events.
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar en This group that is preselected when you enter the planner. You can change it in the planner anytime you want.
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar en This is mostly caused by a not or wrongly configured SMTP server. Notify your administrator.
this message is sent for canceled or deleted events. calendar en This message is sent for canceled or deleted events.
this message is sent for modified or moved events. calendar en This message is sent for modified or moved events.
this message is sent to disinvited participants. calendar en This message is sent to disinvited participants.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar en This message is sent to every participant of events you own, who has requested notifcations about new events.<br>You can use certain variables which get substituted with the data of the event. The first line is the subject of the email.
this message is sent when you accept, tentative accept or reject an event. calendar en This message is sent when you accept, tentatively accept, or reject an event.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar en This message is sent when you set an Alarm for a certain event. Include all information you might need.
this month calendar en This Month
this week calendar en This Week
this year calendar en This Year
this message is sent when you accept, tentative accept or reject an event. calendar en This message is sent when you accept, tentative accept or reject an event.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar en This message is sent when you set an Alarm for a certain event. Include all information you might need.
three month calendar en three month
thu calendar en Thu
til calendar en til
timeframe calendar en Timeframe
timeframe to search calendar en Timeframe to search
title calendar en Title
title of the event calendar en Title of the event
title-row calendar en Title-row
to many might exceed your execution-time-limit calendar en to many might exceed your execution-time-limit
to-firstname calendar en To-Firstname
to-fullname calendar en To-Fullname
to-lastname calendar en To-Lastname
today calendar en Today
translation calendar en Translation
tu calendar en T
tue calendar en Tue
two dayview calendar en two dayview
two weeks calendar en two weeks
update a single entry by passing the fields. calendar en Update a single entry by passing the fields.
updated calendar en Updated
use end date calendar en Use End date
use end date calendar en use end date
use the selected time and close the popup calendar en use the selected time and close the popup
view this entry calendar en View this entry
we calendar en W
view this event calendar en View this event
wed calendar en Wed
week calendar en Week
weekday starts on calendar en Weekday starts on
weekday starts on calendar en weekday starts on
weekdays calendar en Weekdays
weekdays to use in search calendar en Weekdays to use in search
weekly calendar en Weekly
weekview calendar en Week View
weekview including weekend calendar en Weekview including weekend
weekview calendar en weekview
weekview with weekend calendar en Weekview with weekend
weekview without weekend calendar en weekview without weekend
when creating new events default set to private calendar en When creating new events default set to private
which events do you want to see when you enter the calendar. calendar en Which events do you want to see when you enter the calendar.
which of calendar view do you want to see, when you start calendar ? calendar en Which of calendar view do you want to see when you start calendar ?
wk calendar en Wk
work day ends on calendar en Work day ends on
work day starts on calendar en Work day starts on
workdayends calendar en workdayends
which of calendar view do you want to see, when you start calendar ? calendar en Which of calendar view do you want to see, when you start calendar ?
whole day calendar en whole day
work day ends on calendar en work day ends on
work day starts on calendar en work day starts on
yearly calendar en Yearly
yearview calendar en Year View
yearview calendar en yearview
you can either set a year or a occurence, not both !!! calendar en You can either set a Year or a Occurence, not both !!!
you can only set a year or a occurence !!! calendar en You can only set a year or a occurence !!!
you do not have permission to add alarms to this event !!! calendar en You do not have permission to add alarms to this event !!!
you do not have permission to delete this alarm !!! calendar en You do not have permission to delete this alarm !!!
you do not have permission to enable/disable this alarm !!! calendar en You do not have permission to enable/disable this alarm !!!
you do not have permission to read this record! calendar en You do not have permission to read this record!
you have %1 high priority events on your calendar today. common en You have %1 high priority events on your calendar today.
you have 1 high priority event on your calendar today. common en You have 1 high priority event on your calendar today.
you have a meeting scheduled for %1 calendar en You have a meeting scheduled for %1
you have not entered a title calendar en You have not entered a title
you have not entered a valid date calendar en You have not entered a valid date
you have not entered a valid time of day calendar en You have not entered a valid time of day
you have not entered participants calendar en You have not entered participants
you must enter one or more search keywords calendar en You must enter one or more search keywords
you must select a [iv]cal. (*.[iv]cs) calendar en You must select a [iv]Cal. (*.[iv]cs)
you have been disinvited from the meeting at %1 calendar en You have been disinvited from the meeting at %1
you need to select an ical file first calendar en You need to select an iCal file first
you need to set either a day or a occurence !!! calendar en You need to set either a day or a occurence !!!
your meeting scheduled for %1 has been canceled calendar en Your meeting scheduled for %1 has been canceled
your meeting that had been scheduled for %1 has been rescheduled to %2 calendar en Your meeting that had been scheduled for %1 has been rescheduled to %2
your suggested time of <b> %1 - %2 </b> conflicts with the following existing calendar entries: calendar en Your suggested time of <B> %1 - %2 </B> conflicts with the following existing calendar entries:

View File

@ -5,32 +5,49 @@
(for weekly) calendar es-es (por semanal)
(i/v)cal calendar es-es (i/v) Cal
1 match found calendar es-es 1 coincidencia encontrada
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar es-es <b>Por favor, tenga en cuenta que</b>: El calendario usa las fiestas de su país, que es %1. Puede cambiarlo en su %2.<br />Las vacaciones %3 se instalan automáticamente desde %4. Lo puede cambiar en %5.
a calendar es-es a
a non blocking event will not conflict with other events calendar es-es Un evento que no bloquea no entrará en conflicto con otros eventos
accept calendar es-es Aceptar
accept or reject an invitation calendar es-es Aceptar o rechazar una invitación
accepted calendar es-es Aceptado
action that caused the notify: added, canceled, accepted, rejected, ... calendar es-es Acción que causó la notificación: Añadido, Cancelado, Aceptado, Rechazado, ...
actions calendar es-es Acciones
add a single entry by passing the fields. calendar es-es Añadir una entrada simple pasando los campos:
add alarm calendar es-es Añadir alarma
add contact calendar es-es Añadir contacto
add or update a single entry by passing the fields. calendar es-es Añadir o actualizar una simple entrada pasando los campos
added calendar es-es Añadido
address book calendar es-es Libreta de direcciones
after current date calendar es-es Después de la fecha actual
alarm calendar es-es Alarma
alarm added calendar es-es Se ha añadido una alarma
alarm deleted calendar es-es Se ha borrado una alarma
alarm for %1 at %2 in %3 calendar es-es Alarma para %1 en %2 in %3
alarm management calendar es-es Gestión de alarmas
alarm-management calendar es-es Gestión de alarmas
alarms calendar es-es Alarmas
all categories calendar es-es Todas las categorías
all day calendar es-es Todo el día
all events calendar es-es Todos los eventos
all participants calendar es-es Todos los participantes
allows to edit the event again calendar es-es Permite volver a editar el evento
apply the changes calendar es-es Aplicar los cambios
are you sure you want to delete this country ? calendar es-es ¿Seguro que quiere borrar este país?
are you sure you want to delete this holiday ? calendar es-es ¿Seguro que desea borrar esta fiesta?
are you sure\nyou want to\ndelete these alarms? calendar es-es ¿Está seguro\nde querer\nborrar estas alarmas?
are you sure\nyou want to\ndelete this entry ? calendar es-es ¿Está seguro\nde querer\nborrar esta entrada?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar es-es ¿Está seguro\nde querer\nborrar esta entrada?\n\nEsto borrará\nla entrada para todos los usuarios.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar es-es ¿Está seguronde querer\nborrar esta ocurrencia?\n\nEsto borrará\nla entrada para todos los usuarios.
back half a month calendar es-es medio mes hacia atrás
back one month calendar es-es un mes hacia atrás
before current date calendar es-es Antes de la fecha actual
before the event calendar es-es antes del evento
birthday calendar es-es Cumpleaños
brief description calendar es-es Descripción breve
business calendar es-es Negocios
busy calendar es-es ocupado
by calendar es-es por
calendar common es-es Calendario
calendar - [iv]cal importer calendar es-es Calendario - Importador [iv]Cal
calendar - add calendar es-es Calendario - Agregar
@ -40,15 +57,23 @@ calendar holiday management admin es-es Gesti
calendar preferences calendar es-es Preferencias - Calendario
calendar settings admin es-es Preferencias de calendario
calendar-fieldname calendar es-es Calendario - Nombre de campo
can't add alarms in the past !!! calendar es-es ¡¡No se pueden añadir alarmas en el pasado!!
canceled calendar es-es Cancelado
change all events for $params['old_owner'] to $params['new_owner']. calendar es-es Cambiar todos los eventos de $params['old_owner'] a $params['new_owner'].
change status calendar es-es Cambiar estado
charset of file calendar es-es Juego de caracteres del fichero
click %1here%2 to return to the calendar. calendar es-es Pulse %1aquí%2 para volver al calendario.
close the window calendar es-es Cerrar la ventana
common preferences calendar es-es preferencias comunes
compose a mail to all participants after the event is saved calendar es-es redactar un correo para todos los participantes después de guardar el evento
configuration calendar es-es Configuración
copy of: calendar es-es Copia de:
copy this event calendar es-es Copiar este evento
countries calendar es-es Paises
country calendar es-es País
create new links calendar es-es Crear enlaces nuevos
created by calendar es-es Creado por
csv calendar es-es CSV
csv-fieldname calendar es-es CSV - Nombre del campo
csv-filename calendar es-es CSV- Nombre del fichero
custom fields calendar es-es Campos personalizados
@ -56,6 +81,7 @@ custom fields and sorting common es-es Campos personalizados y ordenaci
daily calendar es-es Diario
daily matrix view calendar es-es Vista matricial del día
days calendar es-es días
days of the week for a weekly repeated event calendar es-es Días de la semana para un evento de repetición semanal
days repeated calendar es-es días repetidos
dayview calendar es-es Vista diaria
default appointment length (in minutes) calendar es-es duración por defecto de los eventos (en minutos)
@ -70,11 +96,16 @@ delete selected contacts calendar es-es Eliminar contactos seleccionados
delete selected participants calendar es-es Borrar los participantes seleccionados
delete series calendar es-es Borrar series
delete single calendar es-es Borrar simple
delete this alarm calendar es-es Borrar esta alarma
delete this event calendar es-es Borrar este evento
delete this exception calendar es-es Borrar esta excepción
delete this series of recuring events calendar es-es Borrar esta serie de eventos recurrentes
deleted calendar es-es Eliminado
description calendar es-es Descripción
determining window width ... calendar es-es Determinando el ancho de la ventana...
disable calendar es-es Desactivar
disabled calendar es-es desactivado
disinvited calendar es-es Ya no está invitado
display interval in day view calendar es-es Mostrar intervalo en vista diaria
display mini calendars when printing calendar es-es Mostrar minicalendarios al imprimir
display status of events calendar es-es Mostrar estado de los eventos
@ -85,22 +116,34 @@ do you want to be notified about new or changed appointments? you be notified ab
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 es-es ¿Desea recibir regularmente por correo un resumen de sus citas?<br>El resumen se le enviará a su correo electrónico habitual el mismo día por la mañana o el lunes para resúmenes semanales.<br>Sólo se envía si hay citas en ese día o esa semana.
do you wish to autoload calendar holidays files dynamically? admin es-es ¿Desea cargar automáticamente en el calendario los ficheros de fiestas?
download calendar es-es Descargar
download this event as ical calendar es-es Descargar este evento como iCal
duration calendar es-es Duración
duration of the meeting calendar es-es Duración de la reunión
edit series calendar es-es Editar series
edit single calendar es-es Editar sencillo
edit this event calendar es-es Editar este evento
edit this series of recuring events calendar es-es Editar esta serie de eventos recurrentes
email notification calendar es-es Notificación por correo
email notification for %1 calendar es-es Notificación por correo para %1
empty for all calendar es-es vacío para todos
enable calendar es-es Activar
enabled calendar es-es activado
end calendar es-es Fin
end date/time calendar es-es Fecha/Hora final
enddate calendar es-es Fecha final
enddate / -time of the meeting, eg. for more then one day calendar es-es Fecha final / -hora de la reunión, p. ej. para más de un día
enddate of the export calendar es-es Fecha de fin de la exportación
ends calendar es-es acaba
enter output filename: ( .vcs appended ) calendar es-es Introduzca el nombre del fichero de salida (añadir .vcs)
error adding the alarm calendar es-es Error al añadir la alarma
error: saving the event !!! calendar es-es Error al guardar el evento
event copied - the copy can now be edited calendar es-es Evento copiado. Ahora se puede editar la copia
event deleted calendar es-es Evento borrado
event details follow calendar es-es A continuación, los detalles del evento
event saved calendar es-es Evento guardado
event will occupy the whole day calendar es-es El evento ocupará todo el día
exceptions calendar es-es Excepciones
existing links calendar es-es Enlaces existentes
export calendar es-es Exportar
export a list of entries in ical format. calendar es-es Exportar una lista de entradas en format iCal.
extended calendar es-es Extendido
@ -108,9 +151,15 @@ extended updates always include the complete event-details. ical's can be import
external participants calendar es-es Participantes externos
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar es-es Fallo al enviar mensaje a '%1' nº%2 asunto='%3', remitente='%4'
fieldseparator calendar es-es Separador de campos
filename calendar es-es Nombre de fichero
filename of the download calendar es-es Nombre de fichero de la descarga
find free timeslots where the marked participants are availible for the given timespan calendar es-es Encontrar espacios de tiempo libres donde los partipantes marcados estén disponibles para el horario elegido
find free timeslots where the selected participants are availible for the given timespan calendar es-es Buscar márgenes de tiempo libres donde los participantes seleccionados estén disponibles para las horas indicadas
firstname of person to notify calendar es-es Nombre de pila de la persona a notificar
for calendar es-es para
format of event updates calendar es-es Formato de las actualizaciones de eventos
forward half a month calendar es-es medio mes hacia adelante
forward one month calendar es-es un mes hacia adelante
fr calendar es-es V
free/busy calendar es-es Libre/Ocupado
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar es-es libre-ocupado: Usuario desconocido "%1", contraseña incorrecta o no está disponible
@ -119,6 +168,7 @@ frequency calendar es-es Frecuencia
fri calendar es-es Vie
full description calendar es-es Descripción completa
fullname of person to notify calendar es-es Nombre completo de la persona a la que notificar
general calendar es-es General
generate printer-friendly version calendar es-es Generar versión para impresion
global categories calendar es-es Categorías globales
global public and group public calendar es-es Público Global y grupo público
@ -136,16 +186,18 @@ holidays calendar es-es Festivos
hours calendar es-es horas
how far to search (from startdate) calendar es-es cuánto buscar (desde la fecha de inicio)
i participate calendar es-es Participo
ical calendar es-es iCal
ical / rfc2445 calendar es-es iCal / rfc2445
ical export calendar es-es Exportar iCal
if checked holidays falling on a weekend, are taken on the monday after. calendar es-es Si los festivos marcados caen en fin de semana, se toman el lunes siguiente.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar es-es ¡Si no pone aquí una contraseña, la información está disponible para todos los que conozcan la URL!
if you dont set a password here, the information is availible to everyone, who knows the url!!! calendar es-es Si no indica una contraseña aquí, ¡la información está disponible para todos los que conozcan la URL!
ignore conflict calendar es-es Ignorar conflicto
import calendar es-es Importar
import csv-file common es-es Importar fichero CSV
interval calendar es-es Intervalo
intervals in day view calendar es-es Intervalos en la vista de día
intervals per day in planner view calendar es-es Intervalos por día en la vista del planificador
invalid email-address "%1" for user %2 calendar es-es La dirección de correo "%1" no es válida para el usuario %2
invalid entry id. calendar es-es Id de entrada no válido
last calendar es-es último
lastname of person to notify calendar es-es Apellido de la persona a la que notificar
@ -153,12 +205,16 @@ length shown<br>(emtpy for full length) calendar es-es Longitud mostrada<br>(vac
length<br>(<= 255) calendar es-es Longitud<br>(<=255)
link calendar es-es Vínculo
link to view the event calendar es-es Vínculo para ver el evento
links calendar es-es Enlaces
links, attachments calendar es-es Enlaces, adjuntos
list all categories. calendar es-es Listar todas las categorías
listview calendar es-es Ver lista
load [iv]cal calendar es-es Cargar [iv]Cal
location calendar es-es Lugar
location to autoload from admin es-es Lugar desde donde cargar automáticamente
location, start- and endtimes, ... calendar es-es Ubicación, hora de inicio y final...
mail all participants calendar es-es Enviar correo a todos los participantes
make freebusy information available to not loged in persons? calendar es-es ¿Poner la información del tiempo disponible a las personas que no inicien sesión?
make freebusy information availible to not loged in persons? calendar es-es ¿Hacer la información libre-ocupado disponible para personas que no inicien sesión?
matrixview calendar es-es Vista matricial
minutes calendar es-es minutos
mo calendar es-es L
@ -175,12 +231,15 @@ new entry calendar es-es Nueva entrada
new name must not exist and not be empty!!! calendar es-es El nuevo nombre no debe existir previamente ni estar en blanco
new search with the above parameters calendar es-es nueva búsqueda con los parámetros de arriba
next day calendar es-es dia siguiente
no events found calendar es-es No se encontraron eventos
no filter calendar es-es Sin filtro
no matches found calendar es-es No se encontraron coincidencias
no matches found. calendar es-es No se encontraron coincidencias.
no response calendar es-es Sin respuesta
non blocking calendar es-es no bloquea
not calendar es-es no
notification messages for added events calendar es-es Mensajes de notificación para eventos añadidos
notification messages for canceled events calendar es-es Mensajes de notificación para eventos cancelados
notification messages for disinvited participants calendar es-es Mensajes de notificación para participantes que dejan de ser invitados
notification messages for modified events calendar es-es Mensajes de notificación para eventos modificados
notification messages for your alarms calendar es-es Mensajes de notificación para sus alarmas
notification messages for your responses calendar es-es Mensajes de notificación para sus respuestas
@ -203,11 +262,12 @@ one week calendar es-es una semana
one year calendar es-es un año
only the initial date of that recuring event is checked! calendar es-es ¡Sólo está marcada la fecha inicial del evento recurrente!
open todo's: calendar es-es Abrir tareas pendientes
or enddate / -time calendar es-es or fecha de final / -hora
order calendar es-es Orden
overlap holiday calendar es-es solapar festivo
participant calendar es-es Participante
participants calendar es-es Participantes
participants disinvited from an event calendar es-es Participantes que dejan de ser invitados de un evento
participants, resources, ... calendar es-es Participantes, recursos
participates calendar es-es Participa
password for not loged in users to your freebusy information? calendar es-es ¿Contraseña para los usuarios sin sesión para la información libre-ocupado?
people holiday calendar es-es festivo para la gente
@ -217,7 +277,9 @@ planner by category calendar es-es Planificador por categor
planner by user calendar es-es Planificador por usuario
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar es-es Por favor, confirme, acepte, rechace o examine los cambios en la entrada correspondiente en su calendario
please enter a filename !!! calendar es-es Por favor, introduzca un nombre de fichero
please note: you can configure the field assignments after you uploaded the file. calendar es-es Por favor, tenga en cuenta: puede configurar el campo asignaciones DESPUES de subir el fichero.
preselected group for entering the planner calendar es-es Grupo preseleccionado para entrar en el planificador
previous calendar es-es anterior
previous day calendar es-es día anterior
print calendars in black & white calendar es-es Imprimir calendario en blanco y negro
print the mini calendars calendar es-es Imprimir minicalendarios
@ -233,24 +295,33 @@ read this list of methods. calendar es-es Leer esta lista de m
receive email updates calendar es-es Recibir actualizaciones de correo
receive extra information in event mails calendar es-es Recibir información extra en los eventos de correo
receive summary of appointments calendar es-es Recibir resumen de las citas
recurrence calendar es-es Repeticiones
recurring event calendar es-es evento recurrente
refresh calendar es-es Refrescar
reinstate calendar es-es Restablecer
rejected calendar es-es Rechazado
repeat day calendar es-es Repetir día
repeat days calendar es-es Días de repetición
repeat end date calendar es-es Repetir fecha final
repeat the event until which date (empty means unlimited) calendar es-es repetir el evento hasta qué fecha (en blanco significa sin límite)
repeat type calendar es-es Tipo repetición
repeating event information calendar es-es Información repetitiva de eventos
repeating interval, eg. 2 to repeat every second week calendar es-es intervalo de repetición, p. ej., 2 para repetir cada segunda semana
repetition calendar es-es Repetición
repetitiondetails (or empty) calendar es-es Detalles de la repetición (o vacío)
reset calendar es-es Restablecer
resources calendar es-es Recursos
rule calendar es-es Regla
sa calendar es-es Sa
sat calendar es-es Sáb
saves the changes made calendar es-es guarda los cambios realizados
saves the event ignoring the conflict calendar es-es Guarda el evento ignorando el conflicto
scheduling conflict calendar es-es Conflicto de calendario
search results calendar es-es Resultados de la búsqueda
select a %1 calendar es-es Seleccionar un %1
select a time calendar es-es seleccionar una hora
select resources calendar es-es Seleccionar recursos
select who should get the alarm calendar es-es Seleccionar quién debe obtener la alarma
selected contacts (%1) calendar es-es Contactos seleccionados (%1)
send updates via email common es-es Enviar actualizaciones por correo electrónico
send/receive updates via email calendar es-es Enviar y recibir actualizaciones por correo electrónico
@ -273,17 +344,21 @@ show the calendar of multiple users calendar es-es Mostrar el calendario de vari
show this month calendar es-es Mostrar este mes
show this week calendar es-es Mostrar esta semana
single event calendar es-es evento simple
site configuration calendar es-es configuración del sitio
sorry, the owner has just deleted this event calendar es-es Lo sentimos, el propietario acaba de eliminar este evento
sorry, this event does not exist calendar es-es Lo sentimos, este evento no existe
sorry, this event does not have exceptions defined calendar es-es Lo sentimos, este evento no tiene excepciones definidas
sort by calendar es-es Ordenar por
specifies the the number of intervals shown in the planner view. calendar es-es Especifica el número de intervalos mostrados en la vista del planificador.
start calendar es-es Inicio
start date/time calendar es-es Fecha/Hora inicio
start- and enddates calendar es-es Fechas de inicio y fin
startdate calendar es-es Fecha de inicio
startdate / -time calendar es-es Fecha de incio / -hora
startdate and -time of the search calendar es-es Fecha de inicio y -hora de la búsqueda
startdate of the export calendar es-es Fecha de inicio de la exportación
startrecord calendar es-es Registro inicial
status changed calendar es-es Estado modificado
su calendar es-es Do
submit to repository calendar es-es Enviar al repositorio
sun calendar es-es Dom
@ -301,6 +376,7 @@ this group that is preselected when you enter the planner. you can change it in
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar es-es Esto se debe mayormente a una configuración errónea del servidor SMTP. Notifíquelo a su administrador.
this message is sent for canceled or deleted events. calendar es-es Este mensaje se envía cuando un evento se borra o se cancela.
this message is sent for modified or moved events. calendar es-es Este mensaje se envía al modificar o mover eventos.
this message is sent to disinvited participants. calendar es-es Este mensaje se envía a los participantes que dejan de estar invitados
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar es-es Este mensaje se envía a cada participante de los eventos de los que usted es el dueño, quien ha solicitado notificaciones sobre nuevos eventos.<br>Puede usar ciertas variables a las que sustituyen los datos del evento. La primera línea es el asunto del correo electrónico.
this message is sent when you accept, tentative accept or reject an event. calendar es-es Este mensaje se envía cuando acepta, acepta temporalmente o rechaza un evento.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar es-es Este mensaje se envía cuando pone una alarma para un evento concreto. Incluya toda la información necesaria.
@ -323,31 +399,30 @@ today calendar es-es Hoy
translation calendar es-es Traducción
tu calendar es-es M
tue calendar es-es Mar
two dayview calendar es-es Dos vistas del día
two weeks calendar es-es dos semanas
update a single entry by passing the fields. calendar es-es Actualizar una entrada simple pasando los campos.
updated calendar es-es Actualizado
use end date calendar es-es Usar fecha final
use the selected time and close the popup calendar es-es usar la hora seleccionada y cerrar la ventana
view this entry calendar es-es Ver esta entrada
view this event calendar es-es Ver este evento
we calendar es-es Mi
wed calendar es-es Mie
wed calendar es-es Mié
week calendar es-es Semana
weekday starts on calendar es-es La semana empieza en
weekdays calendar es-es Días laborales
weekdays to use in search calendar es-es Días laborales a usar en la búsqueda
weekly calendar es-es Semanal
weekview calendar es-es Vista semanal
weekview including weekend calendar es-es Vista semanal incluyendo el fin de semana
weekview with weekend calendar es-es vista semanal con fin de semana
weekview without weekend calendar es-es Vista semanal sin fin de semana
when creating new events default set to private calendar es-es Crear nuevos eventos como privados
which events do you want to see when you enter the calendar. calendar es-es ¿Qué eventos quiere ver al entrar al calendario?
which of calendar view do you want to see, when you start calendar ? calendar es-es ¿Qué vista del calendario quiere ver cuando entra al calendario?
whole day calendar es-es todo el día
wk calendar es-es Trabajo
work day ends on calendar es-es Los días laborables acaban en
work day starts on calendar es-es Los días laborables empiezan en
workdayends calendar es-es Final del día laborable
year calendar es-es Año
yearly calendar es-es Anual
yearview calendar es-es Vista anual
you can either set a year or a occurence, not both !!! calendar es-es Puede poner un año o una ocurrencia, pero no ambos.
@ -359,11 +434,10 @@ you do not have permission to read this record! calendar es-es
you have %1 high priority events on your calendar today. common es-es Ud. tiene %1 eventos de alta prioridad en su calendario para hoy.
you have 1 high priority event on your calendar today. common es-es Ud. tiene 1 evento de alta prioridad en su calendario para hoy.
you have a meeting scheduled for %1 calendar es-es Ud. tiene una reunión programada para %1
you have been disinvited from the meeting at %1 calendar es-es Ha dejado de estar invitado a la reunión de %1
you have not entered a title calendar es-es No ha introducido un título
you have not entered a valid date calendar es-es Ha introducido una fecha incorrecta
you have not entered a valid time of day calendar es-es Ha introducido una hora incorrecta
you have not entered a\nbrief description calendar es-es Ud. no ha ingresado una\nBrief descripción
you have not entered a\nvalid time of day. calendar es-es Ud. no ha ingresado una\nvalid hora valida.
you have not entered participants calendar es-es No ha introducido participantes
you must enter one or more search keywords calendar es-es Ud. debe introducir una o más claves de búsqueda
you must select a [iv]cal. (*.[iv]cs) calendar es-es Debe seleccionar un [iv]Cal. (*.[iv]cs)

View File

@ -6,15 +6,19 @@
(i/v)cal calendar fr (i/v)Cal
1 match found calendar fr 1 correspondance trouvée
a calendar fr un
accept calendar fr Accepte
a non blocking event will not conflict with other events calendar fr Un événement non bloquant n'entrera pas en conflit avec d'autres événements.
accept calendar fr Accepter
accept or reject an invitation calendar fr Accepter ou rejeter une invitation
accepted calendar fr Accepté
action that caused the notify: added, canceled, accepted, rejected, ... calendar fr L'action qui a causé la notification: Ajouté, Annulé, Accepté, Rejeté, ...
actions calendar fr Actions
add a single entry by passing the fields. calendar fr Ajouter une unique entrée en passant les champs.
add alarm calendar fr Ajouter une alarme
add contact calendar fr Ajouter un contact
add or update a single entry by passing the fields. calendar fr Ajoutez ou mettez à jour une seule entrée en passant les champs.
added calendar fr Ajouté
address book calendar fr Carnet d'adresses
after current date calendar fr Après la date courante
alarm calendar fr Alarme
alarm for %1 at %2 in %3 calendar fr Alarme pour %1 à %2 dans %3
alarm management calendar fr Gestion des alarmes
@ -22,19 +26,21 @@ alarm-management calendar fr Gestion des alarmes
alarms calendar fr Alarmes
all categories calendar fr Toutes catégories
all day calendar fr Journée entière
all events calendar fr Tous les événements
all participants calendar fr Tous les participants
allows to edit the event again calendar fr Autorise à éditer à nouveau l'événement
apply the changes calendar fr Appliquer les modifications
are you sure you want to delete this country ? calendar fr Etes-vous sûr de vouloir effacer ce pays ?
are you sure you want to delete this holiday ? calendar fr Etes-vous sûr de vouloir effacer ces vacances ?
are you sure\nyou want to\ndelete these alarms? calendar fr Etes-vous sûr\nde vouloir\neffacer ces alarmes?
are you sure\nyou want to\ndelete this entry ? calendar fr Etes-vous sûr\nde vouloir\neffacer cette entrée ?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar fr Etes-vous sûr\nde vouloir\neffacer cette entrée ?\n\nCeci va effacer\ncette entrée pour tous les utilisateurs.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar fr Etes-vous sûr\nde vouloir\neffacer cette unique occurence ?\n\nCeci va effacer\ncette entrée pour tous les utilisateurs.
are you surenyou want tondelete these alarms? calendar fr Etes-vous sûr\nde vouloir\neffacer ces alarmes?
are you surenyou want tondelete this entry ? calendar fr Etes-vous sûr\nde vouloir\neffacer cette entrée ?
are you surenyou want tondelete this entry ?nnthis will deletenthis entry for all users. calendar fr Etes-vous sûr\nde vouloir\neffacer cette entrée ?\n\nCeci va effacer\ncette entrée pour tous les utilisateurs.
are you surenyou want tondelete this single occurence ?nnthis will deletenthis entry for all users. calendar fr Etes-vous sûr\nde vouloir\neffacer cette unique occurence ?\n\nCeci va effacer\ncette entrée pour tous les utilisateurs.
before the event calendar fr avant l'évènement
before current date calendar fr Avant la date courante
before the event calendar fr avant l'événement
brief description calendar fr Description brève
business calendar fr Travail
by calendar fr par
calendar common fr Calendrier
calendar - [iv]cal importer calendar fr Calendrier - Importateur [iv]Cal
calendar - add calendar fr Calendrier - Ajouter
@ -49,9 +55,13 @@ change all events for $params['old_owner'] to $params['new_owner']. calendar fr
change status calendar fr Modifier le statut
charset of file calendar fr Table de charactères du fichier
click %1here%2 to return to the calendar. calendar fr Cliquer %1ici%2 pour retourner au calendrier
close the window calendar fr Fermer la fenêtre
compose a mail to all participants after the event is saved calendar fr Ecrire un mail à tous les participants après l'enregistrement de l'événement
configuration calendar fr Configuration
copy this event calendar fr Copier cet événement
countries calendar fr Pays
country calendar fr Pays
create new links calendar fr Créer de nouveaux liens
created by calendar fr Créé par
csv-fieldname calendar fr CSV-nom des champs
csv-filename calendar fr CSV-nom du fichier
@ -60,6 +70,7 @@ custom fields and sorting common fr Champs personnalis
daily calendar fr Journalier
daily matrix view calendar fr Vue journalière de la matrice
days calendar fr Jours
days of the week for a weekly repeated event calendar fr Jours de la semaine pour la répétition hebdomadaire
days repeated calendar fr Jours répétés
dayview calendar fr Vue journalière
default appointment length (in minutes) calendar fr Durée du rendez-vous par défaut (en minutes)
@ -74,11 +85,14 @@ delete selected contacts calendar fr Effacer les contacts s
delete selected participants calendar fr Supprimer les participants s&eacute;lectionn&eacute;es
delete series calendar fr Effacer les séries
delete single calendar fr Effacer un unique
delete this event calendar fr Effacer cet événement
delete this series of recuring events calendar fr Effacer cette série d'événements récurrents
deleted calendar fr Effacé
description calendar fr Description
determining window width ... calendar fr Recherche de la largeur de fenêtre
disable calendar fr Désactiver
disabled calendar fr Désactivé
disinvited calendar fr Invitation annulée
display interval in day view calendar fr Afficher l'intervalle dans la vue journalière
display mini calendars when printing calendar fr Afficher mini calendriers à l'impression
display status of events calendar fr Afficher le statut des événements
@ -93,19 +107,26 @@ duration calendar fr Dur
duration of the meeting calendar fr Durée de la réunion
edit series calendar fr Modifier toutes les occurrences
edit single calendar fr Modifier cette occurrence
edit this event calendar fr Editer cet événement
edit this series of recuring events calendar fr Editer cette série d'événements récurrents
email notification calendar fr Notification par email
email notification for %1 calendar fr Notification par email pour %1
email reminder calendar fr EMail de rappel
empty for all calendar fr Vide pour tous
enable calendar fr Activer
enabled calendar fr Activé
end calendar fr Fin
end date/time calendar fr Date/Heure de fin
enddate calendar fr Date de fin
enddate / -time of the meeting, eg. for more then one day calendar fr Date et fin de la réunion, eg. pour plus d'une journée
ends calendar fr Finit
enter output filename: ( .vcs appended ) calendar fr Entrer le nom du fichier de sortie: ( .vcs ajouté )
error: saving the event !!! calendar fr Erreur de sauvegarde de l'événement !!!
event deleted calendar fr Evénement effacé
event details follow calendar fr Les détails de l'évènement suivent
event saved calendar fr Evénement enregistré
event will occupy the whole day calendar fr L'événement occupera la journée entière
exceptions calendar fr Exceptions
existing links calendar fr Liens existants
export calendar fr Export
export a list of entries in ical format. calendar fr Exporter une liste d'entrées dans le format iCal.
extended calendar fr Etendu
@ -114,6 +135,7 @@ external participants calendar fr Participants ext
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar fr Impossible d'envoyer le message à "%1" #%2 sujet="%3", expéditeur="%4" !
fieldseparator calendar fr Séparateur de champs
find free timeslots where the marked participants are availible for the given timespan calendar fr Recherche de crénaux horaires où les participants sélectionnés sont disponibles pour la durée choisie
find free timeslots where the selected participants are availible for the given timespan calendar fr Trouver des plages de temps libre sur lesquelles les participants sélectionnés sont disponibles
firstname of person to notify calendar fr Prénom de la personne à prévenir
format of event updates calendar fr Format des mises à jour d'évènement
fr calendar fr V
@ -124,6 +146,7 @@ frequency calendar fr Fr
fri calendar fr Ven
full description calendar fr Description complète
fullname of person to notify calendar fr Nom complet de la personne à prévenir
general calendar fr Général
generate printer-friendly version calendar fr Générer une version imprimable
global categories calendar fr Catégories globales
global public and group public calendar fr Public global et groupe public
@ -144,11 +167,9 @@ i participate calendar fr Je participe
ical / rfc2445 calendar fr iCal / rfc2445
if checked holidays falling on a weekend, are taken on the monday after. calendar fr Si activé les vacances tombant sur un Week-End, sont prises sur le lundi d'après.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar fr Si vous ne définissez pas de mot de passe ici, les informations seront disponibles à n'importe qui connaissant l'adresse
if you dont set a password here, the information is availible to everyone, who knows the url!!! calendar fr Si vous ne mettez pas de mot de passe ici, l'information sera accessible par n'importe quelle personne connaissant l'URL!
ignore conflict calendar fr Ignorer le conflit
import calendar fr Import
import csv-file common fr Importer un fichier CSV
import csv-file into calendar calendar fr Importer un fichier CSV dans le calendrier
interval calendar fr Intervalle
intervals in day view calendar fr Intervalles dans la vue journalière
intervals per day in planner view calendar fr Intervalles par jour dans la vue planning
@ -159,12 +180,16 @@ length shown<br>(emtpy for full length) calendar fr Longueur montr
length<br>(<= 255) calendar fr Longueur<br>(<= 255)
link calendar fr Lien
link to view the event calendar fr Lien pour voir l'événement
links calendar fr Liens
links, attachments calendar fr Liens, attachements
list all categories. calendar fr Lister toutes les catégories
listview calendar fr Liste d'événements
load [iv]cal calendar fr Charger [iv]Cal
location calendar fr Emplacement
location to autoload from admin fr Emplacement depuis lequel auto-charger
location, start- and endtimes, ... calendar fr Emplacement, Heures de début et de fin...
mail all participants calendar fr Envoyer un mail à tous les participants
make freebusy information available to not loged in persons? calendar fr Mettre à disposition les disponibilités sans être loggué
make freebusy information availible to not loged in persons? calendar fr Mettre à disposition des utilisateurs non connectés l'information Libre/Occupé?
matrixview calendar fr Vue matricielle
minutes calendar fr minutes
mo calendar fr L
@ -184,15 +209,16 @@ next day calendar fr Jour suivant
no filter calendar fr Pas de filtres
no matches found calendar fr Pas d'occurences trouvées
no response calendar fr Pas de réponse
notification messages for added events calendar fr Messages de notification pour les évènements ajoutés
notification messages for canceled events calendar fr Messages de notification pour les évènements annulés
notification messages for modified events calendar fr Messages de notification pour les évènements modifiés
non blocking calendar fr Non bloquant
notification messages for added events calendar fr Messages de notification pour les événements ajoutés
notification messages for canceled events calendar fr Messages de notification pour les événements annulés
notification messages for disinvited participants calendar fr Messages de notification pour les invitations annulées
notification messages for modified events calendar fr Messages de notification pour les événements modifiés
notification messages for your alarms calendar fr Messages de notification pour vos alarmes
notification messages for your responses calendar fr Messages de notification pour vos réponses
number of intervals per day in planner view calendar fr Nombre d'intervalles par jour dans la vue planificateur
number of months calendar fr Nombre de mois
number of records to read (%1) calendar fr Nombre d'entrées
number of records to read (<=200) calendar fr Nombre d'enregistrements à lire (<=200)
observance rule calendar fr Règle d'observation
occurence calendar fr Occurence
old startdate calendar fr Ancienne date de début
@ -214,6 +240,8 @@ order calendar fr Ordre
overlap holiday calendar fr Vacances recouvrantes
participant calendar fr Participant
participants calendar fr Participants
participants disinvited from an event calendar fr Invitations annulées pour un événement
participants, resources, ... calendar fr Participants, Ressources...
participates calendar fr Participe
password for not loged in users to your freebusy information? calendar fr Mot de passe des utilisateurs non connectés pour l'information Libre/Occupé?
people holiday calendar fr Vacances des personnes
@ -239,20 +267,27 @@ read this list of methods. calendar fr Lire cette liste de m
receive email updates calendar fr Recevoir les mises à jour par EMail
receive extra information in event mails calendar fr Recevoir des informations supplémentaires dans les EMails d'évènements
receive summary of appointments calendar fr Recevoir le résumé des rendez-vous
recurrence calendar fr Récurrence
recurring event calendar fr Evènement récurrent
refresh calendar fr Rafraîchir
reinstate calendar fr Réinstaller
rejected calendar fr Rejeté
repeat day calendar fr Jour de répétition
repeat days calendar fr Jours de répétition
repeat end date calendar fr Date de fin de répétition
repeat the event until which date (empty means unlimited) calendar fr Répéter l'événement jusqu'à quelle date ? (vide pour illimité)
repeat type calendar fr Type de répétition
repeating event information calendar fr Informations d'événement répétitif
repeating interval, eg. 2 to repeat every second week calendar fr Intervalle de répétition, par exemple 2 pour répéter chaque deuxième semaine
repetition calendar fr Répétition
repetitiondetails (or empty) calendar fr Détails de répétition (ou vide)
reset calendar fr Réinitialiser
resources calendar fr Ressources
rule calendar fr Règle
sa calendar fr Sa
sat calendar fr Sam
saves the changes made calendar fr Sauvegarder les modifications
saves the event ignoring the conflict calendar fr Sauvegarder l'événement en ignorant le conflit
scheduling conflict calendar fr Conflit de planification
search results calendar fr Résultats de recherche
select a %1 calendar fr Sélectionnez un %1
@ -284,12 +319,14 @@ sorry, this event does not exist calendar fr D
sorry, this event does not have exceptions defined calendar fr Désolé, cet évènement n'a pas d'exceptions définies
sort by calendar fr Sort by
specifies the the number of intervals shown in the planner view. calendar fr Spécifie le nombre d'intervalles montrés dans la vue planning.
start calendar fr Début
start date/time calendar fr Date/heure de début
start- and enddates calendar fr Dates de début et de fin
startdate calendar fr Date de début
startdate / -time calendar fr Date/heure de début
startdate and -time of the search calendar fr Date/heure de début de recherche
startrecord calendar fr Enregistrement de début
status changed calendar fr Le statut a été modifié
su calendar fr Di
submit to repository calendar fr Soumettre au dépôt
sun calendar fr Dim
@ -301,13 +338,13 @@ the following conflicts with the suggested time:<ul>%1</ul> calendar fr L'
the user %1 is not participating in this event! calendar fr L'utilisateur %1 ne participe pas à cet évènement!
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar fr Il y a eu une erreur en essayant de se connecter à votre serveur de News.<br>SVP, contactez votre administrateur pour vérifier le nom du serveur de News, votre nom ou mot de passe.
this day is shown as first day in the week or month view. calendar fr Ce jour est montré comme le premier jour dans la vue hebdomadaire ou mensuelle.
this day is shown as last day in the week view. calendar fr Ce jour est considéré comme le dernier jour dans la vue hebdomadaire.
this defines the end of your dayview. events after this time, are shown below the dayview. calendar fr Ceci définit la fin de votre vue journalière. Les évènements après cette heure sont montrés sous la vue journalière.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar fr Ceci définit le début de votre vue journalière. Les évènements avant cette heuresont montrés au-dessus de la vue journalière.<br>Cette heure est aussi utilisée comme l'heure de début par défaut pour les nouveaux évènements.
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar fr Ce groupe qui est présélectionné quand vous entrez dans le planning. Vous pouvez le changer dans le planning chaque fois que vous le voulez.
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar fr Cette erreur est généralement due à une mauvaise configuration du serveur SMTP. Contactez votre administrateur.
this message is sent for canceled or deleted events. calendar fr Ce message est envoyé pour les évènements annulés ou effacés.
this message is sent for modified or moved events. calendar fr Ce message est envoyé pour les évènements modifiés ou déplacés.
this message is sent to disinvited participants. calendar fr Ce message est envoyé aux participants dont l'invitation a été annulée.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar fr Ce message est envoyé à tous les participants des évènements vous appartenant qui ont demandé des notifications à propos des nouveaux évènements.<br>Vous pouvez utiliser certaines variables qui seront remplacées par les données de l'évènement. La première ligne est le sujet de l'EMail.
this message is sent when you accept, tentative accept or reject an event. calendar fr Ce message est envoyé quand vous acceptez, essayez d'accepter ou rejetez un évènement.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar fr Ce message est envoyé quand vous réglez une Alarme pour un évènement précis. Incluez toutes les informations dont vous pourriez avoir besoin.
@ -340,7 +377,6 @@ view this entry calendar fr Voir cette entr
we calendar fr M
wed calendar fr Mer
week calendar fr Semaine
weekday ends on calendar fr La semaine se termine le
weekday starts on calendar fr La semaine débute le
weekdays calendar fr Jours de la semaine
weekdays to use in search calendar fr Jour de la semaine à inclure dans la recherche
@ -351,6 +387,7 @@ weekview without weekend calendar fr Vue Hebdo sans Weekend
when creating new events default set to private calendar fr A la création de nouveaux événements mettre par défaut en privé
which events do you want to see when you enter the calendar. calendar fr Quels évènements voulez-vous voir quand vous entrez dans le calendrier.
which of calendar view do you want to see, when you start calendar ? calendar fr Laquelle des vues du calendrier vous voulez voir, quand vous entrez dans le calendrier ?
whole day calendar fr Journée entière
wk calendar fr Sem.
work day ends on calendar fr Jour de travail finit à
work day starts on calendar fr Jour de travail démarre à
@ -366,6 +403,7 @@ you do not have permission to read this record! calendar fr Vous n'avez pas les
you have %1 high priority events on your calendar today. common fr Vous avez %1 événements de haute priorité dans votre calendrier aujourd'hui.
you have 1 high priority event on your calendar today. common fr Vous avez 1 événement de haute priorité dans votre calendrier aujourd'hui.
you have a meeting scheduled for %1 calendar fr Vous avez une réunion planifiée pour %1
you have been disinvited from the meeting at %1 calendar fr Votre invitation au rendez-vous de %1 a été annulée
you have not entered a title calendar fr Vous n'avez pas entré de titre
you have not entered a valid date calendar fr Vous n'avez pas entré une date correcte
you have not entered a valid time of day calendar fr Vous n'avez pas entré une heure de la journée correcte

View File

@ -5,32 +5,49 @@
(for weekly) calendar it (per settimana)
(i/v)cal calendar it (i/v)Cal
1 match found calendar it Trovata 1 occorrenza
a calendar it A
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar it <b>Attenzione</b>: l'agenda usa le festività della tua nazione, che è impostata a %1. Puoi cambiarla in %2.<br />Le festività sono %3 automaticamente installate da %4. Puoi cambiarle in %5.
a calendar it a
a non blocking event will not conflict with other events calendar it Un evento non bloccante non sarà in conflitto con altri eventi
accept calendar it Accetta
accept or reject an invitation calendar it Accetta o o rifiuta un invito
accepted calendar it Accettato
action that caused the notify: added, canceled, accepted, rejected, ... calendar it Azione che ha causato la notifica: Aggiunto, Cancellato, Accettato, Rifiutato, ...
actions calendar it Azioni
add a single entry by passing the fields. calendar it Aggiungi una singola voce compilando i campi
add alarm calendar it Aggiungi Allarme
add contact calendar it Aggiungi un Contatto
add or update a single entry by passing the fields. calendar it Aggiungi o aggiorna una singola voce compilando i campi.
added calendar it Aggiunto
address book calendar it Rubrica
alarm calendar it allarme
after current date calendar it Dopo la data attuale
alarm calendar it Sveglia
alarm added calendar it Sveglia aggiunta
alarm deleted calendar it Sveglia cancellata
alarm for %1 at %2 in %3 calendar it Allarme per %1 a %2 in %3
alarm management calendar it Gestione Allarmi
alarm-management calendar it Gestione-Allarmi
alarms calendar it Allarmi
all categories calendar it Tutte le categorie
all day calendar it Tutto il giorno
all events calendar it Tutti gli eventi
all participants calendar it Tutti i partecipanti
allows to edit the event again calendar it Permette di modificare ancora l'evento
apply the changes calendar it apllica le modifiche
are you sure you want to delete this country ? calendar it Confermi la cancellazione di questa Nazione ?
are you sure you want to delete this holiday ? calendar it Sei sicuro di voler cancellare questa festività ?
are you sure\nyou want to\ndelete these alarms? calendar it Sei sicuro\ndi voler\ncancellare questo allarme ?
are you sure\nyou want to\ndelete this entry ? calendar it Sei sicuro\ndi voler\ncancellare questa voce ?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar it Sei sicuro di\nvoler cancellare\nquesta voce?\n\nQuesto comporterà la cancellazione\nper tutti gli utenti.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar it Confermi la cancellazione di questa singola voce?\n\nQuesto comporterà la cancellazione\nper tutti gli utenti
back half a month calendar it indietro metà mese
back one month calendar it indietro un mese
before current date calendar it Prima della data attuale
before the event calendar it prima dell'evento
birthday calendar it Compleanno
brief description calendar it Descrizione breve
business calendar it Business
busy calendar it occupato
by calendar it da
calendar common it Agenda
calendar - [iv]cal importer calendar it Agenda - Importazione [iv]Cal
calendar - add calendar it Agenda - Aggiungi
@ -40,15 +57,22 @@ calendar holiday management admin it Gestione Festivit
calendar preferences calendar it Preferenze Agenda
calendar settings admin it Impostazioni Agenda
calendar-fieldname calendar it Campi-Agenda
can't add alarms in the past !!! calendar it Non si può aggiungere sveglie nel passato !!!
canceled calendar it Cancellato
change all events for $params['old_owner'] to $params['new_owner']. calendar it Modifica tutti gli eventi per $params['old_owner'] a $params['new_owner'].
change status calendar it Cambia Stato
charset of file calendar it Charset del file
click %1here%2 to return to the calendar. calendar it Per ritornare all'agenda premi %1qui%2.
close the window calendar it Chiudi la finestra
compose a mail to all participants after the event is saved calendar it componi una email per tutti i partecipanti dopo che l'evento è stato salvato
configuration calendar it Configurazione
copy of: calendar it Copia di:
copy this event calendar it Copia questo evento
countries calendar it Nazioni
country calendar it Nazione
create new links calendar it Crea nuovi collegamenti
created by calendar it Creato da
csv calendar it CSV
csv-fieldname calendar it Campi-CSV
csv-filename calendar it Nomefile-CSV
custom fields calendar it Personalizza i Campi
@ -56,6 +80,7 @@ custom fields and sorting common it Personalizzazione e Ordinamento dei Campi
daily calendar it Giornaliero
daily matrix view calendar it Vista Matrice Giornaliera
days calendar it giorni
days of the week for a weekly repeated event calendar it Giorni della settimana per un evento con ricorrenza settimanale
days repeated calendar it giorni ripetuti
dayview calendar it Vista Giornaliera
default appointment length (in minutes) calendar it lunghezza predefinita degli appuntamenti (in minuti)
@ -70,11 +95,16 @@ delete selected contacts calendar it Cancella il contatto selezionato
delete selected participants calendar it Cancella i partecipanti selezionati
delete series calendar it Cancella serie
delete single calendar it Cancellazione singola
delete this alarm calendar it Cancella questa sveglia
delete this event calendar it Cancella questo evento
delete this exception calendar it Cancella questa eccezione
delete this series of recuring events calendar it Cancella questa serie di eventi ricorrenti
deleted calendar it Eliminato
description calendar it Descrizione
determining window width ... calendar it Determinazione larghezza finestra ...
disable calendar it Disabilita
disabled calendar it disabilitato
disinvited calendar it Disinvitato
display interval in day view calendar it Visualizza intervallo nella Vista Giornaliera
display mini calendars when printing calendar it Visualizza mini calendari quando stampi
display status of events calendar it Visualizza lo stato per gli Eventi
@ -85,22 +115,34 @@ do you want to be notified about new or changed appointments? you be notified ab
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 it Vuoi ricevere regolarmente il resoconto dei tuoi appuntamenti via e-mail?<br>Il resoconto sarà mandato al tuo indirizzo e-mail standard ogni mattina o ogni Lunedì per il resoconto settimanale.<br>Sarà mandato solo se avrai un appuntamento per quel giorno o per quella settimana.
do you wish to autoload calendar holidays files dynamically? admin it Vuoi caricare automaticamente nell'agenda i file con l'elenco delle festività?
download calendar it Download
download this event as ical calendar it Scarica questo evento come iCal
duration calendar it Durata
duration of the meeting calendar it Durata della riunione
edit series calendar it Modifica Serie
edit single calendar it Modifica Singolo
edit this event calendar it Modifica questo evento
edit this series of recuring events calendar it Modifica questa serie di eventi ricorrenti
email notification calendar it Notifica via e-mail
email notification for %1 calendar it Notifica via e-mail %1
empty for all calendar it vuoto per tutti
enable calendar it Abilita
enabled calendar it abilitato
end calendar it Fine
end date/time calendar it Data/Ora finale
enddate calendar it Data-finale
enddate / -time of the meeting, eg. for more then one day calendar it Data/ora finale della riunione, es: per più di un giorno
enddate of the export calendar it Data finale dell'esportazione
ends calendar it finisce
enter output filename: ( .vcs appended ) calendar it Inserisci il nome del file di destinazione
error adding the alarm calendar it Errore aggiungendo la sveglia
error: saving the event !!! calendar it Errore: durante il salvataggio dell'evento !!!
event copied - the copy can now be edited calendar it Evento copiato - la copia può ora essere modificata
event deleted calendar it Evento cancellato
event details follow calendar it Dettagli dell'evento
event saved calendar it Evento salvato
event will occupy the whole day calendar it L'evento occuperà l'intera giornata
exceptions calendar it Eccezioni
existing links calendar it Collegamenti esistenti
export calendar it Esporta
export a list of entries in ical format. calendar it Esporta una lista delle voci in formato iCal
extended calendar it Esteso
@ -108,9 +150,15 @@ extended updates always include the complete event-details. ical's can be import
external participants calendar it Partecipanti Esterni
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar it Invio messaggio a '%1' #%2 soggetto='%3', mittente='%4' fallito!!!
fieldseparator calendar it Separatore
filename calendar it Nome file
filename of the download calendar it Nome file del download
find free timeslots where the marked participants are availible for the given timespan calendar it Trova spazi liberi in cui i partecipanti selezionati sono disponibili per il periodo stabilito
find free timeslots where the selected participants are availible for the given timespan calendar it Trova spazi di tempo libero in cui tutti i partecipanti sono disponibili per il periodo stabilito
firstname of person to notify calendar it Nome della persona da avvisare
for calendar it per
format of event updates calendar it Formato degli aggiornamenti degli eventi
forward half a month calendar it avanti metà mese
forward one month calendar it avanti un mese
fr calendar it V
free/busy calendar it Libero/Occupato
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar it libero/occupato: Utente '%1' sconosciuto, password errata o non disponibile agli utenti non loggati !!!
@ -119,6 +167,7 @@ frequency calendar it Frequenza
fri calendar it Ven
full description calendar it Descrizione completa
fullname of person to notify calendar it Nome completo della persona da avvisare
general calendar it Generale
generate printer-friendly version calendar it Genera versione stampabile
global categories calendar it Categorie Globali
global public and group public calendar it Pubblico Globale e Pubblico per il Gruppo
@ -136,16 +185,18 @@ holidays calendar it Festivit
hours calendar it ore
how far to search (from startdate) calendar it quanto lontano cercare (dalla data iniziale)
i participate calendar it Io Partecipo
ical calendar it iCal
ical / rfc2445 calendar it iCal / rfc2445
ical export calendar it Esportazione iCal
if checked holidays falling on a weekend, are taken on the monday after. calendar it Se selezionato la festività che ricorre nel weekend sarà spostata al lunedì successivo.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar it Se non stabilisci una password qui, l'informazione sarà disponibile a chiunque conosca l'URL!!!
if you dont set a password here, the information is availible to everyone, who knows the url!!! calendar it Se non imposti una password, le infomrazioni saranno disponibili a tutti coloro che conoscono l'URL!!!
ignore conflict calendar it Ignora Conflitto
import calendar it Importa
import csv-file common it Importa File-CSV
interval calendar it Intervallo
intervals in day view calendar it Intervallo nella Vista giornaliera
intervals per day in planner view calendar it Intervallo giornaliero nel pianificatore
invalid email-address "%1" for user %2 calendar it Indirizzo email "%1" non valido per utente %2
invalid entry id. calendar it ID della voce non valido
last calendar it ultimo
lastname of person to notify calendar it Cognome della persona da avvisare
@ -153,12 +204,16 @@ length shown<br>(emtpy for full length) calendar it Lunghezza visiva<br>(vuoto p
length<br>(<= 255) calendar it Lunghezza<br>(<= 255)
link calendar it Link
link to view the event calendar it Link per visualizzare l'evento
links calendar it Collegamenti
links, attachments calendar it Collegamenti, Allegati
list all categories. calendar it Lista tutte le categorie.
listview calendar it Vista elenco
load [iv]cal calendar it Carica [iv]Cal
location calendar it Località
location to autoload from admin it Indirizzo da cui caricare automaticamente
location, start- and endtimes, ... calendar it Luogo, Inizio e Fine, ...
mail all participants calendar it Invia email a tutti i partecipanti
make freebusy information available to not loged in persons? calendar it Rendere disponibili le informazioni libero/occupato alle persone non loggate?
make freebusy information availible to not loged in persons? calendar it Rendi le informazioni di disponibilità alle persone non loggate?
matrixview calendar it Vista a Matrice
minutes calendar it minutes
mo calendar it L
@ -175,11 +230,14 @@ new entry calendar it Nuova Voce
new name must not exist and not be empty!!! calendar it I nuovi nomi devono esistere e non essere vuoti!!!
new search with the above parameters calendar it nuova ricerca con i parametri indicati sopra
next day calendar it giorno seguente
no events found calendar it Nessun evento trovato
no filter calendar it Nessun Filtro
no matches found calendar it Nessuna corrispondenza
no response calendar it Nessuna Risposta
non blocking calendar it non bloccante
notification messages for added events calendar it Messaggi di notifica per gli eventi aggiunti
notification messages for canceled events calendar it Messaggi di notifica per gli eventi cancellati
notification messages for disinvited participants calendar it Messaggi di notifica per i partecipanti disinvitati
notification messages for modified events calendar it Messaggi di notifica per gli eventi modificati
notification messages for your alarms calendar it Messaggi di notifica per i tuoi allarmi
notification messages for your responses calendar it Messaggi di notifica per le tue risposte
@ -200,22 +258,26 @@ on time change of more than 4 hours too calendar it anche sul cambio ora maggior
one month calendar it un mese
one week calendar it una settimana
one year calendar it un anno
only the initial date of that recuring event is checked! calendar it Solo la data iniziale di quel evento ricorrente è selezionata!
open todo's: calendar it ToDo Aperti:
or enddate / -time calendar it o data/ora finale
order calendar it Ordine
overlap holiday calendar it sovrapposizione di una festività
participant calendar it Partecipante
participants calendar it Partecipanti
participates calendar it partecipa
participants disinvited from an event calendar it Partecipanti disinvitati da un evento
participants, resources, ... calendar it Partecipanti, Risorse, ...
participates calendar it Partecipa
password for not loged in users to your freebusy information? calendar it Password per gli utenti non loggati sulle tue informazioni di disponibilità?
people holiday calendar it festività personale
people holiday calendar it festività personali
permission denied calendar it Permesso negato
planner calendar it Pianificatore
planner by category calendar it Pianificatore per categorie
planner by user calendar it Pianificatore per utente
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar it Per favore conferma, accetta, rifiuta o esamina i cambiamenti della voce corrispondente nel tuo calendario
please enter a filename !!! calendar it Prego inserire un nome File !!!
please note: you can configure the field assignments after you uploaded the file. calendar it Attenzione: Puoi configurare il campo assegnazioni DOPO che hai caricato il file.
preselected group for entering the planner calendar it Gruppo predefinito per aggiunte al pianificatore
previous calendar it precedente
previous day calendar it giorno prededente
print calendars in black & white calendar it Stampa agende in bianco e nero
print the mini calendars calendar it Stampa la mini agenda
@ -231,24 +293,33 @@ read this list of methods. calendar it Leggi questa lista di metodi
receive email updates calendar it Ricevi aggiornamenti via e-mail
receive extra information in event mails calendar it Ricevi informazioni extra nell'e-mail dell'evento
receive summary of appointments calendar it Ricevi il resoconto degli appuntamenti
recurrence calendar it Ricorrenza
recurring event calendar it evento ricorrente
refresh calendar it Aggiorna
reinstate calendar it reinstanziare
rejected calendar it Rifiutato
repeat day calendar it Giorno ripetizione
repeat days calendar it Giorni di ripetizione
repeat end date calendar it Data ultima ripetizione
repeat the event until which date (empty means unlimited) calendar it ripeti l'evento fino a che data (vuoto significa illimitato)
repeat type calendar it Tipo di ripetizione
repeating event information calendar it Informazioni sugli eventi ricorrenti
repeating interval, eg. 2 to repeat every second week calendar it intervallo di ripetizione, es. 2 per ripetere ogni seconda settimana
repetition calendar it Ripetizione
repetitiondetails (or empty) calendar it Dettagli Ripetizione (o vuoto)
reset calendar it Reset
resources calendar it Risorse
rule calendar it Regola
sa calendar it Sa
sat calendar it Sab
saves the changes made calendar it salva le modifiche fatte
saves the event ignoring the conflict calendar it Salva l'evento ignorando il conflitto
scheduling conflict calendar it Conflitto di orario
search results calendar it Risultati Ricerca
select a %1 calendar it Seleziona %1
select a time calendar it seleziona un'ora
select resources calendar it Seleziona risorse
select who should get the alarm calendar it Seleziona chi dovrà avere la sveglia
selected contacts (%1) calendar it Contatti selezionati (%1)
send updates via email common it Invia aggiornamenti via e-mail
send/receive updates via email calendar it Invia/Ricevi aggiornamenti via e-mail
@ -276,12 +347,15 @@ sorry, this event does not exist calendar it Spiacente, questo evento non esiste
sorry, this event does not have exceptions defined calendar it Spiacente, questo evento non ha eccezioni definite
sort by calendar it Ordina per
specifies the the number of intervals shown in the planner view. calendar it Specifica il numero di intervalli nel pianificatore
start calendar it Inizio
start date/time calendar it Data/Ora Inizio
start- and enddates calendar it Data Iniziale e Finale
startdate calendar it Data Inizio
startdate / -time calendar it Data/ora iniziale
startdate and -time of the search calendar it Data/ora iniziale della ricerca
startdate of the export calendar it Data iniziale dell'esportazione
startrecord calendar it Primo Record
status changed calendar it Stato modificato
su calendar it Do
submit to repository calendar it Invia all'archivio
sun calendar it Dom
@ -299,6 +373,7 @@ this group that is preselected when you enter the planner. you can change it in
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar it Questo è causato da un impostazione sbagliata del server SMTP. Avvisa l'Amministratore.
this message is sent for canceled or deleted events. calendar it Questo messaggio è inviato per gli eventi annullati o cancellati.
this message is sent for modified or moved events. calendar it Questo messaggio è inviato. per gli eventi modficiati o spostati.
this message is sent to disinvited participants. calendar it Questo messaggio viene inviato ai partecipanti disinvitati.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar it Questo messaggio è inviato ad ogni partecipante, che ha richiesto la notifica, all'evento da te creato.<br>Puoi usare certe variabili che sostituiranno dati dell'evento. La prima linea è l'oggetto dell'e-mail.
this message is sent when you accept, tentative accept or reject an event. calendar it Questo messaggio è inviato quando accetti, provi ad accettare, o rifiuti un evento.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar it Questo messaggio è inviato quando imposti un Allarme per certi eventi. Include tutte le informazioni di cui hai bisogno.
@ -321,13 +396,11 @@ today calendar it Oggi
translation calendar it Traduzione
tu calendar it M
tue calendar it Mar
two dayview calendar it vista due giorni
two weeks calendar it due settimane
update a single entry by passing the fields. calendar it Aggiornamento di una singola voce compilando i campi
updated calendar it Modificato
use end date calendar it Usa data di termine
use the selected time and close the popup calendar it utilizza l'ora selezionata e chiudi popup
view this entry calendar it Visualizza questa voce
view this event calendar it Visualizza questo evento
we calendar it M
wed calendar it Mer
week calendar it Settimana
@ -336,11 +409,12 @@ weekdays calendar it Giorni settimanali
weekdays to use in search calendar it Giorni settimanali da usare per la ricerca
weekly calendar it Settimanale
weekview calendar it Vista Settimanale
weekview including weekend calendar it Vista settimanale con weekend
weekview with weekend calendar it Vista settimanale con weekend
weekview without weekend calendar it Vista settimanale senza weekend
when creating new events default set to private calendar it Quando vengono creati nuovi eventi settali automaticamente come privati
which events do you want to see when you enter the calendar. calendar it Quali eventi vuoi vedere quando entri nell'agenda.
which of calendar view do you want to see, when you start calendar ? calendar it Quale vista dell'agenda vuoi vedere quanto apri l'agenda?
whole day calendar it giornata intera
wk calendar it Sett
work day ends on calendar it La giornata lavorativa termina alle
work day starts on calendar it La giornata lavorativa inizia alle
@ -356,6 +430,7 @@ you do not have permission to read this record! calendar it Non hai l'autorizzaz
you have %1 high priority events on your calendar today. common it Oggi hai %1 eventi ad alta priorità nella tua agenda.
you have 1 high priority event on your calendar today. common it Oggi hai 1 evento a priorità alta nella tua agenda.
you have a meeting scheduled for %1 calendar it Hai un meeting fissato alle %1
you have been disinvited from the meeting at %1 calendar it Sei stato disinvitato dal meeting alle
you have not entered a title calendar it Non hai inserito alcun titolo
you have not entered a valid date calendar it Non hai inserito una data valida
you have not entered a valid time of day calendar it Non hai inserito un orario valido

View File

@ -5,34 +5,49 @@
(for weekly) calendar nl (voor wekelijks)
(i/v)cal calendar nl (i/v)Cal
1 match found calendar nl 1 resultaat gevonden
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar nl <b>Let op</b>: de agenda gebruikt de vrije dagen van uw land dat staat ingesteld op %1. U kunt dit wijzigen in uw %2.<br />Vrije dagen worden %3 automatisch geinstalleerd vanaf %4. U kunt dit wijzigen in %5.
a calendar nl a
a non blocking event will not conflict with other events calendar nl Een niet-blokkerende gebeurtenis zal geen conflicten met andere gebeurtenissen geven
accept calendar nl Accepteren
accept or reject an invitation calendar nl Accepteer of weiger een uitnodiging
accepted calendar nl Geaccepteerd
action that caused the notify: added, canceled, accepted, rejected, ... calendar nl Reden van de notificatie:Toegevoegd, Geannuleerd, Geaccepteerd, Geweigerd, ...
action that caused the notify: added, canceled, accepted, rejected, ... calendar nl Reden van de notificatie: Toegevoegd, Geannuleerd, Geaccepteerd, Geweigerd, ...
actions calendar nl Acties
add a single entry by passing the fields. calendar nl Een enkele afspraak toevoegen door de afzonderlijke velden in te voeren.
add alarm calendar nl Alarm toevoegen
add contact calendar nl Contact toevoegen
add or update a single entry by passing the fields. calendar nl Voeg een enkel veld toe of bewerk het door de velden door te geven.
added calendar nl Toegevoegd
address book calendar nl Adresboek
alarm calendar nl Alarm
alarm for %1 at %2 in %3 calendar nl Alarm voor %1 op %2 in %3
alarm management calendar nl Alarmbeheer
alarm-management calendar nl Alarmbeheer
alarms calendar nl Alarms
after current date calendar nl Na de huidige datum
alarm calendar nl Herinnering
alarm added calendar nl Herinnering toegevoegd
alarm deleted calendar nl Herinnering verwijderd
alarm for %1 at %2 in %3 calendar nl Herinnering voor %1 op %2 in %3
alarm management calendar nl Herinneringen beheer
alarm-management calendar nl Herinneringen beheer
alarms calendar nl Herinneringen
all categories calendar nl Alle categorieën
all day calendar nl Hele dag
all events calendar nl Alle gebeurtenissen
all participants calendar nl Alle deelnemers
allows to edit the event again calendar nl Staat toe om de gebeurtenis opnieuw te wijzigen
apply the changes calendar nl wijzigingen doorvoeren
are you sure you want to delete this country ? calendar nl Weet u zeker dat u dit land wilt verwijderen?
are you sure you want to delete this holiday ? calendar nl Weet u zeker dat u deze feestdag wilt verwijderen?
are you sure\nyou want to\ndelete these alarms? calendar nl Weet u zeker dat u deze alarms wilt verwijderen?
are you sure\nyou want to\ndelete these alarms? calendar nl Weet u zeker\n dat u deze\n waarschuwingen wilt verwijderen?
are you sure\nyou want to\ndelete this entry ? calendar nl Weet u zeker\n dat u deze\nafspraak wilt verwijderen?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar nl Weet u zeker\n dat u deze\nafspraak wilt verwijderen?\nDit zal de afspraak bij\nalle gebruikers verwijderen.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar nl Weet u zeker\n dat u deze enkele afpraak wilt verwijdere?\n\nDeze afspraak zal voor iedere gebruiker worden verwijderd.
are you surenyou want tondelete these alarms? calendar nl Weet u zeker dat u deze alarms wilt verwijderen?
are you surenyou want tondelete this entry ? calendar nl Weet u zeker\n dat u deze\nafspraak wilt verwijderen?
are you surenyou want tondelete this entry ?nnthis will deletenthis entry for all users. calendar nl Weet u zeker\n dat u deze\nafspraak wilt verwijderen?\nDit zal de afspraak bij\nalle gebruikers verwijderen.
are you surenyou want tondelete this single occurence ?nnthis will deletenthis entry for all users. calendar nl Weet u zeker\n dat u deze enkele afpraak wilt verwijdere?\n\nDeze afspraak zal voor iedere gebruiker worden verwijderd.
back half a month calendar nl halve maand terug
back one month calendar nl één maand terug
before current date calendar nl Voor de huidige datum
before the event calendar nl voor de afspraak
birthday calendar nl Verjaardag
brief description calendar nl Korte omschrijving
business calendar nl Bedrijf
busy calendar nl bezet
by calendar nl door
calendar common nl Agenda
calendar - [iv]cal importer calendar nl Agenda - [iv]Cal Importeren
calendar - add calendar nl Agenda - toevoegen
@ -42,14 +57,21 @@ calendar holiday management admin nl Agenda feestdagen beheer
calendar preferences calendar nl Agenda voorkeuren
calendar settings admin nl Agenda instellingen
calendar-fieldname calendar nl Agenda - Veldnaam
can't add alarms in the past !!! calendar nl Herinneringen kunnen niet in het verleden aangemaakt worden !!!
canceled calendar nl Geannuleerd
change all events for $params['old_owner'] to $params['new_owner']. calendar nl Alle afspraken wijzigen voor $params['oude_eigenaar'] naar $params['nieuwe_eigenaar'].
change status calendar nl Verander status
charset of file calendar nl Karakterset van bestand
click %1here%2 to return to the calendar. calendar nl Klik %1here%2 om terug te keren naar de agenda.
click %1here%2 to return to the calendar. calendar nl Klik %1hier%2 om terug te keren naar de agenda.
close the window calendar nl Venster sluiten
common preferences calendar nl Normale voorkeuren
compose a mail to all participants after the event is saved calendar nl stel een email aan alle deelnemers op nadat de gebeurtenis is opgeslagen
configuration calendar nl Configuratie
copy of: calendar nl Kopie van:
copy this event calendar nl Kopieer deze gebeurtenis
countries calendar nl Landen
country calendar nl Land
create new links calendar nl Nieuwe links aanmaken
created by calendar nl Aangemaakt door
csv-fieldname calendar nl CSV-veldnaam
csv-filename calendar nl CSV-bestandsnaam
@ -58,46 +80,69 @@ custom fields and sorting common nl Aangepaste velden en volgorde
daily calendar nl Dagelijks
daily matrix view calendar nl Dagelijks matrix overzicht
days calendar nl dagen
days of the week for a weekly repeated event calendar nl Dagen van de week voor een wekelijks herhalende gebeurtenis
days repeated calendar nl dagen herhaald
dayview calendar nl Dagweergave
default appointment length (in minutes) calendar nl standaard afspraakduur (in minuten)
default calendar filter calendar nl Standaard agendafilter
default calendar view calendar nl Standaard agendaoverzicht
default length of newly created events. the length is in minutes, eg. 60 for 1 hour. calendar nl Standaard lengte van nieuw aangemaakte afspraken. De lengte is in minuten, bijv. 60 voor 1 uur.
default week view calendar nl Standaard weekoverzicht
defines the size in minutes of the lines in the day view. calendar nl Standaard grootte in minutes van de regels in de dagelijkse weergave.
delete a single entry by passing the id. calendar nl Verwijder een enkele afspraak door het ID in te voeren
delete an entire users calendar. calendar nl Een complete gebruikersagenda verwijderen.
delete selected contacts calendar nl Geselecteerde contacten verwijderen
delete selected participants calendar nl Geselecteerde deelnemers verwijderen
delete series calendar nl Series verwijderen
delete single calendar nl Enkele verwijderen
delete this entry ? calendar nl Weet u zeker
delete this alarm calendar nl Deze herinnering verwijderen
delete this event calendar nl Deze gebeurtenis verwijderen
delete this exception calendar nl Deze uitzondering verwijderen
delete this series of recuring events calendar nl Deze serie herhalende gebeurtenissen verwijderen
deleted calendar nl Verwijderd
description calendar nl Omschrijving
determining window width ... calendar nl Vensterbreedte wordt berekend ...
disable calendar nl Deactiveer
disabled calendar nl gedeactiveerd
disinvited calendar nl Uitnodiging teruggetrokken
display interval in day view calendar nl Verdelingen in dagelijks overzicht
display mini calendars when printing calendar nl Mini kalenders tijdens het afdrukken
display status of events calendar nl Status van afspraken weergeven
displayed view calendar nl huidige weergave
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar nl Laat uw standaard agenda weergave zien op de startpagina (De pagina waarmee eGroupWare geopend wordt of die u krijgt als u op klikt op 'start'
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar nl Geeft uw standaard agenda weer op de hoofdpagina
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 nl Wilt u worden geïnformeerd over nieuwe of gewijzigde afspraken? U wordt geïnformeerd over wijzigingen die u zelf heeft gemaakt.<br/>U kunt de de notificaties beperken to alleen bepaalde wijzigingen. Elk item bevat alle notificaties hierboven weergegeven. "Alle wijzigingen" bevat wijziging va titel, beschrijving, deelnemers, maar niet reacties van deelnemers. Als de eigenaar van een afspraak verzocht heeft om een van de notificaties, zal hij of zij altijd reacties krijgen van de deelnemers zoals acceptaties en afwijzigingen.
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 nl Wilt u per email een periodieke overzichten ontvangen van uw afspraken? </br>Het overzicht wordt verzonden naar uw standaard emailadres op de ochtend dat de afspraak plaatsvind en op maandag voor wekelijkse overzichten. <br/> Er wordt alleen een overzicht verstuurd als er in die afspraken staan geregistreerd.
do you want a weekview with or without weekend? calendar nl Wil je weekoverzicht met of zonder weekend?
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 nl Wilt u worden geinformeerd over nieuwe of gewijzigde afspraken? U wordt geïnformeerd over wijzigingen die u zelf heeft gemaakt.<br />U kunt de de notificaties beperken to alleen bepaalde wijzigingen. Elk item bevat alle notificaties hierboven weergegeven. "Alle wijzigingen" bevat wijziging va titel, beschrijving, deelnemers, maar niet reacties van deelnemers. Als de eigenaar van een afspraak verzocht heeft om een van de notificaties, zal hij of zij altijd reacties krijgen van de deelnemers zoals acceptaties en afwijzigingen.
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 nl Wilt u per email een periodieke overzichten ontvangen van uw afspraken? </br>Het overzicht wordt verzonden naar uw standaard emailadres op de ochtend dat de afspraak plaatsvind en op maandag voor wekelijkse overzichten. <br /> Er wordt alleen een overzicht verstuurd als er in die afspraken staan geregistreerd.
do you wish to autoload calendar holidays files dynamically? admin nl Wilt u de feestdagen automatisch downloaden
download calendar nl Downloaden
download this event as ical calendar nl Download deze gebeurtenis als iCal
duration calendar nl Duur
duration of the meeting calendar nl Duur van de bijeenkomst
edit series calendar nl Alles bewerken
edit single calendar nl Een bewerken
edit this event calendar nl Deze gebeurtenis bewerken
edit this series of recuring events calendar nl De hele reeks herhalende gebeurtenissen bewerken
email notification calendar nl Email Notificatie
email notification for %1 calendar nl Email Notificatie voor %1
empty for all calendar nl leeg voor alle
enable calendar nl Activeren
enabled calendar nl Geactiveerd
end calendar nl Eind
end date/time calendar nl Einddatum/-tijd
enddate calendar nl Einddatum
enddate / -time of the meeting, eg. for more then one day calendar nl Einddatum / -tijd van de bijeenkomst, bijvoorbeeld voor langer dan één dag
enddate of the export calendar nl Einddatum van de export
ends calendar nl eindigt
enter output filename: ( .vcs appended ) calendar nl Voer een bestandsnaam in om naartoe te schrijven (inclusief .vcs extentie)
error adding the alarm calendar nl Fout bij instellen van de herinnering
error: saving the event !!! calendar nl Fout: opslaan van de gebeurtenis !!!
event copied - the copy can now be edited calendar nl Gebeurtenis gekopieerd - de kopie kan nu bewerkt worden
event deleted calendar nl Gebeurtenis verwijderd
event details follow calendar nl Afspraak details volgen
event saved calendar nl Gebeurtenis opgeslagen
event will occupy the whole day calendar nl Gebeurtenis duurt de hele dag
exceptions calendar nl Uitzonderingen
existing links calendar nl Bestaande links
export calendar nl Exporteren
export a list of entries in ical format. calendar nl Een lijst met afspraken exporteren in iCal-formaat.
extended calendar nl Uitgebreid
@ -105,14 +150,24 @@ extended updates always include the complete event-details. ical's can be import
external participants calendar nl Externe participanten
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar nl Het versturen van een bericht naar '%1' #%2 onderwerp='%3', afzender='%4' is mislukt !!!
fieldseparator calendar nl Veldscheidingssymbool
filename calendar nl Bestandsnaam
filename of the download calendar nl Bestandsnaam van de download
find free timeslots where the marked participants are availible for the given timespan calendar nl Zoek naar vrije tijdstippen waarop de gemarkeerde deelnemers beschikbaar zijn binnen de opgegeven tijdsduur
find free timeslots where the selected participants are availible for the given timespan calendar nl Zoek vrije tijdstippen waarop de geselecteerde deelnemers beschikbaar zijn binnen de opgegeven tijdsduur
firstname of person to notify calendar nl Voornaam van persoon om te op de hoogte te brengen
for calendar nl voor
format of event updates calendar nl Formaat van afspraakbewerkingen
forward half a month calendar nl halve maand verder
forward one month calendar nl één maand verder
fr calendar nl Vr
free/busy calendar nl Vrij/Bezet
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar nl Vrij/Bezet: onbekende gebruiker '%1', verkeerd wachtwoord of niet beschikbaar voor niet-ingelogde gebruikers!!!
freetime search calendar nl Beschikbare tijd opzoeken
frequency calendar nl Frequentie
fri calendar nl Vri
full description calendar nl Volledige omschrijving
fullname of person to notify calendar nl Volledige naam van persoon om te op de hoogte te brengen
general calendar nl Algemeen
generate printer-friendly version calendar nl Genereer printervriendelijke versie
global categories calendar nl Globale categorieën
global public and group public calendar nl Globaal publiek en group publiek
@ -121,8 +176,6 @@ go! calendar nl Uitvoeren!
grant calendar access common nl Geef agenda toegang
group planner calendar nl Groepsplanner
group public only calendar nl Alleen group publiek
has been canceled calendar nl is geanulleerd
has been rescheduled to calendar nl is verplaats naar
here is your requested alarm. calendar nl Hier is uw verzochte alarm.
high priority calendar nl hoge prioriteit
holiday calendar nl Vakantie
@ -130,23 +183,37 @@ holiday management calendar nl Feestdagenbeheer
holiday-management calendar nl Feestdagenbeheer
holidays calendar nl Vakanties
hours calendar nl uren
how far to search (from startdate) calendar nl hoe ver vooruit zoeken (vanaf de startdatum)
i participate calendar nl Ik doe mee
ical calendar nl iCal
ical / rfc2445 calendar nl iCal / rfc2445
ical export calendar nl iCal export
if checked holidays falling on a weekend, are taken on the monday after. calendar nl wanneer deze optie is geactiveerd zullen feestdagen die vallen in het weekend, genomen worden op de maandag daarna.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar nl Indien u hier geen wachtwoord instelt, is de informatie beschikbaar voor iedereen die de URL kent!!!
ignore conflict calendar nl Conflict negeren
import calendar nl Importeren
import csv-file common nl CSV-bstand importeren
interval calendar nl Herhaling
intervals in day view calendar nl Intervallen in dagelijke weergave
intervals per day in planner view calendar nl Intervallen per dag in planner weergave
invalid email-address "%1" for user %2 calendar nl Ongeldig emailadres "%1" voor gebruiker %2
invalid entry id. calendar nl Ongeldige record-ID
last calendar nl laatste
lastname of person to notify calendar nl Achternaam van persoon om te op de hoogte te brengen
length shown<br>(emtpy for full length) calendar nl Lengte weergeven<br/>(leeg laten voor de volledige lengte)
length<br>(<= 255) calendar nl Lengte<br/>(<= 255)
length shown<br>(emtpy for full length) calendar nl Lengte weergeven<br />(leeg laten voor de volledige lengte)
length<br>(<= 255) calendar nl Lengte<br />(<= 255)
link calendar nl Link
link to view the event calendar nl Link om het evenement te bekijken
links calendar nl Links
links, attachments calendar nl Links, bijlagen
list all categories. calendar nl Lijst alle categorieën
listview calendar nl Lijstweergave
load [iv]cal calendar nl [iv]Cal laden
location calendar nl Plaats
location to autoload from admin nl Plaats om van te laden
location, start- and endtimes, ... calendar nl Plaats, start- en eindtijden
mail all participants calendar nl Stuur een email naar alle deelnemers
make freebusy information available to not loged in persons? calendar nl Maak vrij/bezet informatie beschikbaar voor nietingelogde personen?
matrixview calendar nl Matrixweergave
minutes calendar nl minuten
mo calendar nl Ma
@ -158,14 +225,21 @@ monthly calendar nl Maandelijks
monthly (by date) calendar nl Maandelijks (op datum)
monthly (by day) calendar nl Maandelijks (op dag)
monthview calendar nl Maandweergave
needs javascript to be enabled !!! calendar nl Vereist dat javascript is ingeschakeld !!!
new entry calendar nl Nieuwe afspraak
new name must not exist and not be empty!!! calendar nl Nieuwe naam niet reeds bestaan en mag niet leeg zijn!!!
new search with the above parameters calendar nl opnieuw zoeken met de bovenstaande instellingen
next day calendar nl volgende dag
no events found calendar nl Geen gebeurtenissen gevonden
no filter calendar nl Geen filter
no matches found calendar nl Geen resultaten gevonden
no matches found. calendar nl Geen resultaten gevonden
no response calendar nl Geen Antwoord
notification messages for added events calendar nl Notificatieberichten voor toegevoegde afsrpaken
notification messages for canceled events calendar nl Notificatieberichten voor geannuleerde afsrpaken
notification messages for modified events calendar nl Notificatieberichten voor gewijzigde afsrpaken
non blocking calendar nl niet blokkerend
not calendar nl niet
notification messages for added events calendar nl Notificatieberichten voor toegevoegde afspraken
notification messages for canceled events calendar nl Notificatieberichten voor geannuleerde afspraken
notification messages for disinvited participants calendar nl Notificatieberichten voor deelnemers waarvan de uitnodiging is ingetrokken
notification messages for modified events calendar nl Notificatieberichten voor gewijzigde afspraken
notification messages for your alarms calendar nl Notificatieberichten voor uw alarms
notification messages for your responses calendar nl Notificatieberichten voor uw reacties
number of intervals per day in planner view calendar nl Aantal items per dag in planner overzicht
@ -176,27 +250,37 @@ occurence calendar nl Gebeurtenis
old startdate calendar nl Oude startdatum
olddate calendar nl OudeDatum
on %1 %2 %3 your meeting request for %4 calendar nl Op %1 %2 %3 uw afspraak aanvraag voor %4
on all changes calendar nl op alle wijzigingen
on all modification, but responses calendar nl op alle wijzigingen, behalve reacties
on any time change too calendar nl op iedere tijd ook wijzigen
on invitation / cancelation only calendar nl op uitnodiging / alleen annulering
on participant responses too calendar nl ook op deelnemerreacties
on time change of more than 4 hours too calendar nl ook op tijdswijziging van meer dan 4 uur
on all changes calendar nl bij alle wijzigingen
on all modification, but responses calendar nl bij alle wijzigingen, behalve reacties
on any time change too calendar nl ook bij iedere wijziging van tijdstip
on invitation / cancelation only calendar nl alleen bij uitnodiging / annulering
on participant responses too calendar nl ook bij deelnemerreacties
on time change of more than 4 hours too calendar nl ook bij tijdswijziging van meer dan 4 uur
one month calendar nl één maand
one week calendar nl één week
one year calendar nl één jaar
only the initial date of that recuring event is checked! calendar nl Alleen de startdatum van die terugkerende gebeurtenis is gecontroleerd!
open todo's: calendar nl Openstaande taken:
order calendar nl Volgorde
overlap holiday calendar nl vakantie overlapt
participant calendar nl Deelnemer
participants calendar nl Deelnemers
participates calendar nl Deelnemen
participants disinvited from an event calendar nl Deelnemers waarvan de uitnodiging is ingetrokken
participants, resources, ... calendar nl Deelnemers, hulpmiddelen, ...
participates calendar nl Neemt deel aan
password for not loged in users to your freebusy information? calendar nl Wachtwoord voor niet-ingelogde gebruiker voor jouw vrij/bezet informatie?
people holiday calendar nl mensen vakantie
permission denied calendar nl Toegang geweigerd
planner calendar nl Planner
planner by category calendar nl Planner per categorie
planner by user calendar nl Planner per gebruiker
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar nl Wilt u de afspraak in uw agenda bevestigen, accepteren, weigeren of bijken.
preselected group for entering the planner calendar nl Geselecteerde groep bij het openen van de planner
please enter a filename !!! calendar nl vul s.v.p. een bestandsnaam in!!!
preselected group for entering the planner calendar nl Voorgeselecteerde groep bij het openen van de planner
previous calendar nl vorige
previous day calendar nl vorige dag
print calendars in black & white calendar nl Kalenders in zwart/wit afdrukken
print the mini calendars calendar nl Print minikalenders
print the mini calendars calendar nl Minikalenders afdrukken
printer friendly calendar nl Afdrukvriendelijk
privat calendar nl Privé
private and global public calendar nl Privé en globaal publiek
@ -209,22 +293,33 @@ read this list of methods. calendar nl Lees deze lijst met methodes.
receive email updates calendar nl Ontvang email updates
receive extra information in event mails calendar nl Ontvang extra informatie in afspraak berichten
receive summary of appointments calendar nl Ontvang overzicht van afspraken
recurring event calendar nl terugkerende afsrpaak
recurrence calendar nl Terugkeren
recurring event calendar nl terugkerende afspraak
refresh calendar nl Verversen
reinstate calendar nl Opnieuw in gebruik nemen
rejected calendar nl Afgewezen
repeat day calendar nl Dag herhalen
repeat days calendar nl Dagen herhalen
repeat end date calendar nl Einddatum herhalingspatroon
repeat the event until which date (empty means unlimited) calendar nl tot welke datum de gebeurtenis herhalen (leeg betekent onbeperkt)
repeat type calendar nl Herhalingstype
repeating event information calendar nl Afspraak herhalings informatie
repeating interval, eg. 2 to repeat every second week calendar nl herhalingsinterval, bijvoorbeeld 2 herhaalt iedere tweede week
repetition calendar nl Herhalingspatroon
repetitiondetails (or empty) calendar nl Details herhaling (of leeg laten)
reset calendar nl Herstel
resources calendar nl Hulpmiddelen
rule calendar nl Regel
sa calendar nl Za
sat calendar nl Zat
saves the changes made calendar nl bewaar de aangebrachte wijzigingen
saves the event ignoring the conflict calendar nl Bewaart de gebeurtenis en negeert het conflict
scheduling conflict calendar nl Afspraak conflict
search results calendar nl Zoekresultaten
select a %1 calendar nl Selecteer een %1
select a time calendar nl selecteer een tijd
select resources calendar nl Selecteer hulpmiddelen
select who should get the alarm calendar nl Selecteer wie de herinnering moet ontvangen
selected contacts (%1) calendar nl Geselecteerde contacten (%1)
send updates via email common nl Zend aanpassingen via e-mail
send/receive updates via email calendar nl Zend/ontvang aanpassingen via e-mail
@ -232,6 +327,7 @@ set a year only for one-time / non-regular holidays. calendar nl Stel een een ja
set new events to private calendar nl Zet nieuwe afspraken op privé
should invitations you rejected still be shown in your calendar ?<br>you can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar! calendar nl Moeten uitnodigingen die u heeft afgewezen nog steeds worden weergegeven in uw agenda? <br/> U kunt ze alleen achteraf nog accepteren als ze in uw agenda worden weergegeven! (bijv. wanneer een planningsconflict is verwijderd)
should new events created as private by default ? calendar nl Moeten nieuwe afspraken standaard als privé worden aangemaakt?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar nl Moeten niet-ingelogde personen jouw vrij/bezet informatie kunnen bekijken? Je kunt een extra wachtwoord instellen dat afwijkt van je normale wachtwoord, om deze informatie af te beveiligen. De vrij/bezet informatie is in iCal formaat en bevat uitsluitend de tijdstippen waarop je bezet bent. Het bevat niet de naam, omschrijving of locatie van de afspraak. De URL naar jouw vrij/bezet informatie is %1.
should the mini calendars by printed / displayed in the printer friendly views ? calendar nl Moeten de minikalenders worden weergegeven en geprint in de printervriendelijke weergaves?
should the printer friendly view be in black & white or in color (as in normal view)? calendar nl Moeten de printervriendelijke weergaves in kleur of in zwart wit worden weergegeven?
should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ? calendar nl Moet de status van de afspraak-deelnemers (accepteren, afwijzen, ...) worden weergegeven tussen haakjes achter elke de namen van de deelnemers?
@ -240,16 +336,27 @@ show default view on main screen calendar nl Geeft standaard overzicht weer op b
show high priority events on main screen calendar nl Evenementen met hoge prioriteit weergeven op hoofdscherm
show invitations you rejected calendar nl Uitnodigingen weergeven die zijn afgewezen
show list of upcoming events calendar nl Lijst weergeven van toekomstige afspraken
show next seven days calendar nl Toon volgende zeven dagen
show only one day calendar nl Toon slechts één dag
show the calendar of multiple users calendar nl toon de agenda van meerdere personen
show this month calendar nl toon deze maand
show this week calendar nl toon deze week
single event calendar nl enkele afspraak
site configuration calendar nl site configuratie
sorry, the owner has just deleted this event calendar nl Sorry, de eigenaar heeft deze afspraak zojuist verwijderd
sorry, this event does not exist calendar nl Excuses, deze afspraak bestaat niet
sorry, this event does not have exceptions defined calendar nl Excuses, deze afspraak heeft geen uitzonderingen gedefinieerd.
sort by calendar nl Sorteren op
specifies the the number of intervals shown in the planner view. calendar nl Specificeerd het aantal intervallen die worden weergegeven in de plannerweergave
specifies the the number of intervals shown in the planner view. calendar nl Specificeert het aantal in de plannerweergave getoonde intervallen.
start calendar nl Start
start date/time calendar nl Startdatum/ -tijd
start- and enddates calendar nl Start- en einddata
startdate calendar nl Startdatum
startdate / -time calendar nl Startdatum / -tijd
startdate and -time of the search calendar nl Startdatum en -tijd van de zoekopdracht
startdate of the export calendar nl Startdatum van de export
startrecord calendar nl Startregel
status changed calendar nl Status gewijzigd
su calendar nl Zo
submit to repository calendar nl Naar repository inzenden
sun calendar nl Zon
@ -259,21 +366,26 @@ text calendar nl Tekst
th calendar nl Do
the following conflicts with the suggested time:<ul>%1</ul> calendar nl Het volgende levert een conflict op met de voorgestelde tijd:<ul>%1</ul>
the user %1 is not participating in this event! calendar nl De gebruiker %1 neemt niet deel aan deze afspraak!
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar nl Er was een probleem tijdens de verbinding met de news server.<br>Neem contact op met de beheerder om de servernaam, gebruikersnaam en wachtwoord te controleren.
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar nl Er was een probleem tijdens de verbinding met de news server.<br />Neem contact op met de beheerder om de servernaam, gebruikersnaam en wachtwoord te controleren.
this day is shown as first day in the week or month view. calendar nl Deze dag wordt weergegeven als de eerste dag in de week- and maandweergave.
this defines the end of your dayview. events after this time, are shown below the dayview. calendar nl Dit definieerd het einde van uw dagweergave. Afspraken die na deze tijd plaatsvinden worden onderaan de dagweergave weergegeven.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar nl Dit definieerd het begin van uw dagweergave. Afspraken die voor deze tijd plaatsvinden worden boven de dagweergave weergegeven.
this defines the end of your dayview. events after this time, are shown below the dayview. calendar nl Dit definieert het einde van uw dagweergave. Afspraken die na deze tijd plaatsvinden worden onderaan de dagweergave weergegeven.
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar nl Dit definieert het begin van uw dagweergave. Afspraken die voor deze tijd plaatsvinden worden boven de dagweergave weergegeven.<br />Deze tijd wordt ook gebruikt als standaard starttijd voor nieuwe afspraken.
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar nl Deze groep is voorgeselecteerd wanneer u de planner opent. U kunt deze selectie in de planner eventueel wijzigen.
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar nl Dit wordt meestal veroorzaakt door een verkeerd geconfigureerde SMTP-server. Waarschuw uw systeembeheerder.
this message is sent for canceled or deleted events. calendar nl Deze notificatie wordt verstuurd voor geannuleerde en verwijderde afspraken.
this message is sent for modified or moved events. calendar nl Deze notificatie wordt verstuurd voor gewijzigde afspraken.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar nl Deze notificatie wordt verstuurd naar elke deelnemer van uw afspraken die notificatie voor nieuwe afspraken heeft geactiveerd.<br/> U kunt bepaalde plaatsvervangende woorden invullen die worden gebruikt met de gegevens van de afspraak. De eerste regel is het onderwerp van de email.
this message is sent when you accept, tentative accept or reject an event. calendar nl Deze notificatie wordt verstuurd wanneer uw afspraken accepteerd, op proef accepteerd of afwijst.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar nl Deze notificatie wordt verstuur als u een alarm instelt voor een bepaalde afspraak. Geef aan welke informatie u mogelijker nodig heeft.
this message is sent to disinvited participants. calendar nl Deze notificatie wordt verstuurd aan deelnemers waarvan de uitnodiging is ingetrokken.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar nl Deze notificatie wordt verstuurd naar elke deelnemer van uw afspraken die notificatie voor nieuwe afspraken heeft geactiveerd.<br /> U kunt bepaalde plaatsvervangende woorden invullen die worden gebruikt met de gegevens van de afspraak. De eerste regel is het onderwerp van de email.
this message is sent when you accept, tentative accept or reject an event. calendar nl Deze notificatie wordt verstuurd wanneer u afspraken accepteert, op proef accepteert of afwijst.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar nl Deze notificatie wordt verstuurd als u een alarm instelt voor een bepaalde afspraak. Geef aan welke informatie u mogelijker nodig heeft.
this month calendar nl Deze maand
this week calendar nl Deze week
this year calendar nl Dit jaar
three month calendar nl drie maanden
thu calendar nl Don
til calendar nl tot
timeframe calendar nl Tijdskader
timeframe to search calendar nl Tijdskader om te zoeken
title calendar nl Titel
title of the event calendar nl Titel van afspraak
title-row calendar nl Regeltitel
@ -285,23 +397,30 @@ today calendar nl Vandaag
translation calendar nl Vertaling
tu calendar nl Di
tue calendar nl Din
two weeks calendar nl twee weken
update a single entry by passing the fields. calendar nl Werk een enkele afspraak bij door de afzonderlijke velden in te voeren.
updated calendar nl Bijgewerkt
use end date calendar nl Gebruik einddatum
view this entry calendar nl Deze afspraak bekijken
use the selected time and close the popup calendar nl gebruik de geselecteerde tijd en sluit het popupvenster
view this event calendar nl Bekijk deze gebeurtenis
we calendar nl Wo
wed calendar nl Woe
week calendar nl Week
weekday starts on calendar nl De week begint op
weekdays calendar nl Weekdagen
weekdays to use in search calendar nl Weekdagen waarop gezocht moet worden
weekly calendar nl wekelijks
weekview calendar nl Weekweergave
when creating new events default set to private calendar nl Nieuwe afspraken standaard op prive zetten
weekview with weekend calendar nl weekweergave met weekend
weekview without weekend calendar nl weekweergave zonder weekend
when creating new events default set to private calendar nl Nieuwe afspraken standaard op privé zetten
which events do you want to see when you enter the calendar. calendar nl Welke afspraken wilt u zien wanneer u de agenda opent?
which of calendar view do you want to see, when you start calendar ? calendar nl Welke agendaweergave wilt u zien wanneer u de agenda opent?
whole day calendar nl hele dag
wk calendar nl Wk
work day ends on calendar nl Werkdag eindigt om
work day starts on calendar nl Werkdag begint om
workdayends calendar nl werkdag eindigt
year calendar nl Jaar
yearly calendar nl Jaarlijks
yearview calendar nl Jaarweergave
you can either set a year or a occurence, not both !!! calendar nl U kunt of een Jaar of een Gebeurtenis in, niet beide !!!
@ -312,19 +431,15 @@ you do not have permission to enable/disable this alarm !!! calendar nl U heeft
you do not have permission to read this record! calendar nl U heeft geen toegang om dit record in te lezen
you have %1 high priority events on your calendar today. common nl U hebt vandaag %1 afspraken met hoge prioriteit op uw agenda staan.
you have 1 high priority event on your calendar today. common nl U hebt vandaag 1 afspraak met hoge prioriteit op uw agenda staan.
you have a meeting scheduled for calendar nl U heeft een afspraak om
you have a meeting scheduled for %1 calendar nl U heeft een vergadering gepland voor %1
you have been disinvited from the meeting at %1 calendar nl Uw uitnodiging voor de bijeenkomst op %1 is ingetrokken
you have not entered a title calendar nl U heeft geen titel opgegeven
you have not entered a valid date calendar nl U heeft geen geldige datum opgegeven
you have not entered a valid time of day calendar nl U heeft geen geldige tijd opgegeven
you have not entered a\nbrief description calendar nl U hebt geen korte\nomschrijving ingevoerd
you have not entered a\nvalid time of day. calendar nl U hebt geen geldige\n tijd ingevoerd
you have not entered participants calendar nl U heeft geen deelnemers opgegeven
you must enter one or more search keywords calendar nl U moet een of meer zoektermen invoeren
you must select a [iv]cal. (*.[iv]cs) calendar nl U moet een iCal of vCal selecteren (*.ics of *.vcs)
you need to set either a day or a occurence !!! calendar nl U moet of een Dag of een Gebeurtenis instellen !!!
your meeting scheduled for calendar nl Uw afspraak op
your meeting scheduled for %1 has been canceled calendar nl U geplande vergadering voor %1 is geannuleerd.
your meeting that had been scheduled for calendar nl Uw afspraak die was op
your meeting that had been scheduled for %1 has been rescheduled to %2 calendar nl Uw vergadering die stond gepland voor %1 is opnieuw ingepland naar %2
your suggested time of <b> %1 - %2 </b> conflicts with the following existing calendar entries: calendar nl Uw opgegeven tijd (%1 - %2) levert een conflict op met de volgende afspraken:

View File

@ -5,32 +5,48 @@
(for weekly) calendar no (for Ukentlig)
(i/v)cal calendar no (i/v)Kal
1 match found calendar no 1 treff funnet
<b>please note</b>: the calendar use the holidays of your country, which is set to %1. you can change it in your %2.<br />holidays are %3 automatic installed from %4. you can changed it in %5. calendar no <b>Vennligst bemerk</b>: Kalenderen bruker helligdager for ditt land som er satt til %1. Du kan endre dette i ditt %2.<b/>Helligdager er %3 automatisk lagt til for %4. Du kan endre dette til %5.
a calendar no a
a non blocking event will not conflict with other events calendar no En hendelse som ikke blokkerer vil ikke være i konflikt med andre hendelser
accept calendar no Godta
accept or reject an invitation calendar no Aksepter eller avslå invitasjonen
accepted calendar no Godtatt
action that caused the notify: added, canceled, accepted, rejected, ... calendar no Handling som utløste denne meldingen: Lagt til, Kansellert, Akseptert, Avslått, ...
add a single entry by passing the fields. calendar no Llegg til en enkel oppføring ved å hoppe over feltene.
actions calendar no Aksjoner
add a single entry by passing the fields. calendar no Legg til en enkel oppføring ved å hoppe over feltene.
add alarm calendar no Legg til alarm
add contact calendar no Legg til kontakt
add or update a single entry by passing the fields. calendar no Legg til eller oppdater en enkel oppføring ved å hoppe over feltene.
added calendar no Lagt til
address book calendar no Adresseliste
after current date calendar no Etter inneværende dato
alarm calendar no Alarm
alarm added calendar no Alarm lagt til
alarm deleted calendar no Alarm slettet
alarm for %1 at %2 in %3 calendar no Alarm for %1 ved %2 i %3
alarm management calendar no Alarm Styring
alarm-management calendar no Alarm-Styring
alarms calendar no Alarmer
all categories calendar no Alle kategorier
all day calendar no Hele Dagen
all events calendar no Alle hendelser
all participants calendar no Alle deltagere
allows to edit the event again calendar no Tillate endring av alarmen
apply the changes calendar no Oppdater endringene
are you sure you want to delete this country ? calendar no Er du sikker på at du vil slette dette landet?
are you sure you want to delete this holiday ? calendar no Er du sikker på at du vil slette denne ferien?
are you sure\nyou want to\ndelete these alarms? calendar no Er du sikker\npå at du vil\nslette disse alarmene?
are you sure\nyou want to\ndelete this entry ? calendar no Er dy sikker\npå at du vil\nslette denne oppføringen?
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar no Er du sikker\npå at du vil\nslette denne oppføringen?\n\nDette sletter oppføringen\nfor alle brukere.
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar no Er du sikker\npå at du vil slette\ndenne enkle oppføringen?\n\nDette sletter oppføringen\nfor alle brukere.
back half a month calendar no Tilbake en halv mnd.
back one month calendar no Tilbake en mnd.
before current date calendar no For inneværende dato
before the event calendar no før hendelsen
brief description calendar no Kort beskrivelse
business calendar no Arbeid
busy calendar no Opptatt
by calendar no av
calendar common no Kalender
calendar - [iv]cal importer calendar no Kalender - [iv}Kal Importer
calendar - add calendar no Kalender - Legg til
@ -40,14 +56,20 @@ calendar holiday management admin no Kalender Feriestyring
calendar preferences calendar no Kalender Preferanser
calendar settings admin no Kalender Innstillinger
calendar-fieldname calendar no Kalender-Feltnavn
can't add alarms in the past !!! calendar no Kan ikke legge til alarmer for passerte hendelser!
canceled calendar no Annullert
change all events for $params['old_owner'] to $params['new_owner']. calendar no Endre alle hendelser for $params['old_owner'] til $parame['new_owner'].
change status calendar no Forandre Status
charset of file calendar no Karaktersett i fil
click %1here%2 to return to the calendar. calendar no Klikk %1her%2 for å returnere til kalenderen.
close the window calendar no Lukk vinduet
compose a mail to all participants after the event is saved calendar no Komponer en mail til alle deltagere etter at hendelsen er lagret
configuration calendar no Konfigurasjon
copy of: calendar no Kopi av:
copy this event calendar no Kopier denne hendelsen
countries calendar no Land
country calendar no Land
create new links calendar no Opprett ny lenke
created by calendar no Opprettet av
csv-fieldname calendar no CSV-Feltnavn
csv-filename calendar no CSV-Filnavn
@ -56,6 +78,7 @@ custom fields and sorting common no Egendefinerte felt og sortering
daily calendar no Daglig
daily matrix view calendar no Daglig matrisevisning
days calendar no dager
days of the week for a weekly repeated event calendar no Ukedag for ukentlig repeterende hendelser
days repeated calendar no dager gjentatt
dayview calendar no Dagvisning
default appointment length (in minutes) calendar no standard avtalelengde (i minutter)
@ -70,11 +93,16 @@ delete selected contacts calendar no Slett valgte kontakter
delete selected participants calendar no Slett valgte deltagere
delete series calendar no Slett en serie
delete single calendar no Slett enkel
delete this alarm calendar no Slett denne alarmen
delete this event calendar no Slett denne hendelsen
delete this exception calendar no Slett dette unntaket
delete this series of recuring events calendar no Slett serie med repeterende hendelser
deleted calendar no Slettet
description calendar no Beskrivelse
determining window width ... calendar no Bestemmer vindusbredde...
disable calendar no Koble ut
disabled calendar no utkoblet
disinvited calendar no Ikke lenger invitert
display interval in day view calendar no Vis intervall i dagvisning
display mini calendars when printing calendar no Vis små kalendere når man printer
display status of events calendar no Vis Status av Hending
@ -85,22 +113,34 @@ do you want to be notified about new or changed appointments? you be notified ab
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 no Ønsker du å motta regelmessige sammendrag av dine avtaler via e-post?<br>Oppsummeringen vil bli sendt til din standard e-post adresse på morgenen samme dag, eller på mandager for ukentlige sammendrag.<br>Den vil bare bli sendt når du har en avtale den dagen eller uken.
do you wish to autoload calendar holidays files dynamically? admin no Ønsker du å automatisk laste kalenderferiefiler?
download calendar no Last ned
download this event as ical calendar no Last ned denne hendelsen som iCal
duration calendar no Varighet
duration of the meeting calendar no Varighet av møtet
edit series calendar no Redigere Serie
edit single calendar no Redigere Enkel
edit this event calendar no Endre hendelse
edit this series of recuring events calendar no Endre denne serien med repeterende hendelser
email notification calendar no E-post Varsel
email notification for %1 calendar no E-post Varsel for %1
empty for all calendar no tøm for alle
enable calendar no Koble inn
enabled calendar no innkoblet
end calendar no Slutt
end date/time calendar no Slutt Dato/Tid
enddate calendar no Sluttdato
enddate / -time of the meeting, eg. for more then one day calendar no Sluttdato / - tid for møtet, dersom mere enn en dag.
enddate of the export calendar no Sluttdato for eksport
ends calendar no slutter
enter output filename: ( .vcs appended ) calendar no Skriv inn utgående filnavn: (.vcs tilføyes)
error adding the alarm calendar no Feil ved forsøk på å sette alarm
error: saving the event !!! calendar no Feil ved forsøk på lagring av hendelse!
event copied - the copy can now be edited calendar no Hendelse kopiert - kopien kan nå endres
event deleted calendar no Hendelse slettet
event details follow calendar no Hendelses Detaljer Følger
event saved calendar no Hendelse lagret
event will occupy the whole day calendar no Hendelse opptar hele dagen
exceptions calendar no Unntak
existing links calendar no Eksisterende lenker
export calendar no Eksporter
export a list of entries in ical format. calendar no Eksporter en liste over oppføringer som iCal format.
extended calendar no Forlenget
@ -108,9 +148,15 @@ extended updates always include the complete event-details. ical's can be import
external participants calendar no Eksterne deltagere
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar no Feil ved sending av melding til '%1' #2 emne='%3', avsender='%4' !!!
fieldseparator calendar no Feltseperator
filename calendar no Filnavn
filename of the download calendar no Filnavn for nedlastingen
find free timeslots where the marked participants are availible for the given timespan calendar no Finn frie tidspunkter hvor de valgte deltagerne er tilgjengelige for angitt varighet
find free timeslots where the selected participants are availible for the given timespan calendar no Finn frie tidssoner hvor de valgte deltagerne er tilgjengelig for angitt varighet.
firstname of person to notify calendar no Fornavn til person som skal varsles
for calendar no for
format of event updates calendar no Format på hendelsesoppdateringer
forward half a month calendar no Forover en halv mnd.
forward one month calendar no Forover en mnd.
fr calendar no F
free/busy calendar no Ledig/Opptatt
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar no Ledig/opptatt: Ukjent bruker '%1', feil passord eller ikke tilgjengelig når du ikke er innlogget !!!
@ -119,6 +165,7 @@ frequency calendar no Hvor ofte
fri calendar no Fre
full description calendar no Full beskrivelse
fullname of person to notify calendar no Hele navnet til person som skal varsles
general calendar no Generell
generate printer-friendly version calendar no Generer printer-vennlig versjon
global categories calendar no Globale kategorier
global public and group public calendar no Global offentlig og gruppe offentlig
@ -136,6 +183,7 @@ holidays calendar no Ferier
hours calendar no timer
how far to search (from startdate) calendar no Hvor langt skal det søkes (fra startdato)
i participate calendar no Jeg deltar
ical calendar no iCal
ical / rfc2445 calendar no iCal / rfc2445
if checked holidays falling on a weekend, are taken on the monday after. calendar no Hvis merket ferie faller på en helg, blir den tatt mandagen etter.
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar no Dersom du ikke setter et passord her vil informasjonen være tilgjengelig for alle som kjenner nettadressen !
@ -145,6 +193,7 @@ import csv-file common no Importer CSV-Fil
interval calendar no Intervall
intervals in day view calendar no Intervaller i dagvisning
intervals per day in planner view calendar no Intervaller per dag i planleggervisning
invalid email-address "%1" for user %2 calendar no Feil e-mailadresse "%1" for bruker %2
invalid entry id. calendar no Feil oppføringsidentifikasjon
last calendar no siste
lastname of person to notify calendar no Etternavn til person som skal varsles
@ -152,10 +201,15 @@ length shown<br>(emtpy for full length) calendar no Lengde vist<br>(tom for full
length<br>(<= 255) calendar no Lengde<br>(<=255)
link calendar no Lenke
link to view the event calendar no Lenke til hendelse
links calendar no Lenker
links, attachments calendar no Lenker, tillegg
list all categories. calendar no Vis alle kategorier.
listview calendar no Listevisning
load [iv]cal calendar no Last [iv]Cal
location calendar no Lokasjon
location to autoload from admin no Lokasjon å automatisk laste fra
location, start- and endtimes, ... calendar no Lokasjon, start- og sluttid,...
mail all participants calendar no Send e-mail til deltagerne
make freebusy information available to not loged in persons? calendar no Skal informasjon om ledig/opptatt være tilgjengelig for personer som ikke er pålogget ?
matrixview calendar no Matrisevisning
minutes calendar no minutter
@ -176,8 +230,10 @@ next day calendar no neste dag
no filter calendar no uten filter
no matches found calendar no Ingen treff funnet
no response calendar no Ingen Respons
non blocking calendar no Ikke blokkerende
notification messages for added events calendar no Varslingsmeldinger for tillagte hendelser
notification messages for canceled events calendar no Varslingsmeldinger for avbrutte hendelser
notification messages for disinvited participants calendar no Varslingsmeldinger for avmeldte deltagere
notification messages for modified events calendar no Varslingsmeldinger for endrede hendelser
notification messages for your alarms calendar no Varslingsmeldinger for dine alarmer
notification messages for your responses calendar no Varslingsmeldinger for dine responser
@ -200,11 +256,12 @@ one week calendar no en uke
one year calendar no et år
only the initial date of that recuring event is checked! calendar no Bare startdato for den repeterende handlingen blir kontrollert !
open todo's: calendar no Åpne gjøremål liste:
or enddate / -time calendar no eller sluttdato / -tid
order calendar no Bestill
overlap holiday calendar no overlapp ferie
participant calendar no Deltaker
participants calendar no Deltakere
participants disinvited from an event calendar no Deltagere avmeldt fra en hendelse
participants, resources, ... calendar no Deltagere, ressurser,....
participates calendar no Deltar
password for not loged in users to your freebusy information? calendar no Passord for ikke påloggede brukere til din freebusy informasjon?
people holiday calendar no personer ferie
@ -215,7 +272,8 @@ planner by user calendar no Planlegger for bruker
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar no Vennligst bekreft, godta, avslå eller etterse endringer i den korresponderende oppføringen i din kalender
please enter a filename !!! calendar no Vennligst angi et filnavn !!!
preselected group for entering the planner calendar no Forhåndsvelg gruppe når du starter planlegger
previous day calendar no foregående dag
previous calendar no Foregående
previous day calendar no Foregående dag
print calendars in black & white calendar no Skriv ut kalendere i svart/hvit
print the mini calendars calendar no Skriv ut de små kalenderne
printer friendly calendar no Printer Vennlig
@ -230,24 +288,33 @@ read this list of methods. calendar no Les denne listen av metoder.
receive email updates calendar no Motta e-post oppdateringer
receive extra information in event mails calendar no Motta ekstra informasjon i hendelses e-post
receive summary of appointments calendar no Motta et sammendrag av avtaler
recurrence calendar no Repeterende
recurring event calendar no periodisk oppføring
refresh calendar no Oppdater
reinstate calendar no Sett inn på ny
rejected calendar no Avslått
repeat day calendar no Gjenta dag
repeat days calendar no Repeterende dag
repeat end date calendar no Gjenta sluttdato
repeat the event until which date (empty means unlimited) calendar no Repeter hendelse til hvilken dato (tom setter ingen grense)
repeat type calendar no Gjenta type
repeating event information calendar no Gjenta oppføringsinformasjon
repeating interval, eg. 2 to repeat every second week calendar no Repeterende interval, feks. 2 for hver annen uke
repetition calendar no Gjentakelse
repetitiondetails (or empty) calendar no Repitasjonsdetaljer (eller tom)
reset calendar no Tilbakestill
resources calendar no Ressurser
rule calendar no Regel
sa calendar no Lø
sat calendar no Lør
saves the changes made calendar no Lagre endringene
saves the event ignoring the conflict calendar no Lagre hendelse uten hensyn til konflikt
scheduling conflict calendar no Planleggingskonflikt
search results calendar no Søkeresultater
select a %1 calendar no Velg en %1
select a time calendar no velg en tid
select resources calendar no Velg ressurser
select who should get the alarm calendar no Velg hvem som skal motta alarmen
selected contacts (%1) calendar no Velg kontakter (%1)
send updates via email common no Send oppdateringer via e-post
send/receive updates via email calendar no Send/Motta oppdateringer via e-post
@ -275,12 +342,15 @@ sorry, this event does not exist calendar no Beklager, denne oppf
sorry, this event does not have exceptions defined calendar no Beklager, denne oppføringen har ingen unntak definert
sort by calendar no Sorter etter
specifies the the number of intervals shown in the planner view. calendar no Spesifiserer antall intervaller som er vist i planlegger visning.
start calendar no Start
start date/time calendar no Start Dato/Tid
start- and enddates calendar no Start- og Slutt-dato
startdate calendar no Startdato
startdate / -time calendar no Startdato /-tid
startdate and -time of the search calendar no Startdato og -tid i søket
startdate of the export calendar no Startdato for eksport
startrecord calendar no Startrekke
status changed calendar no Status endret
su calendar no Sø
submit to repository calendar no Send til Arkiv
sun calendar no Søn
@ -298,6 +368,7 @@ this group that is preselected when you enter the planner. you can change it in
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar no Dette er normalt forårsaket av en feil konfigurert SMTP gjener. Meld fra til din administrator.
this message is sent for canceled or deleted events. calendar no Denne meldingen blir sent for kansellerte eller slettede oppføringer.
this message is sent for modified or moved events. calendar no Denne meldingen er sendt for endrede eller flyttede oppføringer
this message is sent to disinvited participants. calendar no Denne meldingen er til avmeldte deltagere.
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar no Denne meldingen blir sendt til alle deltakere på denne oppføringen som du er eier av, som har bedt om en varsling om nye oppføringer.<br>Du kan bruke forskjellige alternativer som blir byttet med innholdet i denne oppføringen. Den første linjen er overskriften av e-posten.
this message is sent when you accept, tentative accept or reject an event. calendar no Denne meldingen blir sendt når du godtar, forsøksvis godtar, eller avslår en oppføring.
this message is sent when you set an alarm for a certain event. include all information you might need. calendar no Denne meldingen blir sendt når du har satt en Alarm for en spesiell oppføring. Inkluder all den informasjonen du trenger.
@ -320,13 +391,11 @@ today calendar no Idag
translation calendar no Oversettelse
tu calendar no T
tue calendar no Tir
two dayview calendar no to dager
two weeks calendar no to uker
update a single entry by passing the fields. calendar no oppdater en enkel oppføring ved å hoppe over feltene
updated calendar no Oppdatert
use end date calendar no Bruk sluttdato
use the selected time and close the popup calendar no bruk valgt tid og lukk popup-vinduet
view this entry calendar no Vis denne oppføringen
view this event calendar no Vis denne hendelsen
we calendar no O
wed calendar no Ons
week calendar no Uke
@ -335,11 +404,12 @@ weekdays calendar no Ukedager
weekdays to use in search calendar no Ukedager som skal benyttes i søk
weekly calendar no Ukentlig
weekview calendar no Ukevisning
weekview including weekend calendar no Ukevisning inkl. helg
weekview with weekend calendar no Ukevisning inkl. helg
weekview without weekend calendar no Ukevisning eksl. helg
when creating new events default set to private calendar no Når du lager en ny oppføring, sett den som standard til privat
which events do you want to see when you enter the calendar. calendar no Hvilke oppføringer du ønsker å se når du starter kalenderen.
which of calendar view do you want to see, when you start calendar ? calendar no Hvilke kalendervisning ønsker du å se når du starter kalenderen?
whole day calendar no Hele dagen
wk calendar no Uke
work day ends on calendar no Arbeidsdagen ender på
work day starts on calendar no Arbeidsdagen starter på
@ -355,6 +425,7 @@ you do not have permission to read this record! calendar no Du har ikke tilgang
you have %1 high priority events on your calendar today. common no Du har %1 høy prioritets oppføring i din kalender i dag.
you have 1 high priority event on your calendar today. common no Du har 1 høy prioritets oppføring i din kalender i dag.
you have a meeting scheduled for %1 calendar no Du har ett møte planlagt for %1
you have been disinvited from the meeting at %1 calendar no Du har blitt avmeldt fra møtet den %1
you have not entered a title calendar no Du har ikke skrevet inn en tittel
you have not entered a valid date calendar no Du har ikke skrevet inn en gyldig dato
you have not entered a valid time of day calendar no Du har ikke skrevet inn ett gyldig tidspunkt på dagen

View File

@ -0,0 +1,367 @@
%1 %2 in %3 calendar zh-tw 在%3的%1 %2
%1 matches found calendar zh-tw 共有 %1 筆資料符合
%1 records imported calendar zh-tw %1 筆資料匯入
%1 records read (not yet imported, you may go back and uncheck test import) calendar zh-tw 讀取了%1筆資料(還沒匯入,您必須回到上一頁並且取消圈選匯入測試)
(for weekly) calendar zh-tw (每週)
(i/v)cal calendar zh-tw (i/v)Cal
1 match found calendar zh-tw 共有 1 筆資料符合
a calendar zh-tw 一
accept calendar zh-tw 接受
accepted calendar zh-tw 已接受
action that caused the notify: added, canceled, accepted, rejected, ... calendar zh-tw 需要提醒的操作:新增、取消、接受、拒絕、...
add a single entry by passing the fields. calendar zh-tw 依據這個項目建立一個複本
add alarm calendar zh-tw 新增警示
add contact calendar zh-tw 新增聯繫
add or update a single entry by passing the fields. calendar zh-tw 透過傳遞欄位來新增或更新一筆記錄
added calendar zh-tw 新增日期
address book calendar zh-tw 通訊錄
alarm calendar zh-tw 警告
alarm for %1 at %2 in %3 calendar zh-tw 在%3的%1 中 %2警告
alarm management calendar zh-tw 警示管理
alarm-management calendar zh-tw 警告管理員
alarms calendar zh-tw 警告
all categories calendar zh-tw 所有類別
all day calendar zh-tw 所有日期
are you sure you want to delete this country ? calendar zh-tw 您確定要移除這個國家嗎?
are you sure you want to delete this holiday ? calendar zh-tw 您確定要移除這個假日嗎?
are you sure\nyou want to\ndelete these alarms? calendar zh-tw 您確定\n要刪除\n這些提醒
are you sure\nyou want to\ndelete this entry ? calendar zh-tw 您確定要移除\n這筆資料嗎
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar zh-tw 您確定要移除這筆資料嗎?\n所有使用者的資料將一併移除。
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar zh-tw 您確定\n您要刪除這個期間\n\n這將會\n刪除所有使用者的相同事件。
before the event calendar zh-tw 事件之前
brief description calendar zh-tw 簡短敘述
business calendar zh-tw 商務
calendar common zh-tw 行事曆
calendar - [iv]cal importer calendar zh-tw Calendar - [iv]Cal Importer
calendar - add calendar zh-tw 行事曆 - 新增
calendar - edit calendar zh-tw 行事曆 - 編輯
calendar event calendar zh-tw 日曆事件
calendar holiday management admin zh-tw 行事曆假日管理
calendar preferences calendar zh-tw 行事曆喜好設定
calendar settings admin zh-tw 設定行事曆
calendar-fieldname calendar zh-tw 行事曆欄位名稱
canceled calendar zh-tw 取消
change all events for $params['old_owner'] to $params['new_owner']. calendar zh-tw 改變所有$params['old_owner']的事件給$params['new_owner']。
change status calendar zh-tw 修改狀態
charset of file calendar zh-tw 檔案字元編碼
click %1here%2 to return to the calendar. calendar zh-tw 點選 %1這裡%2 回到行事曆
configuration calendar zh-tw 設定
countries calendar zh-tw 國家
country calendar zh-tw 國家
created by calendar zh-tw 建立者
csv-fieldname calendar zh-tw CSV-欄位名稱
csv-filename calendar zh-tw CSV-檔案名稱
custom fields calendar zh-tw 自訂欄位
custom fields and sorting common zh-tw 自訂欄位與排序
daily calendar zh-tw 每日
daily matrix view calendar zh-tw 每日陣列檢視模式
days calendar zh-tw 日
days repeated calendar zh-tw 日重覆
dayview calendar zh-tw 日行事曆
default appointment length (in minutes) calendar zh-tw 預設會議時間長度(分鐘)
default calendar filter calendar zh-tw 預設行事曆過濾器
default calendar view calendar zh-tw 預設行事曆檢視模式
default length of newly created events. the length is in minutes, eg. 60 for 1 hour. calendar zh-tw 預設建立事件的長度(分鐘)預設為60=1小時。
default week view calendar zh-tw 預設週曆模式
defines the size in minutes of the lines in the day view. calendar zh-tw 定義行事曆瀏覽時每個時段的分鐘數
delete a single entry by passing the id. calendar zh-tw 刪除這個事件並且略過這個ID
delete an entire users calendar. calendar zh-tw 刪除整個使用者的行事曆
delete selected contacts calendar zh-tw 刪除聯繫
delete selected participants calendar zh-tw 刪除參與者
delete series calendar zh-tw 刪除連鎖項目
delete single calendar zh-tw 刪除單一項目
deleted calendar zh-tw 刪除日期
description calendar zh-tw 描述
determining window width ... calendar zh-tw 偵測視窗寬度...
disable calendar zh-tw 停用
disabled calendar zh-tw 停用
display interval in day view calendar zh-tw 每日顯示的間隔
display mini calendars when printing calendar zh-tw 列印時顯示小行事曆
display status of events calendar zh-tw 顯示事件的狀態
displayed view calendar zh-tw 已顯示模式
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar zh-tw 顯示您預設的行事曆瀏覽模式在啟始頁(您登入egroupWare第一個看到或是按下您的首頁按鈕的頁面)
do you want a weekview with or without weekend? calendar zh-tw 您是否希望週曆包含週末?
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 zh-tw 您希望系統在約會新增或是修改時主動提醒您嗎?您也會收到包括您自己更新的通知。<br>您可以限制系統只提醒確定的修改。每個項目包含它以上的清單。所有的修改包括標題、描述、參與者的改變,但是不包括參與者的回應。如果事件的擁有者要求任何提醒,他會收到參與者接受或是拒絕的回應。
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 zh-tw 您希望定期透過電子郵件收到系統自動寄出的約會通知概要嗎?<br>這個概要會在每天早上寄出每日概要或是每個星期一寄出每週概要。<br>它只會在那一天或是那一週有約會時寄出。
do you wish to autoload calendar holidays files dynamically? admin zh-tw 您希望動態新增行事曆的假日嗎?
download calendar zh-tw 下載
duration calendar zh-tw 期間
duration of the meeting calendar zh-tw 會議期間
edit series calendar zh-tw 編輯全系列約會
edit single calendar zh-tw 編輯單一約會
email notification calendar zh-tw 電子郵件提醒
email notification for %1 calendar zh-tw %1的電子郵件提醒
empty for all calendar zh-tw 全部空白
enable calendar zh-tw 啟用
enabled calendar zh-tw 啟用
end date/time calendar zh-tw 結束日期時間
enddate calendar zh-tw 結束日期
enddate / -time of the meeting, eg. for more then one day calendar zh-tw 結束日期 / 會議的時間,例如超過一天的會議
ends calendar zh-tw 結束日期
enter output filename: ( .vcs appended ) calendar zh-tw 輸入輸出檔名:(記得加上副檔名.vcs)
event details follow calendar zh-tw 事件細節
exceptions calendar zh-tw 例外
export calendar zh-tw 匯出
export a list of entries in ical format. calendar zh-tw 匯出事件清單成為iCal格式
extended calendar zh-tw 延伸的
extended updates always include the complete event-details. ical's can be imported by certain other calendar-applications. calendar zh-tw 延伸的更新包含完整的事件細節iCal格式可以被其他行事曆軟體讀取。
external participants calendar zh-tw 外部參與者
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar zh-tw 無法傳送尋給'%1'#%2 標題='%3',傳送者='%4'
fieldseparator calendar zh-tw 欄位分隔字元
find free timeslots where the marked participants are availible for the given timespan calendar zh-tw 找尋指定人員的行程是否有空檔
firstname of person to notify calendar zh-tw 需要通知的人名
format of event updates calendar zh-tw 事件更新的格式
fr calendar zh-tw 五
free/busy calendar zh-tw 有空/忙錄
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar zh-tw 狀態:不知名的使用者'%1',錯誤的密碼或是目前無法登入!
freetime search calendar zh-tw 時間空檔查詢
frequency calendar zh-tw 頻率
fri calendar zh-tw 五
full description calendar zh-tw 完整敘述
fullname of person to notify calendar zh-tw 需要通知的全名
generate printer-friendly version calendar zh-tw 產生友善列印版本
global categories calendar zh-tw 全域類別
global public and group public calendar zh-tw 全區公用及群組公用
global public only calendar zh-tw 全區公用
go! calendar zh-tw 出發!
grant calendar access common zh-tw 管理行事曆權限
group planner calendar zh-tw 群組計畫
group public only calendar zh-tw 群組公用
here is your requested alarm. calendar zh-tw 這是您要求的提醒。
high priority calendar zh-tw 高優先權
holiday calendar zh-tw 假日
holiday management calendar zh-tw 假日管理
holiday-management calendar zh-tw 假日管理
holidays calendar zh-tw 假日
hours calendar zh-tw 小時
how far to search (from startdate) calendar zh-tw 搜尋的期間(從開始日期)
i participate calendar zh-tw 我要參與
ical / rfc2445 calendar zh-tw iCal / rfc2445
if checked holidays falling on a weekend, are taken on the monday after. calendar zh-tw 如果選擇的假日剛好是週末,系統會自動移到星期一。
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar zh-tw 如果您在此並未設定密碼,知道網址的人就能夠讀取。
ignore conflict calendar zh-tw 忽略重疊的約會
import calendar zh-tw 匯入
import csv-file common zh-tw 匯入CSV逗點分隔檔案
interval calendar zh-tw 間隔
intervals in day view calendar zh-tw 每日瀏覽的間隔
intervals per day in planner view calendar zh-tw 在計畫瀏覽模式的間隔日數
invalid entry id. calendar zh-tw 錯誤的事件ID。
last calendar zh-tw 最後
lastname of person to notify calendar zh-tw 要提醒的人名(姓)
length shown<br>(emtpy for full length) calendar zh-tw 顯示長度<br>(空白代表完整長度)
length<br>(<= 255) calendar zh-tw 長度<br>(<=255)
link calendar zh-tw 連結
link to view the event calendar zh-tw 事件連結
list all categories. calendar zh-tw 顯示所有分類
load [iv]cal calendar zh-tw Load [iv]Cal
location calendar zh-tw 約會位置
location to autoload from admin zh-tw 自動讀取的位置
make freebusy information available to not loged in persons? calendar zh-tw 將行程資訊開放給未登入的人?
matrixview calendar zh-tw 基礎瀏覽
minutes calendar zh-tw 分鐘
mo calendar zh-tw 一
modified calendar zh-tw 修改日期
modify list of external participants calendar zh-tw 外部參與者的修改清單
mon calendar zh-tw 一
month calendar zh-tw 月
monthly calendar zh-tw 每月
monthly (by date) calendar zh-tw 每月(以日期計)
monthly (by day) calendar zh-tw 每月(以天數計)
monthview calendar zh-tw 月行事曆
needs javascript to be enabled !!! calendar zh-tw 您必須啟用瀏覽器的javascript功能
new entry calendar zh-tw 新增資料
new name must not exist and not be empty!!! calendar zh-tw 新的名稱必須未存在或是不能夠空白!
new search with the above parameters calendar zh-tw 透過上面的參數從新搜尋
next day calendar zh-tw 下一天
no filter calendar zh-tw 沒有規則
no matches found calendar zh-tw 沒有找到符合的結果
no response calendar zh-tw 沒有回應
notification messages for added events calendar zh-tw 新增事件提醒
notification messages for canceled events calendar zh-tw 取消事件提醒
notification messages for modified events calendar zh-tw 修改事件提醒
notification messages for your alarms calendar zh-tw 您的通知事件提醒
notification messages for your responses calendar zh-tw 您的回覆事件提醒
number of intervals per day in planner view calendar zh-tw 在計畫瀏覽模式下的間隔日數
number of months calendar zh-tw 月數
number of records to read (%1) calendar zh-tw 讀取的資料筆數(%1)
observance rule calendar zh-tw 遵循規則
occurence calendar zh-tw 期間
old startdate calendar zh-tw 舊的開始日期
olddate calendar zh-tw 舊的日期
on %1 %2 %3 your meeting request for %4 calendar zh-tw 在 %1 %2 %3 有 %4 的約會
on all changes calendar zh-tw 所有改變
on all modification, but responses calendar zh-tw 所有修改,除了回應
on any time change too calendar zh-tw 任何時間改變
on invitation / cancelation only calendar zh-tw 只有邀請與取消
on participant responses too calendar zh-tw 參與者回應時
on time change of more than 4 hours too calendar zh-tw 在改變超過四小時後
one month calendar zh-tw 一個月
one week calendar zh-tw 一星期
one year calendar zh-tw 一年
only the initial date of that recuring event is checked! calendar zh-tw 只有選取重複事件的初始日期!
open todo's: calendar zh-tw 未完成的待辦事項
or enddate / -time calendar zh-tw 或結束日期 / 時間
order calendar zh-tw 順序
overlap holiday calendar zh-tw 重疊的假日
participant calendar zh-tw 與會者
participants calendar zh-tw 與會者
participates calendar zh-tw 參與
password for not loged in users to your freebusy information? calendar zh-tw 讓未登入使用者檢視您有空或是忙碌的密碼?
people holiday calendar zh-tw 假日
permission denied calendar zh-tw 拒絕存取
planner calendar zh-tw 計畫者
planner by category calendar zh-tw 類別計畫者
planner by user calendar zh-tw 使用者計畫者
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar zh-tw 請確認、同意、拒絕或是檢查您的行事曆中相同的事件異動
please enter a filename !!! calendar zh-tw 請輸入檔案名稱!
preselected group for entering the planner calendar zh-tw 進入計畫管理的預設群組
previous day calendar zh-tw 前一天
print calendars in black & white calendar zh-tw 使用單色列印
print the mini calendars calendar zh-tw 列印迷你行事曆
printer friendly calendar zh-tw 友善列印
privat calendar zh-tw 私人的
private and global public calendar zh-tw 私人及全區公用
private and group public calendar zh-tw 私人及群組公用
private only calendar zh-tw 私人
re-edit event calendar zh-tw 重新編輯約會
read a list of entries. calendar zh-tw 讀取事件列表
read a single entry by passing the id and fieldlist. calendar zh-tw 從傳遞的ID與欄位清單讀取單一事件
read this list of methods. calendar zh-tw 讀取這個方法的列表
receive email updates calendar zh-tw 接收更新郵件提醒
receive extra information in event mails calendar zh-tw 在事件提醒郵件中接收額外的資訊
receive summary of appointments calendar zh-tw 接收約會概要
recurring event calendar zh-tw 循環事件
refresh calendar zh-tw 重新整理
reinstate calendar zh-tw 復原
rejected calendar zh-tw 拒絕
repeat day calendar zh-tw 重覆天數
repeat end date calendar zh-tw 重覆結束日期
repeat type calendar zh-tw 重覆類型
repeating event information calendar zh-tw 約會重覆資訊
repetition calendar zh-tw 重覆約會
repetitiondetails (or empty) calendar zh-tw 重複細節(或空白)
reset calendar zh-tw 重設
rule calendar zh-tw 規則
sa calendar zh-tw 六
sat calendar zh-tw 六
scheduling conflict calendar zh-tw 約會重疊
search results calendar zh-tw 搜尋結果
select a %1 calendar zh-tw 選了一個 %1
select a time calendar zh-tw 選擇一個時間
selected contacts (%1) calendar zh-tw 選擇的聯絡人(%1)
send updates via email common zh-tw 透過電子郵件傳送最新消息
send/receive updates via email calendar zh-tw 透過電子郵件傳送/接收最新消息
set a year only for one-time / non-regular holidays. calendar zh-tw 設定只有特定年會發生的假日
set new events to private calendar zh-tw 設定新事件為私人的
should invitations you rejected still be shown in your calendar ?<br>you can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar! calendar zh-tw 您已經拒絕的邀請還要顯示在您的行事曆中嗎?<br>如果它仍然顯示在您的行事曆中,您可以在事後接受(例如原本有牴觸的行程已經取消)它。
should new events created as private by default ? calendar zh-tw 預設新增的事件是私人的?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar zh-tw 沒有登入的使用者能否知道您現在是有空或是忙碌?您可以設定額外的密碼(不是自己登入的密碼)來避免其他未經授權的人瀏覽。有空或是忙碌的資訊是 iCal 格式,而且只會讓瀏覽的人看到有無行程,他們無法進一步取得行程的詳細資料,像是事件名稱、描述或是地點等。連結到這個功能的網址是 %1 。
should the mini calendars by printed / displayed in the printer friendly views ? calendar zh-tw 要顯示/列印的迷你行事曆需要放在友善列印的頁面中瀏覽嗎?
should the printer friendly view be in black & white or in color (as in normal view)? calendar zh-tw 友善列印要使用單色顯示嗎?
should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ? calendar zh-tw 在每個參與者名稱的後面需要顯示該參與者的狀態(接受、拒絕、...)嗎?
show day view on main screen calendar zh-tw 在首頁顯示當日行程
show default view on main screen calendar zh-tw 在主要畫面顯示預設瀏覽
show high priority events on main screen calendar zh-tw 在首頁顯示高優先權的約會
show invitations you rejected calendar zh-tw 顯示您已經拒絕的邀請
show list of upcoming events calendar zh-tw 顯示即將到來的行程
show next seven days calendar zh-tw 顯示下一週
show only one day calendar zh-tw 只顯示一天
show the calendar of multiple users calendar zh-tw 顯示多人行事曆
show this month calendar zh-tw 顯示這個月
show this week calendar zh-tw 顯示這一週
single event calendar zh-tw 單一事件
sorry, the owner has just deleted this event calendar zh-tw 很抱歉,該約會的擁有者剛移除了該約會
sorry, this event does not exist calendar zh-tw 抱歉,這個事件不存在
sorry, this event does not have exceptions defined calendar zh-tw 報建,這個事件並沒有例外
sort by calendar zh-tw 排序
specifies the the number of intervals shown in the planner view. calendar zh-tw 指定計畫管理瀏覽模式的間隔數
start date/time calendar zh-tw 開始日期/時間
start- and enddates calendar zh-tw 開始與結束日期
startdate calendar zh-tw 開始日期
startdate / -time calendar zh-tw 開始日期 / 時間
startdate and -time of the search calendar zh-tw 搜尋的開始日期 / 時間
startrecord calendar zh-tw 開始紀錄
su calendar zh-tw 日
submit to repository calendar zh-tw 送出到儲藏庫中
sun calendar zh-tw 日
tentative calendar zh-tw 暫定
test import (show importable records <u>only</u> in browser) calendar zh-tw 測試匯入(<u>只有</u>在瀏覽器中顯示可以匯入的紀錄)
text calendar zh-tw 文字
th calendar zh-tw 四
the following conflicts with the suggested time:<ul>%1</ul> calendar zh-tw 下列的約會和您欲加入的約會重疊:<ul>%1</ul>
the user %1 is not participating in this event! calendar zh-tw %1不是這個事件的參與者
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar zh-tw 無法連結到您的新聞主機,<br>請和網路管理者聯絡,協助檢查新聞主機的名稱、使用者代號及密碼。
this day is shown as first day in the week or month view. calendar zh-tw 這一天會在週或是月行事曆中第一個顯示
this defines the end of your dayview. events after this time, are shown below the dayview. calendar zh-tw 這定義了每日行事曆的結束,在這個時間之後的事件會顯示在日行事曆下面。
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar zh-tw 這定義了每日行事曆的開始,在這個時間之前的事件會顯示在日行事曆上面。<br>這個時間也會是新增事件的預設開始時間。
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar zh-tw 這個群組是當您進入計畫管理時預設的群組,您可以在事後修改。
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar zh-tw 這通常是SMTP伺服器設定錯誤所造成請提醒您的管理員。
this message is sent for canceled or deleted events. calendar zh-tw 這個訊息是因為事件的取消或刪除
this message is sent for modified or moved events. calendar zh-tw 這個訊息是因為事件的修改或移動
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar zh-tw 這個訊息會送給您所擁有的所有事件中有設定提醒功能的參與人。<br>您可以使用事件資料的替代值。第一行是郵件的標題。
this message is sent when you accept, tentative accept or reject an event. calendar zh-tw 這個訊息會在您同意、暫時同意或是拒絕一個事件後寄出,
this message is sent when you set an alarm for a certain event. include all information you might need. calendar zh-tw 這個訊息會在您設定事件警示時寄出,包含一些您或需需要的訊息。
this month calendar zh-tw 本月
this week calendar zh-tw 本週
this year calendar zh-tw 今年
three month calendar zh-tw 一季
thu calendar zh-tw 四
til calendar zh-tw 到
timeframe calendar zh-tw 時段
timeframe to search calendar zh-tw 搜尋的時段
title calendar zh-tw 標題
title of the event calendar zh-tw 事件標題
title-row calendar zh-tw 事件-列
to many might exceed your execution-time-limit calendar zh-tw 處理太多資料可能會超過系統允許的處理時間
to-firstname calendar zh-tw -名
to-fullname calendar zh-tw -全名
to-lastname calendar zh-tw -姓
today calendar zh-tw 今天
translation calendar zh-tw 翻譯
tu calendar zh-tw 二
tue calendar zh-tw 二
two dayview calendar zh-tw 兩天模式
two weeks calendar zh-tw 兩週
update a single entry by passing the fields. calendar zh-tw 透過第送的欄位更新一個單一事件
updated calendar zh-tw 更新日期
use end date calendar zh-tw 有結束日期
use the selected time and close the popup calendar zh-tw 使用指定的時間並且關閉彈出視窗
view this entry calendar zh-tw 檢視此筆資料
we calendar zh-tw 三
wed calendar zh-tw 三
week calendar zh-tw 星期
weekday starts on calendar zh-tw 星期開始日
weekdays calendar zh-tw 週日數
weekdays to use in search calendar zh-tw 搜尋的週日數
weekly calendar zh-tw 每週
weekview calendar zh-tw 週行事曆
weekview including weekend calendar zh-tw 週曆包含週末
weekview without weekend calendar zh-tw 週曆不包含週末
when creating new events default set to private calendar zh-tw 新增約會時預設為私人性約會
which events do you want to see when you enter the calendar. calendar zh-tw 當您進入行事曆時您希望看到什麼樣的行事曆。
which of calendar view do you want to see, when you start calendar ? calendar zh-tw 當您開始了一個行事曆您希望看到哪個行事曆?
wk calendar zh-tw 週
work day ends on calendar zh-tw 每日結束時間
work day starts on calendar zh-tw 每日開始時間
workdayends calendar zh-tw 工作日結束於
yearly calendar zh-tw 每年
yearview calendar zh-tw 年行事曆
you can either set a year or a occurence, not both !!! calendar zh-tw 您可以設定一個期間或是星期幾,不能兩者都選!
you can only set a year or a occurence !!! calendar zh-tw 您只可以設定一年或是一個事件!
you do not have permission to add alarms to this event !!! calendar zh-tw 您沒有權限新增這個事件的
you do not have permission to delete this alarm !!! calendar zh-tw 您沒有刪除這個警報的權限!
you do not have permission to enable/disable this alarm !!! calendar zh-tw 您沒有啟用/關閉這個警報的權限!
you do not have permission to read this record! calendar zh-tw 您沒有讀取這個紀錄的權限!
you have %1 high priority events on your calendar today. common zh-tw 您今天有 %1 個高重要性的約會。
you have 1 high priority event on your calendar today. common zh-tw 您今天有 1 個高重要性的約會。
you have a meeting scheduled for %1 calendar zh-tw 您跟%1有個行程
you have not entered a title calendar zh-tw 您沒有輸入約會主題
you have not entered a valid date calendar zh-tw 您沒有輸入正確的日期
you have not entered a valid time of day calendar zh-tw 您沒有輸入正確的時間
you have not entered participants calendar zh-tw 您沒有選擇與會者
you must enter one or more search keywords calendar zh-tw 您必需輸入一個或一個以上的關鍵字
you must select a [iv]cal. (*.[iv]cs) calendar zh-tw 您必須選擇一個 [iv]Cal. (*.[iv]cs)
you need to set either a day or a occurence !!! calendar zh-tw 您必須設定一個日期或是一個期間!
your meeting scheduled for %1 has been canceled calendar zh-tw 您與%1的行程已經取消了
your meeting that had been scheduled for %1 has been rescheduled to %2 calendar zh-tw 您與%1的行程已經重新安排到%2
your suggested time of <b> %1 - %2 </b> conflicts with the following existing calendar entries: calendar zh-tw 您所使用的約會時間 <B> %1 - %2 </B> 和下列的約會重疊:

View File

@ -1,375 +0,0 @@
%1 %2 in %3 calendar zt 在%3的%1 %2
%1 matches found calendar zt 共有 %1 筆資料符合
%1 records imported calendar zt %1 筆資料匯入
%1 records read (not yet imported, you may go back and uncheck test import) calendar zt 讀取了%1筆資料(還沒匯入,您必須回到上一頁並且取消圈選匯入測試)
(for weekly) calendar zt (每週)
(i/v)cal calendar zt (i/v)Cal
1 match found calendar zt 共有 1 筆資料符合
a calendar zt 一
accept calendar zt 接受
accepted calendar zt 已接受
action that caused the notify: added, canceled, accepted, rejected, ... calendar zt 需要提醒的操作:新增、取消、接受、拒絕、...
add a single entry by passing the fields. calendar zt 依據這個項目建立一個複本
add alarm calendar zt 新增警示
add contact calendar zt 新增聯繫
add or update a single entry by passing the fields. calendar zt 透過傳遞欄位來新增或更新一筆記錄
added calendar zt 新增日期
address book calendar zt 通訊錄
alarm calendar zt 警告
alarm for %1 at %2 in %3 calendar zt 在%3的%1 中 %2警告
alarm management calendar zt 警示管理
alarm-management calendar zt 警告管理員
alarms calendar zt 警告
all categories calendar zt 所有類別
all day calendar zt 所有日期
are you sure you want to delete this country ? calendar zt 您確定要移除這個國家嗎?
are you sure you want to delete this holiday ? calendar zt 您確定要移除這個假日嗎?
are you sure\nyou want to\ndelete these alarms? calendar zt 您確定\n要刪除\n這些提醒
are you sure\nyou want to\ndelete this entry ? calendar zt 您確定要移除\n這筆資料嗎
are you sure\nyou want to\ndelete this entry ?\n\nthis will delete\nthis entry for all users. calendar zt 您確定要移除這筆資料嗎?\n所有使用者的資料將一併移除。
are you sure\nyou want to\ndelete this single occurence ?\n\nthis will delete\nthis entry for all users. calendar zt 您確定\n您要刪除這個期間\n\n這將會\n刪除所有使用者的相同事件。
before the event calendar zt 事件之前
brief description calendar zt 簡短敘述
business calendar zt 商務
calendar common zt 行事曆
calendar - [iv]cal importer calendar zt Calendar - [iv]Cal Importer
calendar - add calendar zt 行事曆 - 新增
calendar - edit calendar zt 行事曆 - 編輯
calendar event calendar zt 日曆事件
calendar holiday management admin zt 行事曆假日管理
calendar preferences calendar zt 行事曆喜好設定
calendar settings admin zt 設定行事曆
calendar-fieldname calendar zt 行事曆欄位名稱
canceled calendar zt 取消
change all events for $params['old_owner'] to $params['new_owner']. calendar zt 改變所有$params['old_owner']的事件給$params['new_owner']。
change status calendar zt 修改狀態
charset of file calendar zt 檔案字元編碼
click %1here%2 to return to the calendar. calendar zt 點選 %1這裡%2 回到行事曆
configuration calendar zt 設定
countries calendar zt 國家
country calendar zt 國家
created by calendar zt 建立者
csv-fieldname calendar zt CSV-欄位名稱
csv-filename calendar zt CSV-檔案名稱
custom fields calendar zt 自訂欄位
custom fields and sorting common zt 自訂欄位與排序
daily calendar zt 每日
daily matrix view calendar zt 每日陣列檢視模式
days calendar zt 日
days repeated calendar zt 日重覆
dayview calendar zt 日行事曆
default appointment length (in minutes) calendar zt 預設會議時間長度(分鐘)
default calendar filter calendar zt 預設行事曆過濾器
default calendar view calendar zt 預設行事曆檢視模式
default length of newly created events. the length is in minutes, eg. 60 for 1 hour. calendar zt 預設建立事件的長度(分鐘)預設為60=1小時。
default week view calendar zt 預設週曆模式
defines the size in minutes of the lines in the day view. calendar zt 定義行事曆瀏覽時每個時段的分鐘數
delete a single entry by passing the id. calendar zt 刪除這個事件並且略過這個ID
delete an entire users calendar. calendar zt 刪除整個使用者的行事曆
delete selected contacts calendar zt 刪除聯繫
delete selected participants calendar zt 刪除參與者
delete series calendar zt 刪除連鎖項目
delete single calendar zt 刪除單一項目
deleted calendar zt 刪除日期
description calendar zt 描述
determining window width ... calendar zt 偵測視窗寬度...
disable calendar zt 停用
disabled calendar zt 停用
display interval in day view calendar zt 每日顯示的間隔
display mini calendars when printing calendar zt 列印時顯示小行事曆
display status of events calendar zt 顯示事件的狀態
displayed view calendar zt 已顯示模式
displays your default calendar view on the startpage (page you get when you enter egroupware or click on the homepage icon)? calendar zt 顯示您預設的行事曆瀏覽模式在啟始頁(您登入egroupWare第一個看到或是按下您的首頁按鈕的頁面)
do you want a weekview with or without weekend? calendar zt 您是否希望週曆包含週末?
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 zt 您希望系統在約會新增或是修改時主動提醒您嗎?您也會收到包括您自己更新的通知。<br>您可以限制系統只提醒確定的修改。每個項目包含它以上的清單。所有的修改包括標題、描述、參與者的改變,但是不包括參與者的回應。如果事件的擁有者要求任何提醒,他會收到參與者接受或是拒絕的回應。
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 zt 您希望定期透過電子郵件收到系統自動寄出的約會通知概要嗎?<br>這個概要會在每天早上寄出每日概要或是每個星期一寄出每週概要。<br>它只會在那一天或是那一週有約會時寄出。
do you wish to autoload calendar holidays files dynamically? admin zt 您希望動態新增行事曆的假日嗎?
download calendar zt 下載
duration calendar zt 期間
duration of the meeting calendar zt 會議期間
edit series calendar zt 編輯全系列約會
edit single calendar zt 編輯單一約會
email notification calendar zt 電子郵件提醒
email notification for %1 calendar zt %1的電子郵件提醒
empty for all calendar zt 全部空白
enable calendar zt 啟用
enabled calendar zt 啟用
end date/time calendar zt 結束日期時間
enddate calendar zt 結束日期
enddate / -time of the meeting, eg. for more then one day calendar zt 結束日期 / 會議的時間,例如超過一天的會議
ends calendar zt 結束日期
enter output filename: ( .vcs appended ) calendar zt 輸入輸出檔名:(記得加上副檔名.vcs)
event details follow calendar zt 事件細節
exceptions calendar zt 例外
export calendar zt 匯出
export a list of entries in ical format. calendar zt 匯出事件清單成為iCal格式
extended calendar zt 延伸的
extended updates always include the complete event-details. ical's can be imported by certain other calendar-applications. calendar zt 延伸的更新包含完整的事件細節iCal格式可以被其他行事曆軟體讀取。
external participants calendar zt 外部參與者
failed sending message to '%1' #%2 subject='%3', sender='%4' !!! calendar zt 無法傳送尋給'%1'#%2 標題='%3',傳送者='%4'
fieldseparator calendar zt 欄位分隔字元
find free timeslots where the marked participants are availible for the given timespan calendar zt 找尋指定人員的行程是否有空檔
firstname of person to notify calendar zt 需要通知的人名
format of event updates calendar zt 事件更新的格式
fr calendar zt 五
free/busy calendar zt 有空/忙錄
freebusy: unknow user '%1', wrong password or not availible to not loged in users !!! calendar zt 狀態:不知名的使用者'%1',錯誤的密碼或是目前無法登入!
freetime search calendar zt 時間空檔查詢
frequency calendar zt 頻率
fri calendar zt 五
full description calendar zt 完整敘述
fullname of person to notify calendar zt 需要通知的全名
generate printer-friendly version calendar zt 產生友善列印版本
global categories calendar zt 全域類別
global public and group public calendar zt 全區公用及群組公用
global public only calendar zt 全區公用
go! calendar zt 出發!
grant calendar access common zt 管理行事曆權限
group planner calendar zt 群組計畫
group public only calendar zt 群組公用
here is your requested alarm. calendar zt 這是您要求的提醒。
high priority calendar zt 高優先權
holiday calendar zt 假日
holiday management calendar zt 假日管理
holiday-management calendar zt 假日管理
holidays calendar zt 假日
hours calendar zt 小時
how far to search (from startdate) calendar zt 搜尋的期間(從開始日期)
i participate calendar zt 我要參與
ical / rfc2445 calendar zt iCal / rfc2445
if checked holidays falling on a weekend, are taken on the monday after. calendar zt 如果選擇的假日剛好是週末,系統會自動移到星期一。
if you dont set a password here, the information is available to everyone, who knows the url!!! calendar zt 如果您在此並未設定密碼,知道網址的人就能夠讀取。
if you dont set a password here, the information is availible to everyone, who knows the url!!! calendar zt 如果您沒有在這裡設定密碼,所有的人都可以看到您的資訊!
ignore conflict calendar zt 忽略重疊的約會
import calendar zt 匯入
import csv-file common zt 匯入CSV逗點分隔檔案
import csv-file into calendar calendar zt 匯入CSV檔案到行事曆
interval calendar zt 間隔
intervals in day view calendar zt 每日瀏覽的間隔
intervals per day in planner view calendar zt 在計畫瀏覽模式的間隔日數
invalid entry id. calendar zt 錯誤的事件ID。
last calendar zt 最後
lastname of person to notify calendar zt 要提醒的人名(姓)
length shown<br>(emtpy for full length) calendar zt 顯示長度<br>(空白代表完整長度)
length<br>(<= 255) calendar zt 長度<br>(<=255)
link calendar zt 連結
link to view the event calendar zt 事件連結
list all categories. calendar zt 顯示所有分類
load [iv]cal calendar zt Load [iv]Cal
location calendar zt 約會位置
location to autoload from admin zt 自動讀取的位置
make freebusy information available to not loged in persons? calendar zt 將行程資訊開放給未登入的人?
make freebusy information availible to not loged in persons? calendar zt 讓未登入的使用者瀏覽您目前是有空或是忙碌中?
matrixview calendar zt 基礎瀏覽
minutes calendar zt 分鐘
mo calendar zt 一
modified calendar zt 修改日期
modify list of external participants calendar zt 外部參與者的修改清單
mon calendar zt 一
month calendar zt 月
monthly calendar zt 每月
monthly (by date) calendar zt 每月(以日期計)
monthly (by day) calendar zt 每月(以天數計)
monthview calendar zt 月行事曆
needs javascript to be enabled !!! calendar zt 您必須啟用瀏覽器的javascript功能
new entry calendar zt 新增資料
new name must not exist and not be empty!!! calendar zt 新的名稱必須未存在或是不能夠空白!
new search with the above parameters calendar zt 透過上面的參數從新搜尋
next day calendar zt 下一天
no filter calendar zt 沒有規則
no matches found calendar zt 沒有找到符合的結果
no matches found. calendar zt 沒有找到符合的資料
no repsonse calendar zt 沒有回應
no response calendar zt 沒有回應
notification messages for added events calendar zt 新增事件提醒
notification messages for canceled events calendar zt 取消事件提醒
notification messages for modified events calendar zt 修改事件提醒
notification messages for your alarms calendar zt 您的通知事件提醒
notification messages for your responses calendar zt 您的回覆事件提醒
number of intervals per day in planner view calendar zt 在計畫瀏覽模式下的間隔日數
number of months calendar zt 月數
number of records to read (%1) calendar zt 讀取的資料筆數(%1)
number of records to read (<=200) calendar zt 讀取的資料筆數(<=200)
observance rule calendar zt 遵循規則
occurence calendar zt 期間
old startdate calendar zt 舊的開始日期
olddate calendar zt 舊的日期
on %1 %2 %3 your meeting request for %4 calendar zt 在 %1 %2 %3 有 %4 的約會
on all changes calendar zt 所有改變
on all modification, but responses calendar zt 所有修改,除了回應
on any time change too calendar zt 任何時間改變
on invitation / cancelation only calendar zt 只有邀請與取消
on participant responses too calendar zt 參與者回應時
on time change of more than 4 hours too calendar zt 在改變超過四小時後
one month calendar zt 一個月
one week calendar zt 一星期
one year calendar zt 一年
only the initial date of that recuring event is checked! calendar zt 只有選取重複事件的初始日期!
open todo's: calendar zt 未完成的待辦事項
or enddate / -time calendar zt 或結束日期 / 時間
order calendar zt 順序
overlap holiday calendar zt 重疊的假日
participant calendar zt 與會者
participants calendar zt 與會者
participates calendar zt 參與
password for not loged in users to your freebusy information? calendar zt 讓未登入使用者檢視您有空或是忙碌的密碼?
people holiday calendar zt 假日
permission denied calendar zt 拒絕存取
planner calendar zt 計畫者
planner by category calendar zt 類別計畫者
planner by user calendar zt 使用者計畫者
please confirm,accept,reject or examine changes in the corresponding entry in your calendar calendar zt 請確認、同意、拒絕或是檢查您的行事曆中相同的事件異動
please enter a filename !!! calendar zt 請輸入檔案名稱!
preselected group for entering the planner calendar zt 進入計畫管理的預設群組
previous day calendar zt 前一天
print calendars in black & white calendar zt 使用單色列印
print the mini calendars calendar zt 列印迷你行事曆
printer friendly calendar zt 友善列印
privat calendar zt 私人的
private and global public calendar zt 私人及全區公用
private and group public calendar zt 私人及群組公用
private only calendar zt 私人
re-edit event calendar zt 重新編輯約會
read a list of entries. calendar zt 讀取事件列表
read a single entry by passing the id and fieldlist. calendar zt 從傳遞的ID與欄位清單讀取單一事件
read this list of methods. calendar zt 讀取這個方法的列表
receive email updates calendar zt 接收更新郵件提醒
receive extra information in event mails calendar zt 在事件提醒郵件中接收額外的資訊
receive summary of appointments calendar zt 接收約會概要
recurring event calendar zt 循環事件
refresh calendar zt 重新整理
reinstate calendar zt 復原
reject calendar zt 拒絕
rejected calendar zt 拒絕
repeat day calendar zt 重覆天數
repeat end date calendar zt 重覆結束日期
repeat type calendar zt 重覆類型
repeating event information calendar zt 約會重覆資訊
repetition calendar zt 重覆約會
repetitiondetails (or empty) calendar zt 重複細節(或空白)
reset calendar zt 重設
rule calendar zt 規則
sa calendar zt 六
sat calendar zt 六
scheduling conflict calendar zt 約會重疊
search results calendar zt 搜尋結果
select a %1 calendar zt 選了一個 %1
select a time calendar zt 選擇一個時間
selected contacts (%1) calendar zt 選擇的聯絡人(%1)
send updates via email common zt 透過電子郵件傳送最新消息
send/receive updates via email calendar zt 透過電子郵件傳送/接收最新消息
set a year only for one-time / non-regular holidays. calendar zt 設定只有特定年會發生的假日
set new events to private calendar zt 設定新事件為私人的
should invitations you rejected still be shown in your calendar ?<br>you can only accept them later (eg. when your scheduling conflict is removed), if they are still shown in your calendar! calendar zt 您已經拒絕的邀請還要顯示在您的行事曆中嗎?<br>如果它仍然顯示在您的行事曆中,您可以在事後接受(例如原本有牴觸的行程已經取消)它。
should new events created as private by default ? calendar zt 預設新增的事件是私人的?
should not loged in persons be able to see your freebusy information? you can set an extra password, different from your normal password, to protect this informations. the freebusy information is in ical format and only include the times when you are busy. it does not include the event-name, description or locations. the url to your freebusy information is %1. calendar zt 沒有登入的使用者能否知道您現在是有空或是忙碌?您可以設定額外的密碼(不是自己登入的密碼)來避免其他未經授權的人瀏覽。有空或是忙碌的資訊是 iCal 格式,而且只會讓瀏覽的人看到有無行程,他們無法進一步取得行程的詳細資料,像是事件名稱、描述或是地點等。連結到這個功能的網址是 %1 。
should the mini calendars by printed / displayed in the printer friendly views ? calendar zt 要顯示/列印的迷你行事曆需要放在友善列印的頁面中瀏覽嗎?
should the printer friendly view be in black & white or in color (as in normal view)? calendar zt 友善列印要使用單色顯示嗎?
should the status of the event-participants (accept, reject, ...) be shown in brakets after each participants name ? calendar zt 在每個參與者名稱的後面需要顯示該參與者的狀態(接受、拒絕、...)嗎?
show day view on main screen calendar zt 在首頁顯示當日行程
show default view on main screen calendar zt 在主要畫面顯示預設瀏覽
show high priority events on main screen calendar zt 在首頁顯示高優先權的約會
show invitations you rejected calendar zt 顯示您已經拒絕的邀請
show list of upcoming events calendar zt 顯示即將到來的行程
show next seven days calendar zt 顯示下一週
show only one day calendar zt 只顯示一天
show the calendar of multiple users calendar zt 顯示多人行事曆
show this month calendar zt 顯示這個月
show this week calendar zt 顯示這一週
single event calendar zt 單一事件
sorry, the owner has just deleted this event calendar zt 很抱歉,該約會的擁有者剛移除了該約會
sorry, this event does not exist calendar zt 抱歉,這個事件不存在
sorry, this event does not have exceptions defined calendar zt 報建,這個事件並沒有例外
sort by calendar zt 排序
specifies the the number of intervals shown in the planner view. calendar zt 指定計畫管理瀏覽模式的間隔數
start date/time calendar zt 開始日期/時間
start- and enddates calendar zt 開始與結束日期
startdate calendar zt 開始日期
startdate / -time calendar zt 開始日期 / 時間
startdate and -time of the search calendar zt 搜尋的開始日期 / 時間
startrecord calendar zt 開始紀錄
su calendar zt 日
submit to repository calendar zt 送出到儲藏庫中
sun calendar zt 日
tentative calendar zt 暫定
test import (show importable records <u>only</u> in browser) calendar zt 測試匯入(<u>只有</u>在瀏覽器中顯示可以匯入的紀錄)
text calendar zt 文字
th calendar zt 四
the following conflicts with the suggested time:<ul>%1</ul> calendar zt 下列的約會和您欲加入的約會重疊:<ul>%1</ul>
the user %1 is not participating in this event! calendar zt %1不是這個事件的參與者
there was an error trying to connect to your news server.<br>please contact your admin to check the news servername, username or password. calendar zt 無法連結到您的新聞主機,<br>請和網路管理者聯絡,協助檢查新聞主機的名稱、使用者代號及密碼。
this day is shown as first day in the week or month view. calendar zt 這一天會在週或是月行事曆中第一個顯示
this defines the end of your dayview. events after this time, are shown below the dayview. calendar zt 這定義了每日行事曆的結束,在這個時間之後的事件會顯示在日行事曆下面。
this defines the start of your dayview. events before this time, are shown above the dayview.<br>this time is also used as a default starttime for new events. calendar zt 這定義了每日行事曆的開始,在這個時間之前的事件會顯示在日行事曆上面。<br>這個時間也會是新增事件的預設開始時間。
this group that is preselected when you enter the planner. you can change it in the planner anytime you want. calendar zt 這個群組是當您進入計畫管理時預設的群組,您可以在事後修改。
this is mostly caused by a not or wrongly configured smtp server. notify your administrator. calendar zt 這通常是SMTP伺服器設定錯誤所造成請提醒您的管理員。
this message is sent for canceled or deleted events. calendar zt 這個訊息是因為事件的取消或刪除
this message is sent for modified or moved events. calendar zt 這個訊息是因為事件的修改或移動
this message is sent to every participant of events you own, who has requested notifcations about new events.<br>you can use certain variables which get substituted with the data of the event. the first line is the subject of the email. calendar zt 這個訊息會送給您所擁有的所有事件中有設定提醒功能的參與人。<br>您可以使用事件資料的替代值。第一行是郵件的標題。
this message is sent when you accept, tentative accept or reject an event. calendar zt 這個訊息會在您同意、暫時同意或是拒絕一個事件後寄出,
this message is sent when you set an alarm for a certain event. include all information you might need. calendar zt 這個訊息會在您設定事件警示時寄出,包含一些您或需需要的訊息。
this month calendar zt 本月
this week calendar zt 本週
this year calendar zt 今年
three month calendar zt 一季
thu calendar zt 四
til calendar zt 到
timeframe calendar zt 時段
timeframe to search calendar zt 搜尋的時段
title calendar zt 標題
title of the event calendar zt 事件標題
title-row calendar zt 事件-列
to many might exceed your execution-time-limit calendar zt 處理太多資料可能會超過系統允許的處理時間
to-firstname calendar zt -名
to-fullname calendar zt -全名
to-lastname calendar zt -姓
today calendar zt 今天
translation calendar zt 翻譯
tu calendar zt 二
tue calendar zt 二
two dayview calendar zt 兩天模式
two weeks calendar zt 兩週
update a single entry by passing the fields. calendar zt 透過第送的欄位更新一個單一事件
updated calendar zt 更新日期
use end date calendar zt 有結束日期
use the selected time and close the popup calendar zt 使用指定的時間並且關閉彈出視窗
view this entry calendar zt 檢視此筆資料
we calendar zt 三
wed calendar zt 三
week calendar zt 星期
weekday starts on calendar zt 星期開始日
weekdays calendar zt 週日數
weekdays to use in search calendar zt 搜尋的週日數
weekly calendar zt 每週
weekview calendar zt 週行事曆
weekview including weekend calendar zt 週曆包含週末
weekview without weekend calendar zt 週曆不包含週末
when creating new events default set to private calendar zt 新增約會時預設為私人性約會
which events do you want to see when you enter the calendar. calendar zt 當您進入行事曆時您希望看到什麼樣的行事曆。
which of calendar view do you want to see, when you start calendar ? calendar zt 當您開始了一個行事曆您希望看到哪個行事曆?
wk calendar zt 週
work day ends on calendar zt 每日結束時間
work day starts on calendar zt 每日開始時間
workdayends calendar zt 工作日結束於
year calendar zt 年
yearly calendar zt 每年
yearview calendar zt 年行事曆
you can either set a year or a occurence, not both !!! calendar zt 您可以設定一個期間或是星期幾,不能兩者都選!
you can only set a year or a occurence !!! calendar zt 您只可以設定一年或是一個事件!
you do not have permission to add alarms to this event !!! calendar zt 您沒有權限新增這個事件的
you do not have permission to delete this alarm !!! calendar zt 您沒有刪除這個警報的權限!
you do not have permission to enable/disable this alarm !!! calendar zt 您沒有啟用/關閉這個警報的權限!
you do not have permission to read this record! calendar zt 您沒有讀取這個紀錄的權限!
you have %1 high priority events on your calendar today. common zt 您今天有 %1 個高重要性的約會。
you have 1 high priority event on your calendar today. common zt 您今天有 1 個高重要性的約會。
you have a meeting scheduled for %1 calendar zt 您跟%1有個行程
you have not entered a title calendar zt 您沒有輸入約會主題
you have not entered a valid date calendar zt 您沒有輸入正確的日期
you have not entered a valid time of day calendar zt 您沒有輸入正確的時間
you have not entered participants calendar zt 您沒有選擇與會者
you must enter one or more search keywords calendar zt 您必需輸入一個或一個以上的關鍵字
you must select a [iv]cal. (*.[iv]cs) calendar zt 您必須選擇一個 [iv]Cal. (*.[iv]cs)
you need to set either a day or a occurence !!! calendar zt 您必須設定一個日期或是一個期間!
your meeting scheduled for %1 has been canceled calendar zt 您與%1的行程已經取消了
your meeting that had been scheduled for %1 has been rescheduled to %2 calendar zt 您與%1的行程已經重新安排到%2
your suggested time of <b> %1 - %2 </b> conflicts with the following existing calendar entries: calendar zt 您所使用的約會時間 <B> %1 - %2 </B> 和下列的約會重疊:

View File

@ -12,50 +12,45 @@
/* $Id$ */
$setup_info['calendar']['name'] = 'calendar';
$setup_info['calendar']['version'] = '1.0.0.005';
$setup_info['calendar']['version'] = '1.0.1.009';
$setup_info['calendar']['app_order'] = 3;
$setup_info['calendar']['enable'] = 1;
$setup_info['calendar']['author'] = 'Mark Peters';
$setup_info['calendar']['license'] = 'GPL';
$setup_info['calendar']['description'] =
'Powerful calendar with meeting request system and ACL security.';
$setup_info['calendar']['note'] =
'Originaly based on Webcalendar by <a href="http://www.radix.net/~cknudsen" target="_blank">Craig Knudsen</a>.<p>
';
$setup_info['calendar']['maintainer'] = array(
'Powerful group calendar with meeting request system and ACL security.';
$setup_info['calendar']['note'] =
'The calendar has been completly rewritten for eGroupWare 1.2.';
$setup_info['calendar']['author'] = $setup_info['calendar']['maintainer'] = array(
'name' => 'Ralf Becker',
'email' => 'RalfBecker@outdoor-training.de'
);
$setup_info['calendar']['tables'][] = 'phpgw_cal';
$setup_info['calendar']['tables'][] = 'phpgw_cal_holidays';
$setup_info['calendar']['tables'][] = 'phpgw_cal_repeats';
$setup_info['calendar']['tables'][] = 'phpgw_cal_user';
$setup_info['calendar']['tables'][] = 'phpgw_cal_extra';
$setup_info['calendar']['tables'][] = 'egw_cal';
$setup_info['calendar']['tables'][] = 'egw_cal_holidays';
$setup_info['calendar']['tables'][] = 'egw_cal_repeats';
$setup_info['calendar']['tables'][] = 'egw_cal_user';
$setup_info['calendar']['tables'][] = 'egw_cal_extra';
$setup_info['calendar']['tables'][] = 'egw_cal_dates';
/* The hooks this app includes, needed for hooks registration */
$setup_info['calendar']['hooks'][] = 'add_def_prefs';
$setup_info['calendar']['hooks'][] = 'admin';
$setup_info['calendar']['hooks'][] = 'deleteaccount';
$setup_info['calendar']['hooks'][] = 'email';
$setup_info['calendar']['hooks'][] = 'home';
$setup_info['calendar']['hooks'][] = 'home_day';
$setup_info['calendar']['hooks'][] = 'home_month';
$setup_info['calendar']['hooks'][] = 'home_week';
$setup_info['calendar']['hooks'][] = 'home_year';
$setup_info['calendar']['hooks'][] = 'preferences';
$setup_info['calendar']['hooks'][] = 'settings';
$setup_info['calendar']['hooks']['sidebox_menu'] = 'calendar.uical.sidebox_menu';
$setup_info['calendar']['hooks']['search_link'] = 'calendar.bocal.search_link';
/* Dependencies for this app to work */
$setup_info['calendar']['depends'][] = array(
'appname' => 'phpgwapi',
'versions' => Array('0.9.14','0.9.15','0.9.16','1.0.0','1.0.1')
'versions' => Array('1.0.0','1.0.1','1.2')
);
$setup_info['calendar']['depends'][] = array(
'appname' => 'etemplate',
'versions' => Array('1.0.0','1.0.1')
'versions' => Array('1.0.0','1.0.1','1.2')
);
@ -63,3 +58,12 @@

View File

@ -12,30 +12,29 @@
/* $Id$ */
$phpgw_baseline = array(
'phpgw_cal' => array(
'egw_cal' => array(
'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_groups' => array('type' => 'varchar','precision' => '255'),
'cal_starttime' => array('type' => 'int','precision' => '8'),
'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_endtime' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '2'),
'cal_type' => array('type' => 'varchar','precision' => '10'),
'cal_public' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '1'),
'cal_priority' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '2'),
'cal_public' => array('type' => 'int','precision' => '2','nullable' => False,'default' => '1'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '1'),
'cal_description' => array('type' => 'text'),
'cal_location' => array('type' => 'varchar','precision' => '255'),
'cal_reference' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0')
'cal_reference' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'cal_modifier' => array('type' => 'int','precision' => '4'),
'cal_non_blocking' => array('type' => 'int','precision' => '2','default' => '0')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),
'phpgw_cal_holidays' => array(
'egw_cal_holidays' => array(
'fd' => array(
'hol_id' => array('type' => 'auto','nullable' => False),
'hol_locale' => array('type' => 'char','precision' => '2','nullable' => False),
@ -51,34 +50,35 @@
'ix' => array('hol_locale'),
'uc' => array()
),
'phpgw_cal_repeats' => array(
'egw_cal_repeats' => array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_type' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_use_end' => array('type' => 'int','precision' => '8','default' => '0'),
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'recur_type' => array('type' => 'int','precision' => '2','nullable' => False),
'recur_enddate' => array('type' => 'int','precision' => '8'),
'recur_interval' => array('type' => 'int','precision' => '8','default' => '1'),
'recur_data' => array('type' => 'int','precision' => '8','default' => '1'),
'recur_exception' => array('type' => 'varchar','precision' => '255','default' => '')
'recur_interval' => array('type' => 'int','precision' => '2','default' => '1'),
'recur_data' => array('type' => 'int','precision' => '2','default' => '1'),
'recur_exception' => array('type' => 'text')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),
'phpgw_cal_user' => array(
'egw_cal_user' => array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
'cal_user_id' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'cal_recur_date' => array('type' => 'int','precision' => '8','default' => '0'),
'cal_user_type' => array('type' => 'varchar','precision' => '1','nullable' => False,'default' => 'u'),
'cal_user_id' => array('type' => 'int','precision' => '4','nullable' => False,'default' => '0'),
'cal_status' => array('type' => 'char','precision' => '1','default' => 'A'),
'cal_user_type' => array('type' => 'varchar','precision' => '1','nullable' => False,'default' => 'u')
'cal_quantity' => array('type' => 'int','precision' => '4','default' => '1')
),
'pk' => array('cal_id','cal_user_id','cal_user_type'),
'pk' => array('cal_id','cal_recur_date','cal_user_type','cal_user_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),
'phpgw_cal_extra' => array(
'egw_cal_extra' => array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_extra_name' => array('type' => 'varchar','precision' => '40','nullable' => False),
@ -88,6 +88,16 @@
'fk' => array(),
'ix' => array(),
'uc' => array()
),
'egw_cal_dates' => array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_start' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_end' => array('type' => 'int','precision' => '8','nullable' => False)
),
'pk' => array('cal_id','cal_start'),
'fk' => array(),
'ix' => array(),
'uc' => array()
)
);
?>

View File

@ -13,14 +13,14 @@
function calendar_v0_9_2to0_9_3update_owner($table, $field)
{
$GLOBALS['phpgw_setup']->oProc->query("select distinct($field) from $table");
if ($GLOBALS['phpgw_setup']->oProc->num_rows())
$GLOBALS['egw_setup']->oProc->query("select distinct($field) from $table");
if ($GLOBALS['egw_setup']->oProc->num_rows())
{
while ($GLOBALS['phpgw_setup']->oProc->next_record())
while ($GLOBALS['egw_setup']->oProc->next_record())
{
$owner[count($owner)] = $GLOBALS['phpgw_setup']->oProc->f($field);
$owner[count($owner)] = $GLOBALS['egw_setup']->oProc->f($field);
}
if($GLOBALS['phpgw_setup']->alessthanb($GLOBALS['setup_info']['phpgwapi']['currentver'],'0.9.10pre4'))
if($GLOBALS['egw_setup']->alessthanb($GLOBALS['setup_info']['phpgwapi']['currentver'],'0.9.10pre4'))
{
$acctstbl = 'accounts';
}
@ -30,12 +30,12 @@
}
for($i=0;$i<count($owner);$i++)
{
$GLOBALS['phpgw_setup']->oProc->query("SELECT account_id FROM $acctstbl WHERE account_lid='".$owner[$i]."'");
$GLOBALS['phpgw_setup']->oProc->next_record();
$GLOBALS['phpgw_setup']->oProc->query("UPDATE $table SET $field=".$GLOBALS['phpgw_setup']->oProc->f('account_id')." WHERE $field='".$owner[$i]."'");
$GLOBALS['egw_setup']->oProc->query("SELECT account_id FROM $acctstbl WHERE account_lid='".$owner[$i]."'");
$GLOBALS['egw_setup']->oProc->next_record();
$GLOBALS['egw_setup']->oProc->query("UPDATE $table SET $field=".$GLOBALS['egw_setup']->oProc->f('account_id')." WHERE $field='".$owner[$i]."'");
}
}
$GLOBALS['phpgw_setup']->oProc->AlterColumn($table, $field, array('type' => 'int', 'precision' => 4, 'nullable' => false, 'default' => 0));
$GLOBALS['egw_setup']->oProc->AlterColumn($table, $field, array('type' => 'int', 'precision' => 4, 'nullable' => false, 'default' => 0));
}
@ -117,8 +117,8 @@
$test[] = '0.9.4pre2';
function calendar_upgrade0_9_4pre2()
{
$GLOBALS['phpgw_setup']->oProc->RenameColumn('webcal_entry', 'cal_create_by', 'cal_owner');
$GLOBALS['phpgw_setup']->oProc->AlterColumn('webcal_entry', 'cal_owner', array('type' => 'int', 'precision' => 4, 'nullable' => false));
$GLOBALS['egw_setup']->oProc->RenameColumn('webcal_entry', 'cal_create_by', 'cal_owner');
$GLOBALS['egw_setup']->oProc->AlterColumn('webcal_entry', 'cal_owner', array('type' => 'int', 'precision' => 4, 'nullable' => false));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.4pre3';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
@ -175,18 +175,9 @@
$test[] = '0.9.7pre1';
function calendar_upgrade0_9_7pre1()
{
$db2 = $GLOBALS['phpgw_setup']->db;
$db2 = clone($GLOBALS['egw_setup']->db);
if($GLOBALS['phpgw_setup']->alessthanb($GLOBALS['setup_info']['phpgwapi']['currentver'],'0.9.10pre8'))
{
$appstable = 'applications';
}
else
{
$appstable = 'phpgw_applications';
}
$GLOBALS['phpgw_setup']->oProc->CreateTable('calendar_entry',
$GLOBALS['egw_setup']->oProc->CreateTable('calendar_entry',
Array(
'fd' => array(
'cal_id' => array('type' => 'auto', 'nullable' => false),
@ -208,23 +199,23 @@
)
);
$GLOBALS['phpgw_setup']->oProc->query('SELECT count(*) FROM webcal_entry',__LINE__,__FILE__);
$GLOBALS['phpgw_setup']->oProc->next_record();
if($GLOBALS['phpgw_setup']->oProc->f(0))
$GLOBALS['egw_setup']->oProc->query('SELECT count(*) FROM webcal_entry',__LINE__,__FILE__);
$GLOBALS['egw_setup']->oProc->next_record();
if($GLOBALS['egw_setup']->oProc->f(0))
{
$GLOBALS['phpgw_setup']->oProc->query('SELECT cal_id,cal_owner,cal_duration,cal_priority,cal_type,cal_access,cal_name,cal_description,cal_id,cal_date,cal_time,cal_mod_date,cal_mod_time FROM webcal_entry ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT cal_id,cal_owner,cal_duration,cal_priority,cal_type,cal_access,cal_name,cal_description,cal_id,cal_date,cal_time,cal_mod_date,cal_mod_time FROM webcal_entry ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$cal_id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$cal_owner = $GLOBALS['phpgw_setup']->oProc->f('cal_owner');
$cal_duration = $GLOBALS['phpgw_setup']->oProc->f('cal_duration');
$cal_priority = $GLOBALS['phpgw_setup']->oProc->f('cal_priority');
$cal_type = $GLOBALS['phpgw_setup']->oProc->f('cal_type');
$cal_access = $GLOBALS['phpgw_setup']->oProc->f('cal_access');
$cal_name = $GLOBALS['phpgw_setup']->oProc->f('cal_name');
$cal_description = $GLOBALS['phpgw_setup']->oProc->f('cal_description');
$datetime = mktime(intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_time')),4))),intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_time')),2,2))),intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_time')),0,2))),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_date'),4,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_date'),6,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_date'),0,4)));
$moddatetime = mktime(intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_mod_time')),4))),intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_mod_time')),2,2))),intval(strrev(substr(strrev($GLOBALS['phpgw_setup']->oProc->f('cal_mod_time')),0,2))),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_mod_date'),4,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_mod_date'),6,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_mod_date'),0,4)));
$cal_id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$cal_owner = $GLOBALS['egw_setup']->oProc->f('cal_owner');
$cal_duration = $GLOBALS['egw_setup']->oProc->f('cal_duration');
$cal_priority = $GLOBALS['egw_setup']->oProc->f('cal_priority');
$cal_type = $GLOBALS['egw_setup']->oProc->f('cal_type');
$cal_access = $GLOBALS['egw_setup']->oProc->f('cal_access');
$cal_name = $GLOBALS['egw_setup']->oProc->f('cal_name');
$cal_description = $GLOBALS['egw_setup']->oProc->f('cal_description');
$datetime = mktime(intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_time')),4))),intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_time')),2,2))),intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_time')),0,2))),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_date'),4,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_date'),6,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_date'),0,4)));
$moddatetime = mktime(intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_mod_time')),4))),intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_mod_time')),2,2))),intval(strrev(substr(strrev($GLOBALS['egw_setup']->oProc->f('cal_mod_time')),0,2))),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_mod_date'),4,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_mod_date'),6,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_mod_date'),0,4)));
$db2->query('SELECT groups FROM webcal_entry_groups WHERE cal_id='.$cal_id,__LINE__,__FILE__);
$db2->next_record();
$cal_group = $db2->f('groups');
@ -233,10 +224,10 @@
}
}
$GLOBALS['phpgw_setup']->oProc->DropTable('webcal_entry_groups');
$GLOBALS['phpgw_setup']->oProc->DropTable('webcal_entry');
$GLOBALS['egw_setup']->oProc->DropTable('webcal_entry_groups');
$GLOBALS['egw_setup']->oProc->DropTable('webcal_entry');
$GLOBALS['phpgw_setup']->oProc->CreateTable('calendar_entry_user',
$GLOBALS['egw_setup']->oProc->CreateTable('calendar_entry_user',
Array(
'fd' => array(
'cal_id' => array('type' => 'int', 'precision' => 4, 'nullable' => false, 'default' => '0'),
@ -250,23 +241,23 @@
)
);
$GLOBALS['phpgw_setup']->oProc->query('SELECT count(*) FROM webcal_entry_user',__LINE__,__FILE__);
$GLOBALS['phpgw_setup']->oProc->next_record();
if($GLOBALS['phpgw_setup']->oProc->f(0))
$GLOBALS['egw_setup']->oProc->query('SELECT count(*) FROM webcal_entry_user',__LINE__,__FILE__);
$GLOBALS['egw_setup']->oProc->next_record();
if($GLOBALS['egw_setup']->oProc->f(0))
{
$GLOBALS['phpgw_setup']->oProc->query('SELECT cal_id,cal_login,cal_status FROM webcal_entry_user ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT cal_id,cal_login,cal_status FROM webcal_entry_user ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$cal_id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$cal_login = $GLOBALS['phpgw_setup']->oProc->f('cal_login');
$cal_status = $GLOBALS['phpgw_setup']->oProc->f('cal_status');
$cal_id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$cal_login = $GLOBALS['egw_setup']->oProc->f('cal_login');
$cal_status = $GLOBALS['egw_setup']->oProc->f('cal_status');
$db2->query('INSERT INTO calendar_entry_user(cal_id,cal_login,cal_status) VALUES('.$cal_id.','.$cal_login.",'".$cal_status."')",__LINE__,__FILE__);
}
}
$GLOBALS['phpgw_setup']->oProc->DropTable('webcal_entry_user');
$GLOBALS['egw_setup']->oProc->DropTable('webcal_entry_user');
$GLOBALS['phpgw_setup']->oProc->CreateTable('calendar_entry_repeats',
$GLOBALS['egw_setup']->oProc->CreateTable('calendar_entry_repeats',
Array(
'fd' => array(
'cal_id' => array('type' => 'int', 'precision' => 4, 'default' => '0', 'nullable' => false),
@ -283,18 +274,18 @@
)
);
$GLOBALS['phpgw_setup']->oProc->query('SELECT count(*) FROM webcal_entry_repeats',__LINE__,__FILE__);
$GLOBALS['phpgw_setup']->oProc->next_record();
if($GLOBALS['phpgw_setup']->oProc->f(0))
$GLOBALS['egw_setup']->oProc->query('SELECT count(*) FROM webcal_entry_repeats',__LINE__,__FILE__);
$GLOBALS['egw_setup']->oProc->next_record();
if($GLOBALS['egw_setup']->oProc->f(0))
{
$GLOBALS['phpgw_setup']->oProc->query('SELECT cal_id,cal_type,cal_end,cal_frequency,cal_days FROM webcal_entry_repeats ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT cal_id,cal_type,cal_end,cal_frequency,cal_days FROM webcal_entry_repeats ORDER BY cal_id',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$cal_id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$cal_type = $GLOBALS['phpgw_setup']->oProc->f('cal_type');
if(isset($GLOBALS['phpgw_setup']->oProc->Record['cal_end']))
$cal_id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$cal_type = $GLOBALS['egw_setup']->oProc->f('cal_type');
if(isset($GLOBALS['egw_setup']->oProc->Record['cal_end']))
{
$enddate = mktime(0,0,0,intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_end'),4,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_end'),6,2)),intval(substr($GLOBALS['phpgw_setup']->oProc->f('cal_end'),0,4)));
$enddate = mktime(0,0,0,intval(substr($GLOBALS['egw_setup']->oProc->f('cal_end'),4,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_end'),6,2)),intval(substr($GLOBALS['egw_setup']->oProc->f('cal_end'),0,4)));
$useend = 1;
}
else
@ -302,14 +293,14 @@
$enddate = 0;
$useend = 0;
}
$cal_frequency = $GLOBALS['phpgw_setup']->oProc->f('cal_frequency');
$cal_days = $GLOBALS['phpgw_setup']->oProc->f('cal_days');
$cal_frequency = $GLOBALS['egw_setup']->oProc->f('cal_frequency');
$cal_days = $GLOBALS['egw_setup']->oProc->f('cal_days');
$db2->query('INSERT INTO calendar_entry_repeats(cal_id,cal_type,cal_use_end,cal_end,cal_frequency,cal_days) VALUES('.$cal_id.",'".$cal_type."',".$useend.",".$enddate.",".$cal_frequency.",'".$cal_days."')",__LINE__,__FILE__);
}
}
$GLOBALS['phpgw_setup']->oProc->DropTable('webcal_entry_repeats');
$GLOBALS['phpgw_setup']->oProc->query("UPDATE $appstable SET app_tables='calendar_entry,calendar_entry_user,calendar_entry_repeats' WHERE app_name='calendar'",__LINE__,__FILE__);
$GLOBALS['egw_setup']->oProc->DropTable('webcal_entry_repeats');
$GLOBALS['egw_setup']->oProc->query("UPDATE {$GLOBALS['egw_setup']->applications_table} SET app_tables='calendar_entry,calendar_entry_user,calendar_entry_repeats' WHERE app_name='calendar'",__LINE__,__FILE__);
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.7pre2';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -318,21 +309,21 @@
$test[] = "0.9.7pre2";
function calendar_upgrade0_9_7pre2()
{
$db2 = $GLOBALS['phpgw_setup']->db;
$db2 = $GLOBALS['egw_setup']->db;
$GLOBALS['phpgw_setup']->oProc->RenameColumn('calendar_entry', 'cal_duration', 'cal_edatetime');
$GLOBALS['phpgw_setup']->oProc->query('SELECT cal_id,cal_datetime,cal_owner,cal_edatetime,cal_mdatetime FROM calendar_entry ORDER BY cal_id',__LINE__,__FILE__);
if($GLOBALS['phpgw_setup']->oProc->num_rows())
$GLOBALS['egw_setup']->oProc->RenameColumn('calendar_entry', 'cal_duration', 'cal_edatetime');
$GLOBALS['egw_setup']->oProc->query('SELECT cal_id,cal_datetime,cal_owner,cal_edatetime,cal_mdatetime FROM calendar_entry ORDER BY cal_id',__LINE__,__FILE__);
if($GLOBALS['egw_setup']->oProc->num_rows())
{
while($GLOBALS['phpgw_setup']->oProc->next_record())
while($GLOBALS['egw_setup']->oProc->next_record())
{
$db2->query("SELECT preference_value FROM preferences WHERE preference_name='tz_offset' AND preference_appname='common' AND preference_owner=".$GLOBALS['phpgw_setup']->db->f('cal_owner'),__LINE__,__FILE__);
$db2->query("SELECT preference_value FROM preferences WHERE preference_name='tz_offset' AND preference_appname='common' AND preference_owner=".$GLOBALS['egw_setup']->db->f('cal_owner'),__LINE__,__FILE__);
$db2->next_record();
$tz = $db2->f('preference_value');
$cal_id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$datetime = $GLOBALS['phpgw_setup']->oProc->f('cal_datetime') - ((60 * 60) * $tz);
$mdatetime = $GLOBALS['phpgw_setup']->oProc->f('cal_mdatetime') - ((60 * 60) * $tz);
$edatetime = $datetime + (60 * $GLOBALS['phpgw_setup']->oProc->f('cal_edatetime'));
$cal_id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$datetime = $GLOBALS['egw_setup']->oProc->f('cal_datetime') - ((60 * 60) * $tz);
$mdatetime = $GLOBALS['egw_setup']->oProc->f('cal_mdatetime') - ((60 * 60) * $tz);
$edatetime = $datetime + (60 * $GLOBALS['egw_setup']->oProc->f('cal_edatetime'));
$db2->query('UPDATE calendar_entry SET cal_datetime='.$datetime.', cal_edatetime='.$edatetime.', cal_mdatetime='.$mdatetime.' WHERE cal_id='.$cal_id,__LINE__,__FILE__);
}
}
@ -579,7 +570,7 @@
$test[] = '0.9.11.001';
function calendar_upgrade0_9_11_001()
{
$db2 = $GLOBALS['phpgw_setup']->db;
$db2 = $GLOBALS['egw_setup']->db;
if(extension_loaded('mcal') == False)
{
@ -600,7 +591,7 @@
}
// calendar_entry => phpgw_cal
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal',
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal',
Array(
'fd' => array(
'cal_id' => array('type' => 'auto', 'nullable' => False),
@ -623,12 +614,12 @@
)
);
$GLOBALS['phpgw_setup']->oProc->query('SELECT * FROM calendar_entry',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT * FROM calendar_entry',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$owner = $GLOBALS['phpgw_setup']->oProc->f('cal_owner');
$access = $GLOBALS['phpgw_setup']->oProc->f('cal_access');
$id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$owner = $GLOBALS['egw_setup']->oProc->f('cal_owner');
$access = $GLOBALS['egw_setup']->oProc->f('cal_access');
switch($access)
{
case 'private':
@ -641,22 +632,22 @@
$is_public = 2;
break;
}
$groups = $GLOBALS['phpgw_setup']->oProc->f('cal_group');
$datetime = $GLOBALS['phpgw_setup']->oProc->f('cal_datetime');
$mdatetime = $GLOBALS['phpgw_setup']->oProc->f('cal_mdatetime');
$edatetime = $GLOBALS['phpgw_setup']->oProc->f('cal_edatetime');
$priority = $GLOBALS['phpgw_setup']->oProc->f('cal_priority');
$type = $GLOBALS['phpgw_setup']->oProc->f('cal_type');
$title = $GLOBALS['phpgw_setup']->oProc->f('cal_name');
$description = $GLOBALS['phpgw_setup']->oProc->f('cal_description');
$groups = $GLOBALS['egw_setup']->oProc->f('cal_group');
$datetime = $GLOBALS['egw_setup']->oProc->f('cal_datetime');
$mdatetime = $GLOBALS['egw_setup']->oProc->f('cal_mdatetime');
$edatetime = $GLOBALS['egw_setup']->oProc->f('cal_edatetime');
$priority = $GLOBALS['egw_setup']->oProc->f('cal_priority');
$type = $GLOBALS['egw_setup']->oProc->f('cal_type');
$title = $GLOBALS['egw_setup']->oProc->f('cal_name');
$description = $GLOBALS['egw_setup']->oProc->f('cal_description');
$db2->query("INSERT INTO phpgw_cal(cal_id,owner,groups,datetime,mdatetime,edatetime,priority,cal_type,is_public,title,description) "
. "VALUES($id,$owner,'$groups',$datetime,$mdatetime,$edatetime,$priority,'$type',$is_public,'$title','$description')",__LINE__,__FILE__);
}
$GLOBALS['phpgw_setup']->oProc->DropTable('calendar_entry');
$GLOBALS['egw_setup']->oProc->DropTable('calendar_entry');
// calendar_entry_repeats => phpgw_cal_repeats
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal_repeats',
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal_repeats',
Array(
'fd' => array(
'cal_id' => array('type' => 'int', 'precision' => 8,'nullable' => False),
@ -672,11 +663,11 @@
'uc' => array()
)
);
$GLOBALS['phpgw_setup']->oProc->query('SELECT * FROM calendar_entry_repeats',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT * FROM calendar_entry_repeats',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$id = $GLOBALS['phpgw_setup']->oProc->f('cal_id');
$recur_type = $GLOBALS['phpgw_setup']->oProc->f('cal_type');
$id = $GLOBALS['egw_setup']->oProc->f('cal_id');
$recur_type = $GLOBALS['egw_setup']->oProc->f('cal_type');
switch($recur_type)
{
case 'daily':
@ -695,10 +686,10 @@
$recur_type_num = RECUR_YEARLY;
break;
}
$recur_end_use = $GLOBALS['phpgw_setup']->oProc->f('cal_use_end');
$recur_end = $GLOBALS['phpgw_setup']->oProc->f('cal_end');
$recur_interval = $GLOBALS['phpgw_setup']->oProc->f('cal_frequency');
$days = strtoupper($GLOBALS['phpgw_setup']->oProc->f('cal_days'));
$recur_end_use = $GLOBALS['egw_setup']->oProc->f('cal_use_end');
$recur_end = $GLOBALS['egw_setup']->oProc->f('cal_end');
$recur_interval = $GLOBALS['egw_setup']->oProc->f('cal_frequency');
$days = strtoupper($GLOBALS['egw_setup']->oProc->f('cal_days'));
$recur_data = 0;
$recur_data += (substr($days,0,1)=='Y'?M_SUNDAY:0);
$recur_data += (substr($days,1,1)=='Y'?M_MONDAY:0);
@ -710,10 +701,10 @@
$db2->query("INSERT INTO phpgw_cal_repeats(cal_id,recur_type,recur_use_end,recur_enddate,recur_interval,recur_data) "
. "VALUES($id,$recur_type_num,$recur_use_end,$recur_end,$recur_interval,$recur_data)",__LINE__,__FILE__);
}
$GLOBALS['phpgw_setup']->oProc->DropTable('calendar_entry_repeats');
$GLOBALS['egw_setup']->oProc->DropTable('calendar_entry_repeats');
// calendar_entry_user => phpgw_cal_user
$GLOBALS['phpgw_setup']->oProc->RenameTable('calendar_entry_user','phpgw_cal_user');
$GLOBALS['egw_setup']->oProc->RenameTable('calendar_entry_user','phpgw_cal_user');
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.11.002';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -729,7 +720,7 @@
$test[] = '0.9.11.003';
function calendar_upgrade0_9_11_003()
{
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal_holidays',
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal_holidays',
Array(
'fd' => array(
'locale' => array('type' => 'char', 'precision' => 2,'nullable' => False),
@ -764,8 +755,8 @@
$test[] = '0.9.11.006';
function calendar_upgrade0_9_11_006()
{
$GLOBALS['phpgw_setup']->oProc->DropTable('phpgw_cal_holidays');
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal_holidays',
$GLOBALS['egw_setup']->oProc->DropTable('phpgw_cal_holidays');
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal_holidays',
Array(
'fd' => array(
'hol_id' => array('type' => 'auto','nullable' => False),
@ -787,11 +778,11 @@
$test[] = '0.9.11.007';
function calendar_upgrade0_9_11_007()
{
$GLOBALS['phpgw_setup']->oProc->query('DELETE FROM phpgw_cal_holidays');
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_holidays','mday',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_holidays','month_num',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_holidays','occurence',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_holidays','dow',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->query('DELETE FROM phpgw_cal_holidays');
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_holidays','mday',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_holidays','month_num',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_holidays','occurence',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_holidays','dow',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.11.008';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -807,8 +798,8 @@
$test[] = '0.9.11.009';
function calendar_upgrade0_9_11_009()
{
$GLOBALS['phpgw_setup']->oProc->query('DELETE FROM phpgw_cal_holidays');
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_holidays','observance_rule',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->query('DELETE FROM phpgw_cal_holidays');
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_holidays','observance_rule',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.11.010';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -843,7 +834,7 @@
$test[] = '0.9.13.002';
function calendar_upgrade0_9_13_002()
{
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal','reference',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal','reference',array('type' => 'int', 'precision' => 8,'nullable' => False, 'default' => '0'));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.13.003';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -852,7 +843,7 @@
$test[] = '0.9.13.003';
function calendar_upgrade0_9_13_003()
{
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal_alarm',
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal_alarm',
Array(
'fd' => array(
'alarm_id' => array('type' => 'auto','nullable' => False),
@ -868,8 +859,8 @@
)
);
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal','uid',array('type' => 'varchar', 'precision' => 255,'nullable' => False));
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal','location',array('type' => 'varchar', 'precision' => 255,'nullable' => True));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal','uid',array('type' => 'varchar', 'precision' => 255,'nullable' => False));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal','location',array('type' => 'varchar', 'precision' => 255,'nullable' => True));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.13.004';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -878,7 +869,7 @@
$test[] = '0.9.13.004';
function calendar_upgrade0_9_13_004()
{
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_alarm','alarm_enabled',array('type' => 'int', 'precision' => 4,'nullable' => False, 'default' => '1'));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_alarm','alarm_enabled',array('type' => 'int', 'precision' => 4,'nullable' => False, 'default' => '1'));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.13.005';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -888,18 +879,18 @@
function calendar_upgrade0_9_13_005()
{
$calendar_data = Array();
$GLOBALS['phpgw_setup']->oProc->query('SELECT cal_id, category FROM phpgw_cal',__LINE__,__FILE__);
while($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query('SELECT cal_id, category FROM phpgw_cal',__LINE__,__FILE__);
while($GLOBALS['egw_setup']->oProc->next_record())
{
$calendar_data[$GLOBALS['phpgw_setup']->oProc->f('cal_id')] = $GLOBALS['phpgw_setup']->oProc->f('category');
$calendar_data[$GLOBALS['egw_setup']->oProc->f('cal_id')] = $GLOBALS['egw_setup']->oProc->f('category');
}
$GLOBALS['phpgw_setup']->oProc->AlterColumn('phpgw_cal','category',array('type' => 'varchar', 'precision' => 30,'nullable' => True));
$GLOBALS['egw_setup']->oProc->AlterColumn('phpgw_cal','category',array('type' => 'varchar', 'precision' => 30,'nullable' => True));
@reset($calendar_data);
while($calendar_data && list($cal_id,$category) = each($calendar_data))
{
$GLOBALS['phpgw_setup']->oProc->query("UPDATE phpgw_cal SET category='".$category."' WHERE cal_id=".$cal_id,__LINE__,__FILE__);
$GLOBALS['egw_setup']->oProc->query("UPDATE phpgw_cal SET category='".$category."' WHERE cal_id=".$cal_id,__LINE__,__FILE__);
}
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.13.006';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -908,7 +899,7 @@
$test[] = '0.9.13.006';
function calendar_upgrade0_9_13_006()
{
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_repeats','recur_exception',array('type' => 'varchar', 'precision' => 255, 'nullable' => True, 'default' => ''));
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_repeats','recur_exception',array('type' => 'varchar', 'precision' => 255, 'nullable' => True, 'default' => ''));
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.13.007';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -918,14 +909,14 @@
$test[] = '0.9.13.007';
function calendar_upgrade0_9_13_007()
{
$GLOBALS['phpgw_setup']->oProc->AddColumn('phpgw_cal_user','cal_type',array(
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_cal_user','cal_type',array(
'type' => 'varchar',
'precision' => '1',
'nullable' => False,
'default' => 'u'
));
$GLOBALS['phpgw_setup']->oProc->CreateTable('phpgw_cal_extra',array(
$GLOBALS['egw_setup']->oProc->CreateTable('phpgw_cal_extra',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_extra_name' => array('type' => 'varchar','precision' => '40','nullable' => False),
@ -937,7 +928,7 @@
'uc' => array()
));
$GLOBALS['phpgw_setup']->oProc->DropTable('phpgw_cal_alarm');
$GLOBALS['egw_setup']->oProc->DropTable('phpgw_cal_alarm');
$GLOBALS['setup_info']['calendar']['currentver'] = '0.9.16.002';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -948,7 +939,7 @@
function calendar_upgrade0_9_16_001()
{
// this is to set the default as schema_proc was not setting an empty default
$GLOBALS['phpgw_setup']->oProc->AlterColumn('phpgw_cal_user','cal_type',array(
$GLOBALS['egw_setup']->oProc->AlterColumn('phpgw_cal_user','cal_type',array(
'type' => 'varchar',
'precision' => '1',
'nullable' => False,
@ -965,7 +956,7 @@
$test[] = '0.9.16.002';
function calendar_upgrade0_9_16_002()
{
$GLOBALS['phpgw_setup']->oProc->RefreshTable('phpgw_cal_repeats',array(
$GLOBALS['egw_setup']->oProc->RefreshTable('phpgw_cal_repeats',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_type' => array('type' => 'int','precision' => '8','nullable' => False),
@ -989,7 +980,7 @@
$test[] = '0.9.16.003';
function calendar_upgrade0_9_16_003()
{
$GLOBALS['phpgw_setup']->oProc->RefreshTable('phpgw_cal_user',array(
$GLOBALS['egw_setup']->oProc->RefreshTable('phpgw_cal_user',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
'cal_login' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
@ -1010,7 +1001,7 @@
$test[] = '0.9.16.004';
function calendar_upgrade0_9_16_004()
{
$GLOBALS['phpgw_setup']->oProc->RefreshTable('phpgw_cal_holidays',array(
$GLOBALS['egw_setup']->oProc->RefreshTable('phpgw_cal_holidays',array(
'fd' => array(
'hol_id' => array('type' => 'auto','nullable' => False),
'locale' => array('type' => 'char','precision' => '2','nullable' => False),
@ -1037,14 +1028,14 @@
{
// creates uid's for all entries which do not have unique ones, they are '-@domain.com'
// very old entries even have an empty uid, see 0.9.16.006 update
$GLOBALS['phpgw_setup']->oProc->query("SELECT config_name,config_value FROM phpgw_config WHERE config_name IN ('install_id','mail_suffix') AND config_app='phpgwapi'",__LINE__,__FILE__);
while ($GLOBALS['phpgw_setup']->oProc->next_record())
$GLOBALS['egw_setup']->oProc->query("SELECT config_name,config_value FROM {$GLOBALS['egw_setup']->config_table} WHERE config_name IN ('install_id','mail_suffix') AND config_app='phpgwapi'",__LINE__,__FILE__);
while ($GLOBALS['egw_setup']->oProc->next_record())
{
$config[$GLOBALS['phpgw_setup']->oProc->f(0)] = $GLOBALS['phpgw_setup']->oProc->f(1);
$config[$GLOBALS['egw_setup']->oProc->f(0)] = $GLOBALS['egw_setup']->oProc->f(1);
}
$GLOBALS['phpgw_setup']->oProc->query('UPDATE phpgw_cal SET uid='.
$GLOBALS['phpgw_setup']->db->concat($GLOBALS['phpgw_setup']->db->quote('cal-'),'cal_id',
$GLOBALS['phpgw_setup']->db->quote('-'.$config['install_id'].'@'.
$GLOBALS['egw_setup']->oProc->query('UPDATE phpgw_cal SET uid='.
$GLOBALS['egw_setup']->db->concat($GLOBALS['egw_setup']->db->quote('cal-'),'cal_id',
$GLOBALS['egw_setup']->db->quote('-'.$config['install_id'].'@'.
($config['mail_suffix'] ? $config['mail_suffix'] : 'local'))).
" WHERE uid LIKE '-@%' OR uid=''");
@ -1066,7 +1057,7 @@
function calendar_upgrade0_9_16_007()
{
// update the sequenzes for refreshed tables (postgres only)
$GLOBALS['phpgw_setup']->oProc->UpdateSequence('phpgw_cal_holidays','hol_id');
$GLOBALS['egw_setup']->oProc->UpdateSequence('phpgw_cal_holidays','hol_id');
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.0';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -1076,19 +1067,19 @@
$test[] = '1.0.0';
function calendar_upgrade1_0_0()
{
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','uid','cal_uid');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','owner','cal_owner');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','category','cal_category');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','groups','cal_groups');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','datetime','cal_starttime');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','mdatetime','cal_modified');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','edatetime','cal_endtime');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','priority','cal_priority');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','is_public','cal_public');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','title','cal_title');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','description','cal_description');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','location','cal_location');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal','reference','cal_reference');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','uid','cal_uid');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','owner','cal_owner');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','category','cal_category');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','groups','cal_groups');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','datetime','cal_starttime');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','mdatetime','cal_modified');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','edatetime','cal_endtime');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','priority','cal_priority');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','is_public','cal_public');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','title','cal_title');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','description','cal_description');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','location','cal_location');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal','reference','cal_reference');
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.0.001';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -1098,13 +1089,13 @@
$test[] = '1.0.0.001';
function calendar_upgrade1_0_0_001()
{
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','locale','hol_locale');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','name','hol_name');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','mday','hol_mday');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','month_num','hol_month_num');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','occurence','hol_occurence');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','dow','hol_dow');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_holidays','observance_rule','hol_observance_rule');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','locale','hol_locale');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','name','hol_name');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','mday','hol_mday');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','month_num','hol_month_num');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','occurence','hol_occurence');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','dow','hol_dow');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_holidays','observance_rule','hol_observance_rule');
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.0.002';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -1114,8 +1105,8 @@
$test[] = '1.0.0.002';
function calendar_upgrade1_0_0_002()
{
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_user','cal_login','cal_user_id');
$GLOBALS['phpgw_setup']->oProc->RenameColumn('phpgw_cal_user','cal_type','cal_user_type');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_user','cal_login','cal_user_id');
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_cal_user','cal_type','cal_user_type');
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.0.003';
return $GLOBALS['setup_info']['calendar']['currentver'];
@ -1125,7 +1116,7 @@
$test[] = '1.0.0.003';
function calendar_upgrade1_0_0_003()
{
$GLOBALS['phpgw_setup']->oProc->AlterColumn('phpgw_cal','cal_title',array(
$GLOBALS['egw_setup']->oProc->AlterColumn('phpgw_cal','cal_title',array(
'type' => 'varchar',
'precision' => '255',
'nullable' => False,
@ -1140,7 +1131,7 @@
$test[] = '1.0.0.004';
function calendar_upgrade1_0_0_004()
{
$GLOBALS['phpgw_setup']->oProc->RefreshTable('phpgw_cal_repeats',array(
$GLOBALS['egw_setup']->oProc->RefreshTable('phpgw_cal_repeats',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_type' => array('type' => 'int','precision' => '8','nullable' => False),
@ -1159,4 +1150,300 @@
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.0.005';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.0.005';
function calendar_upgrade1_0_0_005()
{
// change prefix of all calendar tables to egw_
foreach(array('cal','cal_user','cal_repeats','cal_extra','cal_holidays') as $name)
{
$GLOBALS['egw_setup']->oProc->RenameTable('phpgw_'.$name,'egw_'.$name);
}
// create new dates table, with content from the egw_cal table
$GLOBALS['egw_setup']->oProc->CreateTable('egw_cal_dates',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '4','nullable' => False),
'cal_start' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_end' => array('type' => 'int','precision' => '8','nullable' => False)
),
'pk' => array('cal_id','cal_start'),
'fk' => array(),
'ix' => array(),
'uc' => array()
));
$GLOBALS['egw_setup']->oProc->query("INSERT INTO egw_cal_dates SELECT cal_id,cal_starttime,cal_endtime FROM egw_cal");
// drop the fields transfered to the dates table
$GLOBALS['egw_setup']->oProc->DropColumn('egw_cal',array(
'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_groups' => array('type' => 'varchar','precision' => '255'),
'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_endtime' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '2'),
'cal_type' => array('type' => 'varchar','precision' => '10'),
'cal_public' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '1'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '1'),
'cal_description' => array('type' => 'text'),
'cal_location' => array('type' => 'varchar','precision' => '255'),
'cal_reference' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),'cal_starttime');
$GLOBALS['egw_setup']->oProc->DropColumn('egw_cal',array(
'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_groups' => array('type' => 'varchar','precision' => '255'),
'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '2'),
'cal_type' => array('type' => 'varchar','precision' => '10'),
'cal_public' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '1'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '1'),
'cal_description' => array('type' => 'text'),
'cal_location' => array('type' => 'varchar','precision' => '255'),
'cal_reference' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),'cal_endtime');
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.001';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.001';
function calendar_upgrade1_0_1_001()
{
/* done by RefreshTable() anyway
$GLOBALS['egw_setup']->oProc->AddColumn('egw_cal_user','cal_recur_date',array(
'type' => 'int',
'precision' => '8',
'default' => '0'
));*/
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_cal_user',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
'cal_recur_date' => array('type' => 'int','precision' => '8','default' => '0'),
'cal_user_type' => array('type' => 'varchar','precision' => '1','nullable' => False,'default' => 'u'),
'cal_user_id' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0'),
'cal_status' => array('type' => 'char','precision' => '1','default' => 'A')
),
'pk' => array('cal_id','cal_recur_date','cal_user_type','cal_user_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.002';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.002';
function calendar_upgrade1_0_1_002()
{
$GLOBALS['egw_setup']->oProc->DropColumn('egw_cal',array(
'fd' => array(
'cal_id' => array('type' => 'auto','nullable' => False),
'cal_uid' => array('type' => 'varchar','precision' => '255','nullable' => False),
'cal_owner' => array('type' => 'int','precision' => '8','nullable' => False),
'cal_category' => array('type' => 'varchar','precision' => '30'),
'cal_groups' => array('type' => 'varchar','precision' => '255'),
'cal_modified' => array('type' => 'int','precision' => '8'),
'cal_priority' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '2'),
'cal_public' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '1'),
'cal_title' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '1'),
'cal_description' => array('type' => 'text'),
'cal_location' => array('type' => 'varchar','precision' => '255'),
'cal_reference' => array('type' => 'int','precision' => '8','nullable' => False,'default' => '0')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),'cal_type');
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal','cal_owner',array(
'type' => 'int',
'precision' => '4',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal','cal_priority',array(
'type' => 'int',
'precision' => '2',
'nullable' => False,
'default' => '2'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal','cal_public',array(
'type' => 'int',
'precision' => '2',
'nullable' => False,
'default' => '1'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal','cal_reference',array(
'type' => 'int',
'precision' => '4',
'nullable' => False,
'default' => '0'
));
$GLOBALS['egw_setup']->oProc->AddColumn('egw_cal','cal_modifier',array(
'type' => 'int',
'precision' => '4'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.003';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.003';
function calendar_upgrade1_0_1_003()
{
$GLOBALS['egw_setup']->oProc->DropColumn('egw_cal_repeats',array(
'fd' => array(
'cal_id' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_type' => array('type' => 'int','precision' => '8','nullable' => False),
'recur_enddate' => array('type' => 'int','precision' => '8'),
'recur_interval' => array('type' => 'int','precision' => '8','default' => '1'),
'recur_data' => array('type' => 'int','precision' => '8','default' => '1'),
'recur_exception' => array('type' => 'varchar','precision' => '255','default' => '')
),
'pk' => array('cal_id'),
'fk' => array(),
'ix' => array(),
'uc' => array()
),'recur_use_end');
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_repeats','cal_id',array(
'type' => 'int',
'precision' => '4',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_repeats','recur_type',array(
'type' => 'int',
'precision' => '2',
'nullable' => False
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_repeats','recur_interval',array(
'type' => 'int',
'precision' => '2',
'default' => '1'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_repeats','recur_data',array(
'type' => 'int',
'precision' => '2',
'default' => '1'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.004';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.004';
function calendar_upgrade1_0_1_004()
{
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_user','cal_id',array(
'type' => 'int',
'precision' => '4',
'nullable' => False,
'default' => '0'
));
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_user','cal_user_id',array(
'type' => 'int',
'precision' => '4',
'nullable' => False,
'default' => '0'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.005';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.005';
function calendar_upgrade1_0_1_005()
{
$GLOBALS['egw_setup']->oProc->AddColumn('egw_cal_user','cal_quantity',array(
'type' => 'int',
'precision' => '4',
'default' => '1'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.006';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.006';
function calendar_upgrade1_0_1_006()
{
$GLOBALS['egw_setup']->oProc->AddColumn('egw_cal','cal_non_blocking',array(
'type' => 'int',
'precision' => '2',
'default' => '0'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.007';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.007';
function calendar_upgrade1_0_1_007()
{
$GLOBALS['egw_setup']->db->update('egw_cal_repeats',array('recur_exception' => null),array('recur_exception' => ''),__LINE__,__FILE__,'calendar');
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_cal_repeats','recur_exception',array(
'type' => 'text'
));
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.008';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
$test[] = '1.0.1.008';
function calendar_upgrade1_0_1_008()
{
$config =& CreateObject('phpgwapi.config','calendar');
$config_data = $config->read_repository();
if (isset($config_data['fields'])) // old custom fields
{
$customfields = array();
$order = 0;
foreach($config_data['fields'] as $name => $data)
{
if ($name{0} == '#' && !$data['disabled']) // real not-disabled custom field
{
$customfields[substr($name,1)] = array(
'type' => 'text',
'len' => $data['length'].($data['shown'] ? ','.$data['shown'] : ''),
'label' => $data['name'],
'order' => ($order += 10),
);
}
}
if (count($customfields))
{
$config->save_value('customfields',$customfields);
}
$config->delete_value('fields');
$config->save_repository(); // delete_value does not save
}
$GLOBALS['setup_info']['calendar']['currentver'] = '1.0.1.009';
return $GLOBALS['setup_info']['calendar']['currentver'];
}
?>

View File

@ -1,63 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN alarm_management -->
<form id="calendar_alarmform" action="{action_url}" method="post" name="alarmform">
{hidden_vars}
<table id="calendar_alarmform_table" border="0" width="90%" align="center">
{rows}
<tr>
<td colspan="4">
<br>&nbsp;{input_days}&nbsp;{input_hours}&nbsp;{input_minutes}&nbsp;{input_owner}&nbsp;{input_add}<br>&nbsp;
</td>
<td align="right">
{input_cancel}
</td>
</tr>
</table>
</form>
<!-- END alarm_management -->
<!-- BEGIN alarm_headers -->
<tr bgcolor="{tr_color}">
<th align="left" width="25%">{lang_time}</th>
<th align="left" width="30%">{lang_text}</th>
<th align="left" width="25%">{lang_owner}</th>
<th width="10%">{lang_enabled}</th>
<th width="10%">{lang_select}</th>
</tr>
<!-- END alarm_headers -->
<!-- BEGIN list -->
<tr bgcolor="{tr_color}">
<td>
<b>{field}:</b>
</td>
<td>
{data}
</td>
<td>
{owner}
</td>
<td align="center">
{enabled}
</td>
<td align="center">
{select}
</td>
</tr>
<!-- END list -->
<!-- BEGIN hr -->
<tr bgcolor="{th_bg}">
<td colspan="5" align="center">
<b>{hr_text}</b>
</td>
</tr>
<!-- END hr -->
<!-- BEGIN buttons -->
<tr>
<td colspan="6" align="right">
{enable_button}&nbsp;{disable_button}&nbsp;{delete_button}
</td>
</tr>
<!-- END buttons -->

View File

@ -1,10 +1,30 @@
/* CSS Document */
/* $Id$ */
/*
* CSS settings for the new uiviews code
*/
/******************************************************************
* CSS settings for the day, week and month view (timeGridWidget) *
******************************************************************/
.redItalic { color: red; font-style: italic; }
.size120b { font-size: 120%; font-weight: bold; }
/* marks a day in the colum-header as today
*/
.calToday{
background: #ffffcc;
}
/* marks a day in the colum-header as holiday
*/
.calHoliday{
background: #dac0c0;
}
/* marks a day in the column-header additionaly as birthday of some contact,
* it should work together with the backgrounds of calToday, calHoliday, th, row_on and row_off
*/
.calBirthday,.calBirthday a{
color: black;
font-weight: bold;
font-style: italic;
}
/* timeGridWidget, contains timeRow's and dayCol's
*/
@ -12,20 +32,21 @@
position: relative;
top: 0px;
left: 0px;
border:1px solid gray;
margin-top: 20px; /* contains the dayColHeader */
border:1px solid silver;
width: 100%;
/* set via inline style on runtime:
* width:
* height:
*/
}
/* single row in the time-line, always used in conjunction with row_{on|off}, you dont need to set a bgcolor, but you can
*/
.calTimeRow,.calTimeRowOff{
position: relative;
position: absolute;
width: 100%;
/* set via inline style on runtime:
* height:
* top:
*/
}
.calTimeRow{
@ -47,6 +68,8 @@
position: absolute;
top: 0px;
height: 100%;
left: 50px;
right: 0px;
/* set via inline style on runtime:
* left: width(calTimeRowTime)
* width: 100% - width(calTimeRowTime)
@ -63,28 +86,24 @@
* left:
* width:
*/
border-left: 1px solid gray;
border-left: 1px solid silver;
}
/* header for the dayCol
*/
.calDayColHeader,.calGridHeader{
position: absolute;
top: -20px;
top: 0px;
width: 100%;
text-align: center;
font-size: 100%;
white-space: nowrap;
border: 1px solid gray;
border-bottom: 1px solid gray;
border-right: 1px solid gray;
height: 16px;
left: -1px;
padding-top: 2px;
}
.calToday{
background: #ffffcc;
}
.calHoliday{
background: #dac0c0;
line-height: 16px;
left: 0px;
z-index: 10;
}
.calViewUserNameBox {
@ -130,20 +149,20 @@
* left:
* width:
*/
/* border: 1px dotted red; */
}
/* contains one event: header-row & -body
*/
.calEvent,.calEvent:hover{
.calEvent,.calEventPrivate{
position: absolute;
/* background-color: #ffffC0;*/
left: 0px;
width: 100%;
overflow: hidden;
z-index: 20;
/* set via inline style on runtime:
* top: depending on startime
* top: depending on length
* height: depending on length
* background-color: depending on category
*/
}
.calEvent:hover{
@ -152,6 +171,18 @@
cursor: hand;
}
.calAddEvent{
position: absolute;
width: 100%;
z-index: 10;
}
.calAddEvent:hover{
background-color: #D2D7FF;
cursor: pointer;
cursor: hand;
}
/* header-row of the event
*/
.calEventHeader,.calEventHeaderSmall{
@ -189,286 +220,153 @@
font-size: 110%;
}
/* cal day-view's todo column
*/
.calDayToDos {
width: 250px;
text-align: center;
}
/* header row
/* table of the dayView containing 2 cols: 1) day-view, 2) todos
*/
.calDayView{
width: 100%;
}
/* calDayTods is the day-view's todo column, containing the calDayTodoHeader and the calDayTodoTable
*/
.calDayTodos .calDayTodosHeader {
margin: 0px;
padding: 2px;
font-weight: bold;
}
/* div containing the table with the ToDo's
*/
.calDayTodos .calDayTodosTable {
overflow: auto;
max-height: 400px;
}
.calDayTodos {
width: 250px;
text-align: center;
margin-left: 10px;
border: 1px solid silver;
}
/*
* From here on, settings for the "old" uicalendar code
/******************************************************
* CSS settings for the planner views (plannerWidget) *
******************************************************/
/* plannerWidget represents the whole planner, consiting of the plannerHeader and multiple plannerRowWidgets
*/
.to_continue
{
font-size: 9px;
.plannerWidget {
position: relative;
top: 0px;
left: 0px;
width: 99.5%;
border: 1px solid gray;
padding-right: 3px;
}
A.minicalendar
{
color: #000000;
font-size: 9px;
/* plannerHeader contains a plannerHeaderTitle and multiple plannerHeaderRows
*/
.plannerHeader {
position: relative;
top: 0px;
left: 0px;
width: 100%;
}
A.bminicalendar
{
color: #336699;
font-style: italic;
font-weight: bold;
font-size: 9px;
/* plannerRowWidget contains a plannerRowHeader and multiple eventRowWidgets in an eventRows
*/
.plannerRowWidget {
position: relative;
top: 0px;
left: 0px;
width: 100%;
}
A.minicalendargrey
{
color: #999999;
font-size: 10px;
/* plannerScale represents a scale-row of the plannerHeader, containing multiple planner{Day|Week|Month}Scales
*/
.plannerScale,.plannerScaleDay{
position: relative;
top: 0px;
left: 0%;
width: 100%;
height: 20px;
line-height: 20px;
}
.plannerScaleDay {
height: 28px;
line-height: 14px;
}
.plannerDayScale,.plannerMonthScale,.plannerWeekScale,.plannerHourScale {
position: absolute;
top: 0px;
/* left+width: is set by the code on runtime */
text-align: center;
height: 100%;
border: 1px solid white;
/* set via inline style on runtime:
* left:
* width:
*/
}
.plannerHourScale {
font-size: 90%;
}
.plannerDayScale {
font-size: 90%;
}
.plannerWeekScale {
line-height: 20px;
}
.plannerMonthScale {
font-weight: bold;
}
A.bminicalendargrey
{
color: #336699;
font-style: italic;
font-size:10px;
}
A.minicalhol
{
padding-left:3px;
padding-right:3px;
background: #dab0b0;
color: #000000;
font-size: 10px;
}
A.bminicalhol
{
padding-left:3px;
padding-right:3px;
background: #dab0b0;
color: #336699;
font-size: 10px;
}
A.minicalgreyhol
{
padding-left:3px;
padding-right:3px;
background: #dab0b0;
color: #999999;
font-size: 10px;
}
A.bminicalgreyhol
{
padding-left:3px;
padding-right:3px;
background: #dab0b0;
color: #999999;
font-size: 10px;
}
.event-on
{
background: #D3DCE3;
border: #E8F0F0 1px solid;
}
.event-off
{
background: #E8F0F0;
border: #D3DCE3 1px solid;
}
.event-holiday
{
font-size: 100%;
background: #dac0c0;
color:#000000;
.plannerDayScale img,.plannerWeekScale img,.plannerMonthScale img {
vertical-align: middle;
}
.time
{
background: #D3DCE3;
color:#000000;
font-size: 10px;
font-weight: bold;
vertical-align: middle;
width: 5.2%;
text-align: right;
padding-right: 5px;
line-height: 11px;
border: #E8F0F0 1px solid;
/* plannerRowHeader contains the user or category name of the plannerRowWidget
*/
.plannerRowHeader, .plannerHeaderTitle {
position: absolute;
top: 0px;
left: 0%;
width: 15%; /* need to be identical for plannerRowHeader and plannerHeaderTitle and match left of eventRows/plannerHeaderRows */
height: 100%;
line-height: 20px;
border: 1px solid white;
}
/* eventRows contain multiple eventRowWidgets
*/
.eventRows, .plannerHeaderRows {
position: relative;
top: 0px;
left: 15%; /* need to be identical for eventRows and plannerHeaderRows and match width of plannerRowHeader/plannerHeaderTitle */
width: 85%;
}
.planner-cell
{
/* eventRowWidget contains non-overlapping events
*/
.eventRowWidget {
position: relative;
top: 0px;
left: 0px;
width: 100%;
height: 20px;
border: 1px solid white;
}
.plannerEvent,.plannerEventPrivate{
position: absolute;
top: 0px;
height: 100%;
overflow: hidden;
z-index: 20;
border: 1px solid black;
/* set via inline style on runtime:
* left: depending on startime
* width: depending on length
* background-color: depending on category
*/
}
.plannerEvent img,.plannerEventPrivate img {
padding-top: 2px;
}
.plannerEvent:hover{
cursor: pointer;
cursor: hand;
border: thin solid black;
}
/* common */
.calendar_link_print
{
text-align: center;
font-size: 10px;
}
//Mini Calendar
.calendar_minical_table
{
width: 180px;
font-weight: bold;
}
.calendar_minical_daytable
{
width: 100%;
}
.calendar_minical_dayname
{
font-size: 9px;
text-align: right;
}
.calendar_minical_hrule
{
width: 96%;
}
/* Header */
.calendar_dropbuttons
{
align: center;
text-align: center;
vertical-align: bottom;
font-weight: bold;
font-size: 8px;
}
.calendar-weekidentifier
{
font-size:16px;
font-weight: bold;
text-align: center;
}
.calendar_header
{
font-size: 16px;
font-weight: bold;
text-align: center;
}
.calendar_dayview_table_header
{
font-size: 13px;
font-weight: bold;
text-align: center;
}
.calendar_dayview_todo_header
{
margin: 0px;
padding: 2px;
font-weight: bold;
}
/* week view */
.calendar_week_identifier_table
{
border: 0px solid black;
width: 100%;
}
.calendar_week_identifier
{
font-size: 13px;
text-align: center;
font-weight: bold;
}
.calendar_weekview_daytitle
{
font-weight: bold;
font-size: 12px;
background: #D3DCE3;
}
.calendar_m_w_table
{
table-layout:fixed;
overflow:auto;
height: 100%;
width: 100%;
border: 0px #000000 solid;
}
.calendar_m_w_table_row
{
height: 80px;
}
.calendar_m_w_tablecell
{
vertical-align: top;
padding-left: 4px;
padding-right: 4px;
padding-bottom: 6px;
}
A.event_entry
{
font-size:10px;
}
/* month view */
.calendar_month_identifier
{
font-size:14px;
font-weight: bold;
}
.calendar_user_identifier
{
font-size:12px;
color: #009999;
font-weight: bold;
}
.calendar_week_minical_table
{
width:100%;
border: 0px solid #000000
}
.calendar_weekinfo
{
color: #000000;
padding-left: 2px;
padding-right: 2px;
font-size: 10px;
font-weight: bold;
font-style: italic;
}

View File

@ -1,7 +1,7 @@
<!-- BEGIN filename -->
<TR>
<TD>{lang_csvfile}</td>
<td><INPUT NAME="csvfile" SIZE=30 TYPE="file" VALUE="{csvfile}"></td>
<tr>
<td>{lang_csvfile}</td>
<td><input name="csvfile" SIZE=30 type="file" value="{csvfile}"></td>
</tr>
<tr>
<td>{lang_fieldsep}</td>
@ -14,8 +14,11 @@
</td>
</tr>
<tr><td>&nbsp;</td>
<td><INPUT NAME="convert" TYPE="submit" VALUE="{submit}"></TD>
</TR>
<td><input name="convert" type="submit" value="{submit}"></td>
</tr>
<tr>
<td colspan="2">{lang_help}</td>
</tr>
<!-- END filename -->
<!-- BEGIN fheader -->
@ -29,21 +32,21 @@
<!-- BEGIN fields -->
<tr>
<td>{csv_field}</td>
<td><SELECT name="cal_fields[{csv_idx}]">{cal_fields}</select></td>
<td><select name="cal_fields[{csv_idx}]">{cal_fields}</select></td>
<td><input name="trans[{csv_idx}]" size=60 value="{trans}"></td>
</tr>
<!-- END fields -->
<!-- BEGIN ffooter -->
<tr>
<td rowspan="2" valign="middle" nowrap><br>{submit}</TD>
<td rowspan="2" valign="middle" nowrap><br>{submit}</td>
<td colspan="2"><br>
{lang_start} <INPUT name="start" type="text" size="5" value="{start}"> &nbsp; &nbsp;
{lang_max} <INPUT name="max" type="text" size="3" value="{max}"><td>
{lang_start} <input name="start" type="text" size="5" value="{start}"> &nbsp; &nbsp;
{lang_max} <input name="max" type="text" size="3" value="{max}"><td>
</tr>
<tr>
<td colspan="2"><INPUT name="debug" type="checkbox" value="1"{debug}> {lang_debug}</td>
</TR>
<td colspan="2"><input name="debug" type="checkbox" value="1"{debug}> {lang_debug}</td>
</tr>
<tr><td colspan="3">&nbsp;<p>
{help_on_trans}
</td></tr>
@ -55,20 +58,15 @@
{log}<p>
{anz_imported}
</td>
</TR>
</tr>
<!-- END imported -->
<!-- BEGIN import -->
<br/>
<center>
<form {enctype} action="{action_url}" method="post">
<table>
{rows}
</table>
{hiddenvars}
</form>
</center>
<br />
<form {enctype} action="{action_url}" method="post">
{hiddenvars}
<table align="center">
{rows}
</table>
</form>
<!-- END import -->

View File

@ -1,46 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN custom_fields -->
{lang_error}<br>
<form action="{action_url}" method="post">
{hidden_vars}
<center>
<table border="0" width="90%">
<tr class="th">
<th align="left" width="30%">{lang_name}</th>
<th>{lang_length}</th>
<th>{lang_shown}</th>
<th>{lang_order}</th>
<th>{lang_title}</th>
<th>{lang_disabled}</th>
<th>&nbsp;</th>
</tr>
{rows}
<tr class="th">
<td>{name}</td>
<td align="center">{length}</td>
<td align="center">{shown}</td>
<td align="center">{order}</td>
<td align="center">{title}</td>
<td align="center">{disabled}</td>
<td align="center">{button}</td>
</tr>
<tr>
<td>{save_button} &nbsp; {cancel_button}</td>
</tr>
</table>
</center>
</form>
<br>
<!-- END custom_fields -->
<!-- BEGIN row -->
<tr bgcolor="{tr_color}">
<td>{name}</td>
<td align="center">{length}</td>
<td align="center">{shown}</td>
<td align="center">{order}</td>
<td align="center">{title}</td>
<td align="center">{disabled}</td>
<td align="center">{button}</td>
</tr>
<!-- END row -->

View File

@ -1,47 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN day -->
{printer_friendly}
<table id="calendar_dayview_table" class="calendar_dayview_table" border="0" width="100%">
<tr>
<td valign="top" width="70%">
<table id="calendar_dayview1" border="0" width=100%>
<tr>
<td class="calendar_dayview_table_header">
{date}&nbsp;<span class="calendar_user_identifier">:&nbsp;{username}&nbsp;:</span>
<br />
</td>
</tr>
{day_events}
</table>
<p align="center">{print}</p>
</td>
<td align="center" valign="top">
<table id="calendar_dayview2" width="100%">
<tr>
<td align="center">
{small_calendar}
</td>
</tr>
<tr>
<td align="center">
<div class="th">
<p class="calendar_dayview_todo_header">{lang_todos}</p>
{todos}
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- END day -->
<!-- BEGIN day_event -->
<tr>
<td>
{daily_events}
</td>
</tr>
<!-- END day_event -->

View File

@ -1,25 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN day -->
<div class="th">
<table class="calendar_dayview_maintable" width="100%" cellpadding="0">
{row}
</table>
</div>
<!-- END day -->
<!-- BEGIN day_row -->
<tr>{time}{event}
</tr>
<!-- END day_row -->
<!-- BEGIN day_event_on -->
<td class="event-on"{extras}>&nbsp;{event}</td>
<!-- END day_event_on -->
<!-- BEGIN day_event_off -->
<td class="event-off"{extras}>&nbsp;{event}</td>
<!-- END day_event_off -->
<!-- BEGIN day_event_holiday -->
<td class="event-holiday"{extras}>&nbsp;{event}</td>
<!-- END day_event_holiday -->
<!-- BEGIN day_time -->
<td class="time" nowrap>{open_link}{time}{close_link}</td>
<!-- END day_time -->

View File

@ -1,29 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN day -->
<div class="event-off">
<table border="0" width="100%" cellpadding="0">
<tr>
<td class="event-on">
{row}
</td>
</tr>
</table>
</div>
<!-- END day -->
<!-- BEGIN day_row -->
<font style="font-size: 8pt;">{event}</font>
<!-- END day_row -->
<!-- BEGIN day_event_on -->
<font class="event-on">{event}</font>
<!-- END day_event_on -->
<!-- BEGIN day_event_off -->
<font class="event-on">{event}</font>
<!-- END day_event_off -->
<!-- BEGIN day_event_holiday -->
{event}
<!-- END day_event_holiday -->
<!-- BEGIN day_time -->
{time}
<!--<td class="time" nowrap>{open_link}{time}{close_link}</td>-->
<!-- END day_time -->

View File

@ -1,43 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN edit_entry -->
<center>
<font color="#000000" face="{font}">
<form action="{action_url}" method="post" name="app_form">
{common_hidden}
<table border="0" width="90%">
<tr>
<td colspan="2">
<center><font size="+1"><b>{errormsg}</b></font></center>
</td>
</tr>
{row}
<tr>
<td>
<table><tr valign="top">
<td>
<div style="padding-right: 2px">
<input style="font-size:10px" type="submit" value="{submit_button}"></div></form>
</td>
<td>{cancel_button}</td>
</tr></table>
</td>
<td valign="top" align="right">{delete_button}</td>
</tr>
</table>
</font>
</center>
<!-- END edit_entry -->
<!-- BEGIN list -->
<tr bgcolor="{tr_color}">
<td valign="top" width="35%">&nbsp;<b>{field}:</b></td>
<td valign="top" width="65%">{data}</td>
</tr>
<!-- END list -->
<!-- BEGIN hr -->
<tr bgcolor="{tr_color}">
<td colspan="2">
{hr_text}
</td>
</tr>
<!-- END hr -->

View File

@ -2,43 +2,49 @@
<!-- $Id$ -->
<overlay>
<template id="calendar.edit.general" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%">
<grid width="100%" height="200">
<columns>
<column width="95"/>
<column width="35%"/>
<column/>
</columns>
<rows>
<row class="row">
<description options=",,,start" value="Start Date/Time"/>
<date-time id="start"/>
<description options=",,,start" value="Start"/>
<date-time id="start" needed="1"/>
<checkbox id="whole_day" label="whole day" statustext="Event will occupy the whole day" options=",, ,disable"/>
</row>
<row class="row">
<description options=",,,end" value="End Date/Time"/>
<date-time id="end"/>
<description options=",,,end" value="End"/>
<date-time id="end" needed="1"/>
<button label="Freetime search" id="freetime" statustext="Find free timeslots where the selected participants are availible for the given timespan" onclick="window.open(egw::link('/index.php','menuaction=calendar.uiforms.freetimesearch')+values2url(this.form,'start,end,participants,recur_type,whole_day'),'ft_search','dependent=yes,width=700,height=500,scrollbars=yes,status=yes'); return false;"/>
</row>
<row class="row">
<description options=",,,location" value="Location"/>
<textbox size="80" maxlength="255" id="location"/>
<textbox size="80" maxlength="255" id="location" span="all"/>
</row>
<row class="row" valign="top">
<row class="row" valign="top" height="60">
<description options=",,,category" value="Category"/>
<listbox type="select-cat" rows="3" id="category"/>
<listbox type="select-cat" rows="3" id="category" span="all"/>
</row>
<row class="row">
<description options=",,,priority" value="Priority"/>
<menulist>
<menupopup type="select-priority" id="priority"/>
</menulist>
<hbox span="all" orient=",0,0">
<menulist>
<menupopup type="select-priority" id="priority"/>
</menulist>
<checkbox label="non blocking" statustext="A non blocking event will not conflict with other events" id="non_blocking" options=",, ,disable"/>
</hbox>
</row>
<row class="row">
<description options=",,,public" value="Private"/>
<checkbox options="0,1" id="public"/>
<checkbox options="0,1" id="public" span="all"/>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.description" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%">
<grid width="100%" height="200">
<columns>
<column width="95"/>
<column/>
@ -51,88 +57,215 @@
</rows>
</grid>
</template>
<template id="resources.resource_selectbox" template="" lang="" group="0" version="">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row valign="bottom">
<listbox rows="14+" id="selectbox"/>
<button onclick="window.open(egw::link('/index.php','menuaction=resources.ui_resources.select'),'','dependent=yes,width=600,height=450,scrollbars=yes,status=yes'); return false;" id="button" label="Add resources" image="navbar" needed="1"/>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.participants" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%">
<template id="calendar.edit.participants" template="" lang="" group="0" version="1.0.1.002">
<grid width="100%" height="200" class="row_on" overflow="auto">
<columns>
<column width="95"/>
<column/>
<column/>
<column/>
</columns>
<rows>
<row class="row" valign="top">
<row class="row" valign="top" disabled="@view">
<description options=",,,participants" value="Participants"/>
<listbox type="select-account" rows="14" id="participants"/>
<template content="resources" id="resources.resource_selectbox"/>
<listbox type="select-account" rows="14" id="participants[accounts]"/>
<description value="Resources" align="right"/>
<resources_select options="14" id="participants[resources]"/>
</row>
<row valign="top" disabled="!@view">
<description value="Participants"/>
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<menulist>
<menupopup type="select-account" id="${row}" readonly="true"/>
</menulist>
<menulist>
<menupopup id="accounts_status[$row_cont]" onchange="1" statustext="Accept or reject an invitation" no_lang="1"/>
</menulist>
</row>
</rows>
</grid>
<description value="Resources" align="right"/>
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row disabled="!@resources_status">
<resources_select id="${row}" readonly="true" no_lang="1"/>
<menulist>
<menupopup id="resources_status[$row_cont]" onchange="1" statustext="Accept or reject an invitation" no_lang="1"/>
</menulist>
</row>
</rows>
</grid>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.recurrence" template="" lang="" group="0" version="">
<grid>
<template id="calendar.edit.recurrence" template="" lang="" group="0" version="1.0.1.002">
<grid width="100%" height="200">
<columns>
<column width="95"/>
<column/>
<column/>
<column width="50%"/>
</columns>
<rows>
<row class="th" height="12">
<description span="all" value="Repeating Event Information"/>
</row>
<row class="row" height="12">
<description options=",,,recur_type" value="Repeat type"/>
<menulist>
<menupopup id="recur_type"/>
</menulist>
<description options=",,,recur_interval" value="Interval"/>
<menulist>
<menupopup type="select-number" id="recur_interval" statustext="repeating interval, eg. 2 to repeat every second week" options="None,2,10"/>
</menulist>
</row>
<row class="row" height="12">
<description options=",,,recur_enddate" value="End date"/>
<date id="recur_enddate" statustext="repeat the event until which date (empty means unlimited)" span="all"/>
</row>
<row class="row" valign="top">
<description options=",,,recur_data" value="Repeat days"/>
<listbox type="select-dow" rows="6" options="1" id="recur_data" statustext="Days of the week for a weekly repeated event"/>
<description value="Exceptions"/>
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<date-time id="$row" readonly="true"/>
<button label="Delete" image="delete" id="delete_exception[$row_cont]" statustext="Delete this exception" onclick="return confirm('Delete this exception');"/>
</row>
</rows>
</grid>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.custom" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%" height="200" overflow="auto">
<columns>
<column/>
</columns>
<rows>
<row>
<description/>
<row valign="top">
<customfields id="customfields"/>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.links" template="" lang="" group="0" version="">
<grid>
<template id="calendar.edit.links" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%" height="200" overflow="auto">
<columns>
<column width="95"/>
<column/>
</columns>
<rows>
<row>
<description/>
<row class="th" disabled="@view">
<description span="all" value="Create new links"/>
</row>
<row class="row" disabled="@view">
<link-to span="all" id="link_to"/>
</row>
<row class="th">
<description span="all" value="Existing links"/>
</row>
<row class="row_off" valign="top">
<link-list span="all" id="link_to"/>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit.custom" template="" lang="" group="0" version="">
<grid>
<template id="calendar.edit.alarms" template="" lang="" group="0" version="1.0.1.001">
<grid width="100%" height="200" overflow="auto">
<columns>
<column width="95"/>
<column/>
</columns>
<rows>
<row>
<description/>
<row class="row" height="20" disabled="@no_add_alarm">
<description value="before the event"/>
<hbox>
<menulist>
<menupopup type="select-number" options=",0,7" id="new_alarm[days]"/>
</menulist>
<description options=",,,new_alarm[days]" value="days"/>
<menulist>
<menupopup type="select-number" id="new_alarm[hours]" options=",0,23"/>
</menulist>
<description options=",,,new_alarm[hours]" value="hours"/>
<menulist>
<menupopup type="select-number" id="new_alarm[mins]" options=",0,55,5"/>
</menulist>
<description options=",,,new_alarm[mins]" value="Minutes"/>
<menulist>
<menupopup id="new_alarm[owner]" no_lang="1" label="for" statustext="Select who should get the alarm"/>
</menulist>
<button id="button[add_alarm]" label="Add alarm"/>
</hbox>
</row>
<row valign="top" disabled="!@alarm">
<description value="Alarms"/>
<grid>
<columns>
<column/>
<column/>
<column/>
<column/>
<column/>
</columns>
<rows>
<row class="th">
<description value="Time"/>
<description value="before the event"/>
<description value="All participants"/>
<description value="Owner"/>
<description value="Action"/>
</row>
<row class="row">
<date-time id="${row}[time]" readonly="true"/>
<description id="${row}[offset]" no_lang="1"/>
<checkbox align="center" id="${row}[all]" readonly="true"/>
<menulist>
<menupopup type="select-account" id="${row}[owner]" readonly="true"/>
</menulist>
<button image="delete" label="Delete" align="center" id="delete_alarm[$row_cont[id]]" statustext="Delete this alarm" onclick="return confirm('Delete this alarm');"/>
</row>
</rows>
</grid>
</row>
</rows>
</grid>
</template>
<template id="calendar.edit" template="" lang="" group="0" version="1.0.1.001">
<template id="calendar.edit" template="" lang="" group="0" version="1.0.1.002">
<grid width="100%">
<columns>
<column width="100"/>
<column/>
<column width="300"/>
<column/>
</columns>
<rows>
<row disabled="!@msg">
<description span="all" class="redItalic" id="msg"/>
<description span="all" class="redItalic" id="msg" no_lang="1" align="center"/>
<description/>
<description/>
</row>
<row class="th">
<description value="Title"/>
<textbox size="80" maxlength="255" id="title" span="all"/>
<textbox size="80" maxlength="255" id="title" span="all" needed="1"/>
</row>
<row>
<tabbox span="all">
@ -141,16 +274,18 @@
<tab label="Description" statustext="Full description"/>
<tab label="Participants" statustext="Participants, Resources, ..."/>
<tab label="Recurrence" statustext="Repeating Event Information"/>
<tab label="Links" statustext="Links"/>
<tab label="Custom" statustext="Custom fields"/>
<tab label="Links" statustext="Links, Attachments"/>
<tab label="Alarms" statustext="Alarm management"/>
</tabs>
<tabpanels>
<template id="calendar.edit.general"/>
<template id="calendar.edit.description"/>
<template id="calendar.edit.participants"/>
<template id="calendar.edit.recurrence"/>
<template id="calendar.edit.links"/>
<template id="calendar.edit.custom"/>
<template id="calendar.edit.links"/>
<template id="calendar.edit.alarms"/>
</tabpanels>
</tabbox>
</row>
@ -168,12 +303,19 @@
</row>
<row>
<hbox span="2">
<button id="edit" label="Edit" statustext="Edit this event"/>
<button label="Save" id="save" statustext="saves the changes made"/>
<button id="apply" label="Apply" statustext="apply the changes"/>
<button id="cancel" label="Cancel" onclick="window.close();"/>
<button id="button[edit_series]" label="Edit series" statustext="Edit this series of recuring events"/>
<button id="button[edit]" label="Edit" statustext="Edit this event"/>
<button id="button[copy]" label="Copy" statustext="Copy this event"/>
<button id="button[vcal]" label="Export" statustext="Download this event as iCal"/>
<button label="Save" id="button[save]" statustext="saves the changes made"/>
<button id="button[apply]" label="Apply" statustext="apply the changes"/>
<button id="button[cancel]" label="Cancel" onclick="window.close();" statustext="Close the window"/>
<checkbox id="custom_mail" label="mail all participants" statustext="compose a mail to all participants after the event is saved"/>
</hbox>
<hbox align="right">
<button id="button[delete_series]" label="Delete series" statustext="Delete this series of recuring events" onclick="return confirm('Delete this series of recuring events');"/>
<button label="Delete" id="button[delete]" statustext="Delete this event" onclick="return confirm('Delete this event');"/>
</hbox>
<button label="Delete" align="right" id="delete"/>
</row>
</rows>
</grid>

View File

@ -1,57 +1,38 @@
<!-- BEGIN event_widget -->
<table style="width: 99%; margin: 0px; padding: 0px;" cellpadding="0" cellspacing="0" border="0" align="center" {tooltip}>
<table style="width: 99%; height: 100%; margin: 0px; padding: 0px;" cellpadding="0" cellspacing="0" border="0" align="center" {tooltip}>
<tr style="height: {header_height};" valign="top">
<!-- too many layout problems with round corners //NDEE -->
<!-- <td style="width: {corner_radius}; background: url({upper_left_corner}) no-repeat;"></td> -->
<td valign="middle" class="calEventHeader{Small}" style="height: {header_height}; border-top: {border} px solid {bordercolor}; background-color: {headerbgcolor};">{header_icons} {header}</td>
<!-- <td style="width: {corner_radius}; background: url({upper_right_corner}) no-repeat;"></td> -->
</tr>
<tr valign="top" style="height: {body_height};">
<!--<td colspan="3" class="calEventBody{Small}" style="background: {bodybackground}; border-left: {border}px solid {bordercolor}; border-right: {border}px solid {bordercolor};">-->
<tr valign="top" style="height: 100%;">
<td class="calEventBody{Small}" style="background: {bodybackground}; border-bottom: {border}px solid {bordercolor}; border-left: {border}px solid {bordercolor}; border-right: {border}px solid {bordercolor};">
<p style="margin: 0px;">{body_icons}
<span class="calEventTitle">{title}</span>
<p style="margin: 0px;">{body_icons}<br>
<span class="calEventTitle">{title}</span></p>
</td>
</tr>
<!--
<tr style="height: {corner_radius};">
<td style="width: {corner_radius}; background: url({lower_left_corner}) no-repeat;"></td>
<td style="border-bottom: {border}px solid {bordercolor}; background: {bodybackground};"></td>
<td style="width: {corner_radius}; background: url({lower_right_corner}) no-repeat"></td>
</tr>
-->
</table>
<!-- END event_widget -->
<!-- BEGIN event_tooltip -->
<table style="width: 99%; margin: 0px; padding: 0px;" cellpadding="0" cellspacing="0" border="0" align="center">
<tr style="height: {header_height};" valign="top">
<!-- too many layout problems with round corners //NDEE -->
<!--<td style="width: {corner_radius}; background: url({upper_left_corner}) no-repeat;"></td>-->
<td valign="middle" class="calEventHeader{Small}" style="height: {header_height}; border-top: {border} px solid {bordercolor}; background-color: {headerbgcolor};">{header_icons} {header}</td>
<!--<td style="width: {corner_radius}; background: url({upper_right_corner}) no-repeat;"></td>-->
</tr>
<tr valign="top">
<!--<td colspan="3" class="calEventBody{Small}" style="background: {bodybackground}; border-left: {border}px solid {bordercolor}; border-right: {border}px solid {bordercolor};">-->
<td class="calEventBody{Small}" style="background: {bodybackground}; border-bottom: {border}px solid {bordercolor}; border-left: {border}px solid {bordercolor}; border-right: {border}px solid {bordercolor};">
<p style="margin: 0px;">{body_icons}
<span class="calEventTitle">{title}</span><br>
{description}</p>
<p style="margin: 2px 0px;">{multidaytimes}
<p style="margin: 2px 0px;">{times}
{location}
{category}
{participants}</p>
</td>
</tr>
<!--
<tr style="height: {corner_radius};">
<td style="width: {corner_radius}; background: url({lower_left_corner}) no-repeat;"></td>
<td style="border-bottom: {border}px solid {bordercolor}; background: {bodybackground};"></td>
<td style="width: {corner_radius}; background: url({lower_right_corner}) no-repeat"></td>
</tr>
-->
</table>
<!-- END event_tooltip -->
<!-- BEGIN planner_event -->
{icons} {title}
<!-- END planner_event -->

View File

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<overlay>
<template id="calendar.export" template="" lang="" group="0" version="1.0.1.001">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<description span="all"/>
</row>
<row>
<description options=",,,start" value="Start"/>
<date id="start" statustext="Startdate of the export"/>
</row>
<row>
<description options=",,,end" value="End"/>
<date id="end" statustext="Enddate of the export"/>
</row>
<row>
<description options=",,,file" value="Filename"/>
<textbox id="file" statustext="Filename of the download"/>
</row>
<row disabled="1">
<description options=",,,version" value="Version"/>
<menulist>
<menupopup id="version"/>
</menulist>
</row>
<row>
<description/>
<button label="Download" id="download"/>
</row>
<row>
<description span="all"/>
</row>
</rows>
</grid>
</template>
</overlay>

View File

@ -1,31 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN footer_table -->
<hr clear="all">
<font size="-1">
<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr valign="top">
{table_row}
</tr>
</table>
<!-- END footer_table -->
<!-- BEGIN footer_row -->
<td width="33%">
<font size="-1">
<form action="{action_url}" method="post" name="{form_name}">
<B>{label}:</B>
{hidden_vars}
<select name="{form_label}" onchange="{form_onchange}">
{row}
</select>
<noscript><input type="submit" value="{go}"></noscript>
</form>
</font>
</td>
<!-- END footer_row -->
<!-- BEGIN blank_row -->
<td>
{b_row}
</td>
<!-- END blank_row -->

View File

@ -1,14 +0,0 @@
<!-- $Id$ -->
<form action="{form_link}" method="post" name="{form_name}form">
<td width="{form_width}%" align="center" valign="top" style="padding-top:16px">
<span style="font-size:10px"><b>{title}:</b>
{hidden_vars}
<select name="{form_name}" onchange="document.{form_name}form.submit()">
{form_options}
</select>
<noscript>
<input type="submit" value="{button_value}">
</noscript>
</span>
</td>
</form>

View File

@ -36,7 +36,7 @@
<rows>
<row>
<description class="size120b" value="Freetime Search"/>
<description class="ired" no_lang="1" id="msg"/>
<description class="redItalic" no_lang="1" id="msg"/>
</row>
<row>
<description value="Startdate / -time"/>
@ -48,8 +48,7 @@
<menulist>
<menupopup no_lang="1" id="duration" statustext="Duration of the meeting"/>
</menulist>
<description value="or Enddate / -time"/>
<date-time id="end" statustext="Enddate / -time of the meeting, eg. for more then one day"/>
<date-time id="end" statustext="Enddate / -time of the meeting, eg. for more then one day" class="end_hide"/>
</hbox>
</row>
<row>
@ -78,7 +77,8 @@
</grid>
<styles>
.size120b { text-size: 120%; font-weight: bold; }
.ired { color: red; font-style: italic; }
.redItalic { color: red; font-style: italic; }
.end_hide { visibility: hidden; }
</styles>
</template>
</overlay>

View File

@ -1,17 +0,0 @@
<!-- $Id$ -->
<!-- BEGIN head -->
{row}<br />
<!-- END head -->
<!-- BEGIN head_table -->
<table id="calendar_head_table" class="calendar_head_table" border="0" width="100%" cols="{cols}" cellpadding="0" cellspacing="0">
<tr>
{header_column}
</tr>
</table>
<!-- END head_table -->
<!-- BEGIN head_col -->
{str}
<!-- END head_col -->

View File

@ -1,7 +0,0 @@
<!-- $Id$ -->
<tr>
<td colspan="2">
{hr_text}
</td>
</tr>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

Some files were not shown because too many files have changed in this diff Show More