forked from extern/egroupware
bugfixes:
- search was not searching in id, phone/email, location - setting status or percent&date completed was not working for the responsible under some conditions - for the conversation of days to hours always 8h were used, now that's the default if nothing is configured in the PM enhancements - some might call bug-fixes too ;-): - configuration of the rights of the responsible: a) implicit edit rights (default is only read) b) additional fields to edit without edit rights: eg. description, used time, ... - user preference to show status and percent again as one merged icon (default) or as two spearate ones - user preference to show a numeric Id, can be used eg. as ticket number
This commit is contained in:
parent
8010dab588
commit
7254bef473
@ -73,6 +73,14 @@
|
||||
* @var array $config infolog configuration
|
||||
*/
|
||||
var $config;
|
||||
/**
|
||||
* @var array $responsible_edit=array('info_status','info_percent','info_datecompleted') fields the responsible user can change
|
||||
*/
|
||||
var $responsible_edit=array('info_status','info_percent','info_datecompleted');
|
||||
/**
|
||||
* @var string $implicit_rights='read' implicit ACL rights of the responsible user: read or edit
|
||||
*/
|
||||
var $implicit_rights='read';
|
||||
|
||||
/**
|
||||
* Constructor Infolog BO
|
||||
@ -160,8 +168,16 @@
|
||||
{
|
||||
$this->customfields = $this->config->config_data['customfields'];
|
||||
}
|
||||
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
||||
if (count(explode(',',$this->config->config_data['responsible_edit'])))
|
||||
{
|
||||
$this->responsible_edit = array_merge($this->responsible_edit,explode(',',$this->config->config_data['responsible_edit']));
|
||||
}
|
||||
if ($this->config->config_data['implicit_rights'] == 'edit')
|
||||
{
|
||||
$this->implicit_rights = 'edit';
|
||||
}
|
||||
}
|
||||
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
||||
/**
|
||||
* @var int $tz_offset_s offset in secconds between user and server-time,
|
||||
* it need to be add to a server-time to get the user-time or substracted from a user-time to get the server-time
|
||||
@ -218,7 +234,7 @@
|
||||
{
|
||||
return $cache[$info_id][$required_rights];
|
||||
}
|
||||
return $cache[$info_id][$required_rights] = $this->so->check_access( $info,$required_rights );
|
||||
return $cache[$info_id][$required_rights] = $this->so->check_access( $info,$required_rights,$this->implicit_rights == 'edit' );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -431,11 +447,12 @@
|
||||
$backup_values = $values; // to return the full values
|
||||
$values = array(
|
||||
'info_id' => $values['info_id'],
|
||||
'info_status' => $values['info_status'],
|
||||
'info_percent' => $values['info_percent'],
|
||||
'info_owner' => $values['info_owner'],
|
||||
'info_datemodified' => $values['info_datemodified'],
|
||||
);
|
||||
foreach($this->responsible_edit as $name)
|
||||
{
|
||||
if (isset($backup_values[$name])) $values[$name] = $backup_values[$name];
|
||||
}
|
||||
if ($set_completed)
|
||||
{
|
||||
$values['info_datecompleted'] = $this->user_time_now;
|
||||
|
@ -57,9 +57,10 @@
|
||||
*
|
||||
* @param array/int $info data or info_id of InfoLog entry
|
||||
* @param int $required_rights EGW_ACL_xyz anded together
|
||||
* @param boolean $implicit_edit=false
|
||||
* @return boolean True if access is granted else False
|
||||
*/
|
||||
function check_access( $info,$required_rights )
|
||||
function check_access( $info,$required_rights,$implicit_edit=false )
|
||||
{
|
||||
if (is_array($info))
|
||||
{
|
||||
@ -86,7 +87,7 @@
|
||||
// ACL only on public entrys || $owner granted _PRIVATE
|
||||
(!!($this->grants[$owner] & $required_rights) ||
|
||||
// implicite read-rights for responsible user !!!
|
||||
in_array($this->user, $info['info_responsible']) && $required_rights == EGW_ACL_READ) &&
|
||||
in_array($this->user, $info['info_responsible']) && ($required_rights == EGW_ACL_READ || $implicit_edit && $required_rights == EGW_ACL_EDIT)) &&
|
||||
//$info['info_responsible'] == $this->user && $required_rights == EGW_ACL_READ) &&
|
||||
($info['info_access'] == 'public' ||
|
||||
!!($this->grants[$owner] & EGW_ACL_PRIVATE));
|
||||
@ -550,11 +551,12 @@
|
||||
{
|
||||
$pattern = $this->db->quote('%'.$query['search'].'%');
|
||||
|
||||
$columns = array('info_from','info_subject','info_extra_value');
|
||||
$columns = array('info_from','info_addr','info_location','info_subject','info_extra_value');
|
||||
// at the moment MaxDB 7.5 cant cast nor search text columns, it's suppost to change in 7.6
|
||||
if ($this->db->capabilities['like_on_text']) $columns[] = 'info_des';
|
||||
|
||||
$sql_query = 'AND ('.implode(" LIKE $pattern OR ",$columns)." LIKE $pattern) ";
|
||||
$sql_query = 'AND ('.(is_numeric($query['search']) ? 'main.info_id='.(int)$query['search'].' OR ' : '').
|
||||
implode(" LIKE $pattern OR ",$columns)." LIKE $pattern) ";
|
||||
$join = "LEFT JOIN $this->extra_table ON main.info_id=$this->extra_table.info_id";
|
||||
// mssql and others cant use DISTICT if text columns (info_des) are involved
|
||||
$distinct = $this->db->capabilities['distinct_on_text'] ? 'DISTINCT' : '';
|
||||
|
@ -45,6 +45,10 @@
|
||||
* @var bolink-object $link reference to instance of the link-class of bo
|
||||
*/
|
||||
var $link;
|
||||
/**
|
||||
* @var string $duration_format allowed units and hours per day, can be overwritten by the projectmanager configuration, default all units, 8h
|
||||
*/
|
||||
var $duration_format = ','; // comma is necessary!
|
||||
|
||||
function uiinfolog( )
|
||||
{
|
||||
@ -107,6 +111,14 @@
|
||||
|
||||
$this->prefs =& $GLOBALS['egw_info']['user']['preferences']['infolog'];
|
||||
|
||||
// read the duration format from project-manager
|
||||
if ($GLOBALS['egw_info']['apps']['projectmanager'])
|
||||
{
|
||||
$pm_config =& CreateObject('phpgwapi.config','projectmanager');
|
||||
$pm_config->read_repository();
|
||||
$this->duration_format = str_replace(',','',$pm_config->config_data['duration_units']).','.$pm_config->config_data['hours_per_workday'];
|
||||
unset($pm_config);
|
||||
}
|
||||
$GLOBALS['uiinfolog'] =& $this; // make ourself availible for ExecMethod of get_rows function
|
||||
}
|
||||
|
||||
@ -130,6 +142,8 @@
|
||||
$readonlys["edit[$id]"] = !$this->bo->check_access($info,EGW_ACL_EDIT);
|
||||
$readonlys["close[$id]"] = $done || ($readonlys["edit_status[$id]"] = !($this->bo->check_access($info,EGW_ACL_EDIT) ||
|
||||
in_array($this->user, (array)$info['info_responsible'])));
|
||||
$readonlys["edit_status[$id]"] = $readonlys["edit_percent[$id]"] =
|
||||
!$this->bo->check_access($info,EGW_ACL_EDIT) && !in_array($this->user, (array)$info['info_responsible']);
|
||||
$readonlys["delete[$id]"] = !$this->bo->check_access($info,EGW_ACL_DELETE);
|
||||
$readonlys["sp[$id]"] = !$this->bo->check_access($info,EGW_ACL_ADD);
|
||||
$readonlys["view[$id]"] = $info['info_anz_subs'] < 1;
|
||||
@ -167,6 +181,22 @@
|
||||
$info['info_type_label'] = $this->bo->enums['type'][$info['info_type']];
|
||||
$info['info_status_label'] = $this->bo->status[$info['info_type']][$info['info_status']];
|
||||
|
||||
if (!$this->prefs['show_percent'] || $show_links == 'no_describtion')
|
||||
{
|
||||
if ($info['info_status'] == 'ongoing' && $info['info_type'] != 'phone')
|
||||
{
|
||||
$info['info_status'] = $info['info_status_label'] = $info['info_percent'];
|
||||
}
|
||||
$readonlys["edit_percent[$id]"] = true;
|
||||
}
|
||||
elseif($readonlys["edit_percent[$id]"]) // show percent, but button is switched off
|
||||
{
|
||||
$info['info_percent2'] = $info['info_percent'];
|
||||
}
|
||||
if ($this->prefs['show_id'] && !$show_links == 'no_describtion')
|
||||
{
|
||||
$info['info_number'] = $info['info_id'];
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
@ -225,8 +255,10 @@
|
||||
$rows[] = $info;
|
||||
}
|
||||
if ($query['no_actions']) $rows['no_actions'] = true;
|
||||
$rows['no_times'] = !$this->prefs['show_times'];
|
||||
$rows['no_details'] = $query['filter2'] == 'no_describtion';
|
||||
$rows['no_times'] = !$this->prefs['show_times'] || $query['filter2'] == 'no_describtion';
|
||||
$rows['no_timesheet'] = !isset($GLOBALS['egw_info']['user']['apps']['timesheet']);
|
||||
$rows['duration_format'] = ','.$this->duration_format.',,1';
|
||||
//echo "<p>readonlys = "; _debug_array($readonlys);
|
||||
//echo "rows=<pre>".print_r($rows,True)."</pre>\n";
|
||||
|
||||
@ -407,6 +439,7 @@
|
||||
'info_id' => $info_id,
|
||||
'info_status' => 'done',
|
||||
'info_percent'=> 100,
|
||||
'info_datecompleted' => $this->bo->now_su,
|
||||
);
|
||||
$this->bo->write($values);
|
||||
|
||||
@ -532,6 +565,7 @@
|
||||
$content['info_link_id'] = 0; // as field has to be int
|
||||
}
|
||||
}
|
||||
$active_tab = $content[$tabs];
|
||||
if (!($info_id = $this->bo->write($content)))
|
||||
{
|
||||
$content['msg'] = $info_id !== 0 || !$content['info_id'] ? lang('Error: saving the entry') :
|
||||
@ -551,6 +585,7 @@
|
||||
$content['msg'] = lang('InfoLog entry saved');
|
||||
$content['js'] = "opener.location.href='".($link=$GLOBALS['egw']->link($referer,array('msg' => $content['msg'])))."';";
|
||||
}
|
||||
$content[$tabs] = $active_tab;
|
||||
if ((int) $content['pm_id'] != (int) $content['old_pm_id'])
|
||||
{
|
||||
//echo "<p>pm_id changed: $content[old_pm_id] -> $content[pm_id]</p>\n";
|
||||
@ -676,7 +711,7 @@
|
||||
*/
|
||||
$content['info_type'] = $parent['info_type'];
|
||||
$content['info_status'] = $this->bo->status['defaults'][$content['info_type']];
|
||||
$content['info_percent'] = '0%';
|
||||
$content['info_percent'] = $content['info_status'] == 'done' ? '100%' : '0%';
|
||||
$content['info_confirm'] = 'not';
|
||||
$content['info_subject']=lang($this->messages['re']).' '.$parent['info_subject'];
|
||||
$content['info_des'] = '';
|
||||
@ -692,34 +727,18 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT))
|
||||
if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && !in_array($this->user, (array)$content['info_responsible']))
|
||||
{
|
||||
if (in_array($this->user, (array)$content['info_responsible']))
|
||||
if ($no_popup)
|
||||
{
|
||||
$content['status_only'] = True;
|
||||
foreach($content as $name => $value)
|
||||
{
|
||||
$readonlys[$name] = $name != 'info_status';
|
||||
}
|
||||
// need to set all customfields extra, as they are not set if empty
|
||||
foreach($this->bo->customfields as $name => $value)
|
||||
{
|
||||
$readonlys['#'.$name] = true;
|
||||
}
|
||||
}
|
||||
else // Permission denied
|
||||
{
|
||||
if ($no_popup)
|
||||
{
|
||||
$GLOBALS['egw']->common->egw_header();
|
||||
parse_navbar();
|
||||
echo '<p class="redItalic" align="center">'.lang('Permission denied')."</p>\n";
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
}
|
||||
$js = "alert('".lang('Permission denied')."'); window.close();";
|
||||
echo '<html><body onload="'.$js.'"></body></html>';
|
||||
$GLOBALS['egw']->common->egw_header();
|
||||
parse_navbar();
|
||||
echo '<p class="redItalic" align="center">'.lang('Permission denied')."</p>\n";
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
}
|
||||
$js = "alert('".lang('Permission denied')."'); window.close();";
|
||||
echo '<html><body onload="'.$js.'"></body></html>';
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
}
|
||||
}
|
||||
$content['links'] = $content['link_to'] = array(
|
||||
@ -768,7 +787,7 @@
|
||||
$content['info_type'] = $type;
|
||||
}
|
||||
$content['info_status'] = $this->bo->status['defaults'][$content['info_type']];
|
||||
$content['info_percent'] = '0%';
|
||||
$content['info_percent'] = $content['info_status'] == 'done' ? '100%' : '0%';
|
||||
break;
|
||||
}
|
||||
if (!isset($this->bo->enums['type'][$content['info_type']]))
|
||||
@ -776,6 +795,20 @@
|
||||
$content['info_type'] = 'note';
|
||||
}
|
||||
}
|
||||
// for implizit edit of responsible user make all fields readonly, but status and percent
|
||||
if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT) && in_array($this->user, (array)$content['info_responsible']))
|
||||
{
|
||||
$content['status_only'] = !in_array('link_to',$this->bo->responsible_edit);
|
||||
foreach(array_diff(array_merge(array_keys($content),array('pm_id')),$this->bo->responsible_edit) as $name)
|
||||
{
|
||||
$readonlys[$name] = true;
|
||||
}
|
||||
// need to set all customfields extra, as they are not set if empty
|
||||
foreach($this->bo->customfields as $name => $value)
|
||||
{
|
||||
$readonlys['#'.$name] = true;
|
||||
}
|
||||
}
|
||||
// we allways need to set a non-empty/-zero primary, to make the radiobutton appear
|
||||
$content['link_to']['primary'] = $content['info_link_id'] ? $content['info_link_id'] : '#';
|
||||
|
||||
@ -799,6 +832,8 @@
|
||||
{
|
||||
$readonlys[$tabs]['project'] = true; // disable the project tab
|
||||
}
|
||||
$content['duration_format'] = $this->duration_format;
|
||||
|
||||
$old_pm_id = is_array($pm_links) ? array_shift($pm_links) : $content['old_pm_id'];
|
||||
if (!isset($content['pm_id']) && $old_pm_id) $content['pm_id'] = $old_pm_id;
|
||||
|
||||
@ -860,12 +895,19 @@
|
||||
|
||||
function admin( )
|
||||
{
|
||||
if(get_var('cancel',Array('POST')))
|
||||
{
|
||||
$GLOBALS['egw']->redirect_link('/admin/index.php');
|
||||
}
|
||||
|
||||
if(get_var('save',Array('POST')))
|
||||
$fields = array(
|
||||
'info_cat' => 'Category',
|
||||
'info_from' => 'Contact',
|
||||
'info_addr' => 'Phone/Email',
|
||||
'info_subject' => 'Subject',
|
||||
'info_des' => 'Description',
|
||||
'link_to' => 'Links',
|
||||
'info_priority' => 'Priority',
|
||||
'info_location' => 'Location',
|
||||
'info_planned_time' => 'Planned time',
|
||||
'info_used_time' => 'Used time',
|
||||
);
|
||||
if($_POST['save'] || $_POST['apply'])
|
||||
{
|
||||
$this->link_pathes = $this->bo->send_file_ips = array();
|
||||
|
||||
@ -880,14 +922,26 @@
|
||||
$this->bo->send_file_ips[$val] = stripslashes($ip[$key]);
|
||||
}
|
||||
}
|
||||
$this->bo->responsible_edit = array('info_status','info_percent','info_datecompleted');
|
||||
if ($_POST['responsible_edit'])
|
||||
{
|
||||
$extra = array_intersect($_POST['responsible_edit'],array_keys($fields));
|
||||
$this->bo->responsible_edit = array_merge($this->bo->responsible_edit,$extra);
|
||||
}
|
||||
$this->bo->implicit_rights = $_POST['implicit_rights'] == 'edit' ? 'edit' : 'read';
|
||||
$this->bo->config->config_data = array(
|
||||
'link_pathes' => $this->link_pathes,
|
||||
'send_file_ips' => $this->bo->send_file_ips
|
||||
'send_file_ips' => $this->bo->send_file_ips,
|
||||
'implicit_rights' => $this->bo->implicit_rights,
|
||||
'responsible_edit' => implode(',',$extra),
|
||||
);
|
||||
$this->bo->config->save_repository(True);
|
||||
}
|
||||
if($_POST['cancel'] || $_POST['save'])
|
||||
{
|
||||
$GLOBALS['egw']->redirect_link('/admin/index.php');
|
||||
}
|
||||
|
||||
$GLOBALS['egw_info']['flags']['css'] = $this->html->theme2css();
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.lang('Configuration');
|
||||
$GLOBALS['egw']->common->egw_header();
|
||||
|
||||
@ -896,10 +950,19 @@
|
||||
$GLOBALS['egw']->template->set_block('info_admin_t', 'info_admin');
|
||||
|
||||
$GLOBALS['egw']->template->set_var(Array(
|
||||
'lang_responsible_rights' => lang('Rights for the responsible'),
|
||||
'lang_implicit_rights' => lang('Which implicit ACL rights should the responsible get?'),
|
||||
'implicit_rights' => $this->html->select('implicit_rights',$this->bo->implicit_rights,array(
|
||||
'read' => 'read rights (default)',
|
||||
'edit' => 'edit rights (full edit rights incl. making someone else responsible!)',
|
||||
)),
|
||||
'lang_responsible_edit' => lang('Which additional fields should the responsible be allowed to edit without having edit rights?<br />Status, percent and date completed are always allowed.'),
|
||||
'responsible_edit' => $this->html->checkbox_multiselect('responsible_edit',$this->bo->responsible_edit,$fields,false,'',11),
|
||||
'text' => lang('<b>file-attachments via symlinks</b> instead of uploads and retrieval via file:/path for direct lan-clients'),
|
||||
'action_url' => $this->html->link('/index.php',$this->menuaction('admin')),
|
||||
'save_button' => $this->html->submit_button('save','Save'),
|
||||
'done_button' => $this->html->submit_button('cancel','Cancel'),
|
||||
'apply_button' => $this->html->submit_button('apply','Apply'),
|
||||
'cancel_button' => $this->html->submit_button('cancel','Cancel'),
|
||||
'lang_valid' => lang('valid path on clientside<br>eg. \\\\Server\\Share or e:\\'),
|
||||
'lang_trans' => lang('path on (web-)serverside<br>eg. /var/samba/Share'),
|
||||
'lang_ip' => lang('reg. expr. for local IP\'s<br>eg. ^192\\.168\\.1\\.')
|
||||
|
@ -32,7 +32,6 @@
|
||||
'none' => lang('no links or attachments'),
|
||||
'no_describtion' => lang('no describtion, links or attachments'),
|
||||
);
|
||||
|
||||
/* Settings array for this app */
|
||||
$GLOBALS['settings'] = array(
|
||||
'homeShowEvents' => array(
|
||||
@ -96,6 +95,22 @@
|
||||
'xmlrpc' => True,
|
||||
'admin' => False
|
||||
),
|
||||
'show_percent' => array(
|
||||
'type' => 'check',
|
||||
'label' => 'Show status and percent done separate',
|
||||
'name' => 'show_percent',
|
||||
'help' => 'Should the Infolog list show the percent done only for status ongoing or two separate icons.',
|
||||
'xmlrpc' => True,
|
||||
'admin' => False
|
||||
),
|
||||
'show_id' => array(
|
||||
'type' => 'check',
|
||||
'label' => 'Show ticket Id',
|
||||
'name' => 'show_id',
|
||||
'help' => 'Should the Infolog list show a unique numerical Id, which can be used eg. as ticket Id.',
|
||||
'xmlrpc' => True,
|
||||
'admin' => False
|
||||
),
|
||||
'set_start' => array(
|
||||
'type' => 'select',
|
||||
'label' => 'Startdate for new entries',
|
||||
|
File diff suppressed because one or more lines are too long
@ -98,6 +98,7 @@ duration infolog de Dauer
|
||||
each value is a line like <id>[=<label>] infolog de jeder Wert ist eine Zeile im Format id=[angezeigter Wert]
|
||||
edit infolog de Bearbeiten
|
||||
edit or create categories for ingolog infolog de Kategorien für InfoLog bearbeiten oder neu anlegen
|
||||
edit rights (full edit rights incl. making someone else responsible!) infolog de Bearbeitungsrechte (komplettes Bearbeiten einsch. jemand anderen dafür verantwortlich machen!)
|
||||
edit status infolog de Status ändern
|
||||
edit the entry infolog de Eintrag bearbeiten
|
||||
edit this entry infolog de diesen Eintrag bearbeiten
|
||||
@ -204,6 +205,7 @@ project infolog de Projekt
|
||||
project settings: price, times infolog de Einstellungen zum Projekt: Preis, Zeiten
|
||||
re: infolog de Re:
|
||||
read one record by passing its id. infolog de Einen Datensatz spezifiziert durch seine id lesen.
|
||||
read rights (default) infolog de Leserechte (Vorgabe)
|
||||
reg. expr. for local ip's<br>eg. ^192\.168\.1\. infolog de reg. Ausdr. für lokale IP's<br>^192\.168\.1\.
|
||||
remark infolog de Bemerkung
|
||||
remove this link (not the entry itself) infolog de Diese Verknüpfung lösen (nicht den Eintrag selbst)
|
||||
@ -213,6 +215,7 @@ responsible overdue infolog de verantwortlich
|
||||
responsible upcoming infolog de verantwortlich zufünftig
|
||||
responsible user, priority infolog de Verantwortlicher, Priorität
|
||||
returns a list / search for records. infolog de Liefert eine Liste von / sucht nach Datensätzen.
|
||||
rights for the responsible infolog de Rechte für den Verantwortlichen
|
||||
save infolog de Speichern
|
||||
saves the changes made and leaves infolog de speichert die Änderungen und beendet
|
||||
saves this entry infolog de diesen Eintrag speichern
|
||||
@ -234,12 +237,16 @@ should infolog display your open entries - not finished tasks, phonecalls or not
|
||||
should infolog show subtasks, -calls or -notes in the normal view or not. you can always view the subs via there parent. infolog de Soll InfoLog Untereinträge in der normalen Ansicht anzeigen oder nicht. Sie können die Untereinträge immer über deren Haupteintrag anzeigen.
|
||||
should infolog show the links to other applications and/or the file-attachments in the infolog list (normal view when you enter infolog). infolog de Soll InfoLog die Verknüpfungen zu anderen Anwendungen und/oder die Datei-Anhänge in der InfoLog Liste (normale Ansicht wenn InfoLog aufgerufen wird) anzeigen.
|
||||
should infolog use full names (surname and familyname) or just the loginnames. infolog de Soll InfoLog den vollen Namen (Vor- und Familienname) oder nur die Benutzerkennung verwenden.
|
||||
should the infolog list show a unique numerical id, which can be used eg. as ticket id. infolog de Soll die InfoLog Liste eine eindeutige Nummer anzeigen, die zB. als Ticketnummer verwendet werden kann.
|
||||
should the infolog list show the percent done only for status ongoing or two separate icons. infolog de Soll die InfoLog Liste Prozent erledigt nur für den Status "in Arbeit" anzeigen oder zwei separate Icons.
|
||||
should this entry only be visible to you and people you grant privat access via the acl infolog de soll dieser Eintrag nur sichtbar sein für Sie und Personen denen Sie privaten Zugriff über die ACL erlaubt haben
|
||||
show a column for used and planned times in the list. infolog de Zeige eine Spalte für benutzte und geplante Zeiten in der List.
|
||||
show full usernames infolog de Kompletten Benutzernamen anzeigen
|
||||
show in the infolog list infolog de In der InfoLog Liste anzeigen
|
||||
show list of upcoming entries infolog de Liste zukünftiger Einträge anzeigen
|
||||
show open entries: tasks/calls/notes on main screen infolog de Nicht erledigte Einträge: Aufgaben/Anrufe/Notizen auf Startseite anzeigen
|
||||
show status and percent done separate infolog de Status und Prozent erledigt separat anzeigen
|
||||
show ticket id infolog de Ticketnummer anzeigen
|
||||
show times infolog de Zeiten anzeigen
|
||||
small view infolog de schmale Ansicht
|
||||
start a new search, cancel this link infolog de eine neue Suche starten, diese Verknüpfung abbrechen
|
||||
@ -285,6 +292,8 @@ view subs infolog de Untereintr
|
||||
view the parent of this entry and all his subs infolog de übergeordneter Eintrag mit allen seinen Untereinträgen anzeigen
|
||||
view this linked entry in its application infolog de diesen verknüpfen Eintrag in seiner Anwendung anzeigen
|
||||
when should the todo or phonecall be started, it shows up from that date in the filter open or own open (startpage) infolog de wann soll mit dem Auftrag oder Anruf begonnen werden, ab diesem Datum wird er beim Filter offen oder eigene offen angezeigt (Startseite)
|
||||
which additional fields should the responsible be allowed to edit without having edit rights?<br />status, percent and date completed are always allowed. infolog de Welche zusätzlichen Felder soll der Verantwortliche bearbeiten können ohne Bearbeitungsrechte zu haben?<br />Status, Prozent und Datum erledigt sind immer erlaubt.
|
||||
which implicit acl rights should the responsible get? infolog de Welche impliziten Zugriffsrechte soll der Verantwortliche bekommen?
|
||||
will-call infolog de ruft zurück
|
||||
write (add or update) a record by passing its fields. infolog de Schreiben (zufügen oder aktualisieren) eines Datensatzes durch Angabe seiner Felder.
|
||||
yes - delete infolog de Ja - Löschen
|
||||
|
@ -98,6 +98,7 @@ duration infolog en Duration
|
||||
each value is a line like <id>[=<label>] infolog en each value is a line like <id>[=<label>]
|
||||
edit infolog en Edit
|
||||
edit or create categories for ingolog infolog en Edit or create categories for IngoLog
|
||||
edit rights (full edit rights incl. making someone else responsible!) infolog en edit rights (full edit rights incl. making someone else responsible!)
|
||||
edit status infolog en Edit status
|
||||
edit the entry infolog en Edit the entry
|
||||
edit this entry infolog en Edit this entry
|
||||
@ -204,6 +205,7 @@ project infolog en Project
|
||||
project settings: price, times infolog en Project settings: price, times
|
||||
re: infolog en Re:
|
||||
read one record by passing its id. infolog en Read one record by passing its id.
|
||||
read rights (default) infolog en read rights (default)
|
||||
reg. expr. for local ip's<br>eg. ^192\.168\.1\. infolog en reg. expr. for local IP's<br>eg. ^192\.168\.1\.
|
||||
remark infolog en Remark
|
||||
remove this link (not the entry itself) infolog en Remove this link (not the entry itself)
|
||||
@ -213,6 +215,7 @@ responsible overdue infolog en responsible overdue
|
||||
responsible upcoming infolog en responsible upcoming
|
||||
responsible user, priority infolog en responsible user, priority
|
||||
returns a list / search for records. infolog en Returns a list / search for records.
|
||||
rights for the responsible infolog en Rights for the responsible
|
||||
save infolog en Save
|
||||
saves the changes made and leaves infolog en saves the changes made and leaves
|
||||
saves this entry infolog en Saves this entry
|
||||
@ -234,12 +237,16 @@ should infolog display your open entries - not finished tasks, phonecalls or not
|
||||
should infolog show subtasks, -calls or -notes in the normal view or not. you can always view the subs via there parent. infolog en Should InfoLog show Subtasks, -calls or -notes in the normal view or not. You can always view the subs via their parent.
|
||||
should infolog show the links to other applications and/or the file-attachments in the infolog list (normal view when you enter infolog). infolog en Should InfoLog show the links to other applications and/or the file-attachments in the InfoLog list (normal view when you enter InfoLog).
|
||||
should infolog use full names (surname and familyname) or just the loginnames. infolog en Should InfoLog use full names (surname and familyname) or just the loginnames.
|
||||
should the infolog list show a unique numerical id, which can be used eg. as ticket id. infolog en Should the Infolog list show a unique numerical Id, which can be used eg. as ticket Id.
|
||||
should the infolog list show the percent done only for status ongoing or two separate icons. infolog en Should the Infolog list show the percent done only for status ongoing or two separate icons.
|
||||
should this entry only be visible to you and people you grant privat access via the acl infolog en should this entry only be visible to you and people you grant privat access via the ACL
|
||||
show a column for used and planned times in the list. infolog en Show a column for used and planned times in the list.
|
||||
show full usernames infolog en Show full usernames
|
||||
show in the infolog list infolog en Show in the InfoLog list
|
||||
show list of upcoming entries infolog en show list of upcoming entries
|
||||
show open entries: tasks/calls/notes on main screen infolog en Show open entries: Tasks/Calls/Notes on main screen
|
||||
show status and percent done separate infolog en Show status and percent done separate
|
||||
show ticket id infolog en Show ticket Id
|
||||
show times infolog en Show times
|
||||
small view infolog en small view
|
||||
start a new search, cancel this link infolog en start a new search, cancel this link
|
||||
@ -285,6 +292,8 @@ view subs infolog en view Subs
|
||||
view the parent of this entry and all his subs infolog en View the parent of this entry and all his subs
|
||||
view this linked entry in its application infolog en view this linked entry in its application
|
||||
when should the todo or phonecall be started, it shows up from that date in the filter open or own open (startpage) infolog en when should the ToDo or Phone call be started, it shows up from that date in the filter open or own open (startpage)
|
||||
which additional fields should the responsible be allowed to edit without having edit rights?<br />status, percent and date completed are always allowed. infolog en Which additional fields should the responsible be allowed to edit without having edit rights?<br />Status, percent and date completed are always allowed.
|
||||
which implicit acl rights should the responsible get? infolog en Which implicit ACL rights should the responsible get?
|
||||
will-call infolog en will call
|
||||
write (add or update) a record by passing its fields. infolog en Write (add or update) a record by passing its fields.
|
||||
yes - delete infolog en Yes - Delete
|
||||
|
@ -11,6 +11,20 @@
|
||||
<br>
|
||||
<form action="{action_url}" method="POST">
|
||||
<table border="0">
|
||||
<tr class="th">
|
||||
<td colspan="4"><b>{lang_responsible_rights}</b></td>
|
||||
</tr>
|
||||
<tr class="row_off">
|
||||
<td colspan="3">{lang_implicit_rights}</td>
|
||||
<td>{implicit_rights}</td>
|
||||
</tr>
|
||||
<tr class="row_on">
|
||||
<td colspan="3">{lang_responsible_edit}</td>
|
||||
<td>{responsible_edit}</td>
|
||||
</tr>
|
||||
<tr class="row_off">
|
||||
<td colspan="4"> </td>
|
||||
</tr>
|
||||
<tr class="th">
|
||||
<td colspan="4">{text}</td>
|
||||
</tr>
|
||||
@ -23,7 +37,7 @@
|
||||
{admin_lines}
|
||||
<tr>
|
||||
<td colspan="4" align="left">
|
||||
{save_button} {done_button}
|
||||
{save_button} {apply_button} {cancel_button}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -12,3 +12,5 @@
|
||||
.overdue { color:#cc0000; font-weight:bold; }
|
||||
.private { font-style:italic; }
|
||||
.planned { font-style:italic; }
|
||||
.fullWidth table { width: 100%; }
|
||||
.infoId:before { content:"#" }
|
@ -99,7 +99,7 @@
|
||||
</row>
|
||||
<row class="row">
|
||||
<description options=",,,info_planned_time" value="planned time"/>
|
||||
<date-duration id="info_planned_time"/>
|
||||
<date-duration id="info_planned_time" options=",$cont[duration_format]"/>
|
||||
</row>
|
||||
<row class="row" valign="top" height="60%">
|
||||
<description options=",,,info_used_time" value="used time"/>
|
||||
|
@ -57,11 +57,15 @@
|
||||
<hbox align="center" orient=",5">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status_label]" ro_image="$row_cont[info_status_label]" label="$row_cont[info_status_label]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="$row_cont[info_percent]" ro_image="$row_cont[info_percent]" label="$row_cont[info_percent]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="$row_cont[info_percent]" label="$row_cont[info_percent]" id="edit_percent[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<image label="$row_cont[info_percent2]" src="{$row}[info_percent2]" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox orient="0,0">
|
||||
<vbox class="fullWidth" orient="0,0">
|
||||
<link label="%s $row_cont[info_addr]" id="${row}[info_link]" options="b"/>
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<hbox orient=",0,0">
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<description no_lang="1" align="right" id="{$row}[info_number]" class="infoId"/>
|
||||
</hbox>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
</vbox>
|
||||
@ -71,9 +75,9 @@
|
||||
<date-time id="${row}[info_datecompleted]" readonly="true"/>
|
||||
</vbox>
|
||||
<vbox data="" rows="3" cols="1">
|
||||
<date-duration id="${row}[info_used_time]" readonly="true" options=",,,,1"/>
|
||||
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options=",,,,1" class="timesheet"/>
|
||||
<date-duration id="${row}[info_planned_time]" span="all" class="planned" readonly="true" options=",,,,1"/>
|
||||
<date-duration id="${row}[info_used_time]" readonly="true" options="@duration_format"/>
|
||||
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options="@duration_format" class="timesheet"/>
|
||||
<date-duration id="${row}[info_planned_time]" span="all" class="planned" readonly="true" options="@duration_format"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<menulist>
|
||||
@ -158,11 +162,15 @@
|
||||
<hbox align="center" orient=",5">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status_label]" ro_image="$row_cont[info_status_label]" label="$row_cont[info_status_label]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="$row_cont[info_percent]" ro_image="$row_cont[info_percent]" label="$row_cont[info_percent]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="$row_cont[info_percent]" label="$row_cont[info_percent]" id="edit_percent[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
<image label="$row_cont[info_percent2]" src="{$row}[info_percent2]" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=600,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox orient="0,0">
|
||||
<vbox class="fullWidth" orient="0,0">
|
||||
<link label="%s $row_cont[info_addr]" id="${row}[info_link]" options="b"/>
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<hbox orient=",0,0">
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<description no_lang="1" align="right" id="{$row}[info_number]" class="infoId"/>
|
||||
</hbox>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
</vbox>
|
||||
@ -172,9 +180,9 @@
|
||||
<date-time id="${row}[info_datecompleted]" readonly="true"/>
|
||||
</vbox>
|
||||
<vbox data="" rows="3" cols="1" options="3">
|
||||
<date-duration id="${row}[info_used_time]" readonly="true" options=",,,,1"/>
|
||||
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options=",,,,1" class="timesheet"/>
|
||||
<date-duration id="${row}[info_planned_time]" span="all" class="planned" readonly="true" options=",,,,1"/>
|
||||
<date-duration id="${row}[info_used_time]" readonly="true" options="@duration_format"/>
|
||||
<date-duration id="${row}[info_sum_timesheets]" readonly="true" options="@duration_format" class="timesheet"/>
|
||||
<date-duration id="${row}[info_planned_time]" span="all" class="planned" readonly="true" options="@duration_format"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<menulist>
|
||||
|
Loading…
Reference in New Issue
Block a user