mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-24 23:58:54 +01:00
big InfoLog update:
- using popups for editing - renamed filter my to responsible - warning if a log entry has been updated, while you edit it - improved referer handling - optimisations for so class, less DB accesses
This commit is contained in:
parent
8fa2337beb
commit
95a3e604b0
@ -2,7 +2,7 @@
|
||||
/**************************************************************************\
|
||||
* eGroupWare - InfoLog Admin-, Preferences- and SideboxMenu-Hooks *
|
||||
* http://www.eGroupWare.org *
|
||||
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* Written and (c) 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 *
|
||||
@ -16,8 +16,9 @@
|
||||
* Class containing admin, preferences and sidebox-menus (used as hooks)
|
||||
*
|
||||
* @package infolog
|
||||
* @author RalfBecker-At-outdoor-training.de
|
||||
* @copyright GPL - GNU General Public License
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class admin_prefs_sidebox_hooks
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
/**************************************************************************\
|
||||
* eGroupWare - InfoLog *
|
||||
* http://www.egroupware.org *
|
||||
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* Written and (c) by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* originaly based on todo written by Joseph Engo <jengo@phpgroupware.org> *
|
||||
* -------------------------------------------- *
|
||||
* This program is free software; you can redistribute it and/or modify it *
|
||||
@ -14,16 +14,16 @@
|
||||
/* $Id$ */
|
||||
|
||||
include_once(EGW_INCLUDE_ROOT.'/infolog/inc/class.soinfolog.inc.php');
|
||||
include_once(EGW_API_INC.'/class.bolink.inc.php');
|
||||
|
||||
/**
|
||||
* This class is the BO-layer of InfoLog, it also handles xmlrpc requests
|
||||
*
|
||||
* @package infolog
|
||||
* @author RalfBecker-At-outdoor-training.de
|
||||
* @copyright GPL - GNU General Public License
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class boinfolog // BO: buiseness objects: internal logic
|
||||
class boinfolog
|
||||
{
|
||||
var $enums;
|
||||
var $so;
|
||||
@ -70,7 +70,13 @@
|
||||
*/
|
||||
var $config;
|
||||
|
||||
function boinfolog( $info_id = 0)
|
||||
/**
|
||||
* Constructor Infolog BO
|
||||
*
|
||||
* @param int $info_id
|
||||
* @param boolean $instanciate_link=true should the link class be instanciated, used by the link-registry to prevent infinit recursion
|
||||
*/
|
||||
function boinfolog($info_id = 0,$instanciate_link=true)
|
||||
{
|
||||
$this->enums = $this->stock_enums = array(
|
||||
'priority' => array (
|
||||
@ -107,7 +113,12 @@
|
||||
));
|
||||
|
||||
$this->so =& new soinfolog();
|
||||
$this->link =& new bolink();
|
||||
|
||||
if (!is_object($GLOBALS['egw']->link) && $instanciate_link)
|
||||
{
|
||||
$GLOBALS['egw']->link =& CreateObject('phpgwapi.bolink');
|
||||
}
|
||||
$this->link =& $GLOBALS['egw']->link;
|
||||
|
||||
$this->config =& CreateObject('phpgwapi.config');
|
||||
$this->config->read_repository();
|
||||
@ -184,19 +195,21 @@
|
||||
/**
|
||||
* check's if user has the requiered rights on entry $info_id
|
||||
*
|
||||
* @param int $info_id id of infolog entry to check
|
||||
* @param int/array $info data or info_id of infolog entry to check
|
||||
* @param int $required_rights EGW_ACL_{READ|EDIT|ADD|DELETE}
|
||||
* @return boolean
|
||||
*/
|
||||
function check_access( $info_id,$required_rights )
|
||||
function check_access( $info,$required_rights )
|
||||
{
|
||||
static $cache = array();
|
||||
|
||||
$info_id = is_array($info) ? $info['info_id'] : $info;
|
||||
|
||||
if (isset($cache[$info_id][$required_rights]))
|
||||
{
|
||||
return $cache[$info_id][$required_rights];
|
||||
}
|
||||
return $cache[$info_id][$required_rights] = $this->so->check_access( $info_id,$required_rights );
|
||||
return $cache[$info_id][$required_rights] = $this->so->check_access( $info,$required_rights );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -232,15 +245,18 @@
|
||||
{
|
||||
return False;
|
||||
}
|
||||
$info['info_link_view'] = $this->link->view($link['link_app'.$nr],$link['link_id'.$nr]);
|
||||
$info['info_link_title'] = !empty($info['info_from']) ? $info['info_from'] : $title;
|
||||
$info['info_link'] = array(
|
||||
'app' => $link['link_app'.$nr],
|
||||
'id' => $link['link_id'.$nr],
|
||||
'title' => (!empty($info['info_from']) ? $info['info_from'] : $title),
|
||||
);
|
||||
|
||||
//echo " title='$title'</p>\n";
|
||||
return $info['blur_title'] = $title;
|
||||
}
|
||||
else
|
||||
{
|
||||
$info['info_link_title'] = $info['info_from'];
|
||||
$info['info_link'] = array('title' => $info['info_from']);
|
||||
$info['info_link_id'] = 0; // link might have been deleted
|
||||
}
|
||||
return False;
|
||||
@ -352,12 +368,13 @@
|
||||
*
|
||||
* checks and asures ACL
|
||||
*
|
||||
* @param array $values values to write, if contains values for check_defaults and touch_modified, they have precedens over the parameters
|
||||
* @param array &$values values to write, if contains values for check_defaults and touch_modified,
|
||||
* they have precedens over the parameters. The
|
||||
* @param boolean $check_defaults=true check and set certain defaults
|
||||
* @param boolean $touch_modified=true touch the modification data and sets the modiefier's user-id
|
||||
* @return int/boolean info_id on a successfull write or false
|
||||
*/
|
||||
function write($values,$check_defaults=True,$touch_modified=True)
|
||||
function write(&$values,$check_defaults=True,$touch_modified=True)
|
||||
{
|
||||
//echo "boinfolog::write()values="; _debug_array($values);
|
||||
// allow to (un)set check_defaults and touch_modified via values, eg. via xmlrpc
|
||||
@ -369,6 +386,7 @@
|
||||
unset($values[$var]);
|
||||
}
|
||||
}
|
||||
// fix old names
|
||||
foreach($values as $key => $val)
|
||||
{
|
||||
if ($key[0] != '#' && substr($key,0,5) != 'info_')
|
||||
@ -408,9 +426,12 @@
|
||||
$set_enddate = !$values['info_enddate'] && // set enddate of finished job, only if its not already set
|
||||
($values['info_status'] == 'done' || $values['info_status'] == 'billed');
|
||||
|
||||
$backup_values = $values; // to return the full values
|
||||
$values = array(
|
||||
'info_id' => $values['info_id'],
|
||||
'info_id' => $values['info_id'],
|
||||
'info_status' => $values['info_status'],
|
||||
'info_owner' => $values['info_owner'],
|
||||
'info_datemodified' => $values['info_datemodified'],
|
||||
);
|
||||
if ($set_enddate)
|
||||
{
|
||||
@ -444,18 +465,21 @@
|
||||
}
|
||||
if ($touch_modified || !$values['info_datemodified'])
|
||||
{
|
||||
$check_modified = $values['info_datemodified'] ? $values['info_datemodified']-$this->tz_offset_s : false;
|
||||
$values['info_datemodified'] = $this->user_time_now;
|
||||
}
|
||||
if ($touch_modified || !$values['info_modifier'])
|
||||
{
|
||||
$values['info_modifier'] = $this->so->user;
|
||||
}
|
||||
$to_write = $values;
|
||||
if ($status_only) $values = array_merge($backup_values,$values);
|
||||
// convert user- to system-time
|
||||
foreach(array('info_startdate','info_enddate','info_datemodified') as $time)
|
||||
{
|
||||
if ($values[$time]) $values[$time] -= $this->tz_offset_s;
|
||||
if ($to_write[$time]) $to_write[$time] -= $this->tz_offset_s;
|
||||
}
|
||||
if($info_id = $this->so->write($values))
|
||||
if(($info_id = $this->so->write($to_write,$check_modified)))
|
||||
{
|
||||
if (!isset($values['info_type']) || $status_only)
|
||||
{
|
||||
@ -477,10 +501,11 @@
|
||||
$info_id, 'add', time()
|
||||
);
|
||||
}
|
||||
$values['info_id'] = $info_id;
|
||||
|
||||
// notify the link-class about the update, as other apps may be subscribt to it
|
||||
$this->link->notify_update('infolog',$info_id,$values);
|
||||
}
|
||||
|
||||
return $info_id;
|
||||
}
|
||||
|
||||
@ -537,13 +562,39 @@
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook called by link-class to include infolog in the appregistry of the linkage
|
||||
*
|
||||
* @param array/string $location location and other parameters (not used)
|
||||
* @return array with method-names
|
||||
*/
|
||||
function search_link($location)
|
||||
{
|
||||
return array(
|
||||
'query' => 'infolog.boinfolog.link_query',
|
||||
'title' => 'infolog.boinfolog.link_title',
|
||||
'view' => array(
|
||||
'menuaction' => 'infolog.uiinfolog.index',
|
||||
'action' => 'sp'
|
||||
),
|
||||
'view_id' => 'action_id',
|
||||
'add' => array(
|
||||
'menuaction' => 'infolog.uiinfolog.edit',
|
||||
'type' => 'task'
|
||||
),
|
||||
'add_app' => 'action',
|
||||
'add_id' => 'action_id',
|
||||
'add_popup' => '750x550',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* get title for an infolog entry identified by $info
|
||||
*
|
||||
* Is called as hook to participate in the linking
|
||||
*
|
||||
* @param int/array $info int info_id or array with infolog entry
|
||||
* @param string the title
|
||||
* @return string the title
|
||||
*/
|
||||
function link_title( $info )
|
||||
{
|
||||
|
37
infolog/inc/class.infolog_link_registry.inc.php
Normal file
37
infolog/inc/class.infolog_link_registry.inc.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**************************************************************************\
|
||||
* eGroupWare - InfoLog *
|
||||
* http://www.egroupware.org *
|
||||
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* originaly based on todo 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 *
|
||||
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||
* option) any later version. *
|
||||
\**************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
include_once(EGW_INCLUDE_ROOT.'/infolog/inc/class.boinfolog.inc.php');
|
||||
|
||||
/**
|
||||
* This class returns the link-registry for infolog
|
||||
*
|
||||
* To prevent an invinit recursion, it has to be outside the boinfolog class,
|
||||
* which itself instanciats the link class by default.
|
||||
*
|
||||
* @package infolog
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by RalfBecker-At-outdoor-training.de
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class infolog_link_registry
|
||||
{
|
||||
function search_link($location)
|
||||
{
|
||||
$bo =& new boinfolog(0,false); // false = dont instanciate the link class
|
||||
|
||||
return $bo->search_link($location);
|
||||
}
|
||||
}
|
@ -22,8 +22,9 @@
|
||||
* and for pgSql 7.3 compatibility
|
||||
*
|
||||
* @package infolog
|
||||
* @author RalfBecker-At-outdoor-training.de
|
||||
* @copyright GPL - GNU General Public License
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class soinfolog // DB-Layer
|
||||
{
|
||||
@ -54,24 +55,28 @@
|
||||
/**
|
||||
* checks if user has the $required_rights to access $info_id (private access is handled too)
|
||||
*
|
||||
* @param $info_id Id of InfoLog entry
|
||||
* @param $required_rights EGW_ACL_xyz anded together
|
||||
* @param array/int $info data or info_id of InfoLog entry
|
||||
* @param int $required_rights EGW_ACL_xyz anded together
|
||||
* @return boolean True if access is granted else False
|
||||
*/
|
||||
function check_access( $info_id,$required_rights )
|
||||
function check_access( $info,$required_rights )
|
||||
{
|
||||
if ($info_id != $this->data['info_id']) // already loaded?
|
||||
if (is_array($info))
|
||||
{
|
||||
|
||||
}
|
||||
elseif ((int) $info != $this->data['info_id']) // already loaded?
|
||||
{
|
||||
// dont change our own internal data,
|
||||
// dont use new as it changes $phpgw->db
|
||||
$private_info = $this;
|
||||
$info = $private_info->read($info_id);
|
||||
$info = $private_info->read($info);
|
||||
}
|
||||
else
|
||||
{
|
||||
$info = $this->data;
|
||||
}
|
||||
if (!$info || !$info_id)
|
||||
if (!$info)
|
||||
{
|
||||
return False;
|
||||
}
|
||||
@ -344,11 +349,12 @@
|
||||
* writes the given $values to InfoLog, a new entry gets created if info_id is not set or 0
|
||||
*
|
||||
* @param array $values with the data of the log-entry
|
||||
* @return int the info_id
|
||||
* @param int $check_modified=0 old modification date to check before update (include in WHERE)
|
||||
* @return int/boolean info_id, false on error or 0 if the entry has been updated in the meantime
|
||||
*/
|
||||
function write($values) // did _not_ ensure ACL
|
||||
function write($values,$check_modified=0) // did _not_ ensure ACL
|
||||
{
|
||||
//echo "soinfolog::write()values="; _debug_array($values);
|
||||
//echo "soinfolog::write(,$check_modified) values="; _debug_array($values);
|
||||
$info_id = (int) $values['info_id'];
|
||||
|
||||
if (isset($values['info_responsible']))
|
||||
@ -366,14 +372,20 @@
|
||||
}
|
||||
if (($this->data['info_id'] = $info_id))
|
||||
{
|
||||
$this->db->update($this->info_table,$to_write,array('info_id'=>$info_id),__LINE__,__FILE__);
|
||||
$where = array('info_id' => $info_id);
|
||||
if ($check_modified) $where['info_datemodified'] = $check_modified;
|
||||
if (!$this->db->update($this->info_table,$to_write,$where,__LINE__,__FILE__))
|
||||
{
|
||||
return false; // Error
|
||||
}
|
||||
if ($this->db->affected_rows() < 1) return 0; // someone else updated the modtime or deleted the entry
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isset($to_write['info_id_parent'])) $to_write['info_id_parent'] = 0; // must not be null
|
||||
|
||||
$this->db->insert($this->info_table,$to_write,false,__LINE__,__FILE__);
|
||||
$this->data['info_id']=$this->db->get_last_insert_id($this->info_table,'info_id');
|
||||
$this->data['info_id'] = $this->db->get_last_insert_id($this->info_table,'info_id');
|
||||
}
|
||||
//echo "<p>soinfolog.write values= "; _debug_array($values);
|
||||
|
||||
@ -401,6 +413,8 @@
|
||||
/**
|
||||
* count the sub-entries of $info_id
|
||||
*
|
||||
* This is done now be search too (in key info_anz_subs), if DB can use sub-queries
|
||||
*
|
||||
* @param $info_id id of log-entry
|
||||
* @return int the number of sub-entries
|
||||
*/
|
||||
@ -423,6 +437,8 @@
|
||||
/**
|
||||
* searches InfoLog for a certain pattern in $query
|
||||
*
|
||||
* If DB can use sub-queries, the number of subs are under the key info_anz_subs.
|
||||
*
|
||||
* @param $query[order] column-name to sort after
|
||||
* @param $query[sort] sort-order DESC or ASC
|
||||
* @param $query[filter] string with combination of acl-, date- and status-filters, eg. 'own-open-today' or ''
|
||||
@ -450,7 +466,7 @@
|
||||
|
||||
if (count($links))
|
||||
{
|
||||
$link_extra = ($action == 'sp' ? 'OR' : 'AND')." $this->info_table.info_id IN (".implode(',',$links).')';
|
||||
$link_extra = ($action == 'sp' ? 'OR' : 'AND')." main.info_id IN (".implode(',',$links).')';
|
||||
}
|
||||
}
|
||||
if (!empty($query['order']) && eregi('^[a-z_0-9, ]+$',$query['order']) && (empty($query['sort']) || eregi('^(DESC|ASC)$',$query['sort'])))
|
||||
@ -460,9 +476,11 @@
|
||||
{
|
||||
$val = trim($val);
|
||||
$val = (substr($val,0,5) != 'info_' ? 'info_' : '').$val;
|
||||
if ($val == 'info_des' && $this->db->Type == 'mssql')
|
||||
if ($val == 'info_des' && $this->db->capabilities['order_on_text'] !== true)
|
||||
{
|
||||
$val = "CAST($val AS varchar)";
|
||||
if (!$this->db->capabilities['order_on_text']) continue;
|
||||
|
||||
$val = sprintf($this->db->capabilities['order_on_text'],$val);
|
||||
}
|
||||
$order[] = $val;
|
||||
}
|
||||
@ -472,7 +490,7 @@
|
||||
{
|
||||
$ordermethod = 'ORDER BY info_datemodified DESC'; // newest first
|
||||
}
|
||||
$filtermethod = $this->aclFilter($query['filter']);
|
||||
$acl_filter = $filtermethod = $this->aclFilter($query['filter']);
|
||||
$filtermethod .= $this->statusFilter($query['filter']);
|
||||
$filtermethod .= $this->dateFilter($query['filter']);
|
||||
|
||||
@ -509,24 +527,20 @@
|
||||
$cats = $GLOBALS['egw']->categories->return_all_children((int)$query['cat_id']);
|
||||
$filtermethod .= ' AND info_cat'.(count($cats)>1? ' IN ('.implode(',',$cats).') ' : '='.(int)$query['cat_id']);
|
||||
}
|
||||
$join = '';
|
||||
$join = $distinct = $count_subs = '';
|
||||
if ($query['query']) $query['search'] = $query['query']; // allow both names
|
||||
if ($query['search']) // we search in _from, _subject, _des and _extra_value for $query
|
||||
{
|
||||
$pattern = $this->db->quote('%'.$query['search'].'%');
|
||||
|
||||
$columns = array('info_from','info_subject','info_extra_value');
|
||||
switch($this->db->Type)
|
||||
{
|
||||
case 'sapdb':
|
||||
case 'maxdb':
|
||||
// at the moment MaxDB 7.5 cant cast nor search text columns, it's suppost to change in 7.6
|
||||
break;
|
||||
default:
|
||||
$columns[] = 'info_des';
|
||||
}
|
||||
// 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) ";
|
||||
$join = "LEFT JOIN $this->extra_table ON $this->info_table.info_id=$this->extra_table.info_id";
|
||||
$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' : '';
|
||||
}
|
||||
$pid = 'AND info_id_parent='.($action == 'sp' ? $query['action_id'] : 0);
|
||||
|
||||
@ -538,26 +552,20 @@
|
||||
$ids = array( );
|
||||
if ($action == '' || $action == 'sp' || count($links))
|
||||
{
|
||||
$sql_query = "FROM $this->info_table $join WHERE ($filtermethod $pid $sql_query) $link_extra";
|
||||
switch($this->db->Type)
|
||||
{
|
||||
// mssql and others cant use DISTICT if text columns (info_des) are involved
|
||||
case 'mssql':
|
||||
case 'sapdb':
|
||||
case 'maxdb':
|
||||
$distinct = '';
|
||||
break;
|
||||
default:
|
||||
$distinct = 'DISTINCT';
|
||||
}
|
||||
$this->db->query($sql="SELECT $distinct $this->info_table.info_id ".$sql_query,__LINE__,__FILE__);
|
||||
$sql_query = "FROM $this->info_table main $join WHERE ($filtermethod $pid $sql_query) $link_extra";
|
||||
|
||||
$this->db->query($sql="SELECT $distinct main.info_id ".$sql_query,__LINE__,__FILE__);
|
||||
$query['total'] = $this->db->num_rows();
|
||||
|
||||
if (!$query['start'] || $query['start'] > $query['total'])
|
||||
{
|
||||
$query['start'] = 0;
|
||||
}
|
||||
$this->db->limit_query($sql="SELECT $distinct $this->info_table.* $sql_query $ordermethod",$query['start'],__LINE__,__FILE__);
|
||||
if ($this->db->capabilities['sub_queries'])
|
||||
{
|
||||
$count_subs = ",(SELECT count(*) FROM $this->info_table sub WHERE sub.info_id_parent=main.info_id AND $acl_filter) AS info_anz_subs";
|
||||
}
|
||||
$this->db->limit_query($sql="SELECT $distinct main.* $count_subs $sql_query $ordermethod",$query['start'],__LINE__,__FILE__);
|
||||
//echo "<p>sql='$sql'</p>\n";
|
||||
while (($info =& $this->db->row(true)))
|
||||
{
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
/**************************************************************************\
|
||||
* eGroupWare - InfoLog: Custom fields, typ and status *
|
||||
* eGroupWare - InfoLog: Administration of custom fields, type and status *
|
||||
* http://www.egroupware.org *
|
||||
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* Written and (c) 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 *
|
||||
@ -12,6 +12,14 @@
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/**
|
||||
* Administration of custom fields, type and status
|
||||
*
|
||||
* @package infolog
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class uicustomfields
|
||||
{
|
||||
var $public_functions = array
|
||||
@ -30,12 +38,11 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* @author ralfbecker
|
||||
* Edit/Create an InfoLog Custom fields, typ and status
|
||||
*
|
||||
* @param $content Content from the eTemplate Exec
|
||||
* @param array $content Content from the eTemplate Exec
|
||||
*/
|
||||
function edit($content = 0)
|
||||
function edit($content=null)
|
||||
{
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.lang('Custom fields, typ and status');
|
||||
if (is_array($content))
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
/**************************************************************************\
|
||||
* eGroupWare - InfoLog *
|
||||
* http://www.egroupware.org *
|
||||
* Written by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* http://www.egroupware.org *
|
||||
* Written and copyright by Ralf Becker <RalfBecker@outdoor-training.de> *
|
||||
* originaly based on todo written by Joseph Engo <jengo@phpgroupware.org> *
|
||||
* -------------------------------------------- *
|
||||
* This program is free software; you can redistribute it and/or modify it *
|
||||
@ -19,8 +19,9 @@
|
||||
* This class is the UI-layer (user interface) of InfoLog
|
||||
*
|
||||
* @package infolog
|
||||
* @author RalfBecker-At-outdoor-training.de
|
||||
* @copyright GPL - GNU General Public License
|
||||
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @copyright (c) by Ralf Becker <RalfBecker@outdoor-training.de>
|
||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||
*/
|
||||
class uiinfolog
|
||||
{
|
||||
@ -68,10 +69,10 @@
|
||||
$this->filters = array(
|
||||
'none' => 'no Filter',
|
||||
'done' => 'done',
|
||||
'my' => 'my',
|
||||
'my-open-today' => 'my open',
|
||||
'my-open-overdue' => 'my overdue',
|
||||
'my-upcoming' => 'my upcoming',
|
||||
'my' => 'responsible',
|
||||
'my-open-today' => 'responsible open',
|
||||
'my-open-overdue' => 'responsible overdue',
|
||||
'my-upcoming' => 'responsible upcoming',
|
||||
'own' => 'own',
|
||||
'own-open-today' => 'own open',
|
||||
'own-open-overdue' => 'own overdue',
|
||||
@ -91,7 +92,7 @@
|
||||
$this->link = &$this->bo->link;
|
||||
|
||||
$this->tmpl =& CreateObject('etemplate.etemplate');
|
||||
$this->html = &$this->tmpl->html;
|
||||
$this->html =& $this->tmpl->html;
|
||||
|
||||
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
||||
|
||||
@ -111,14 +112,14 @@
|
||||
{
|
||||
$info['end_class'] = 'overdue';
|
||||
}
|
||||
$info['info_anz_subs'] = $this->bo->anzSubs($id);
|
||||
if (!isset($info['info_anz_subs'])) $info['info_anz_subs'] = $this->bo->anzSubs($id);
|
||||
$this->bo->link_id2from($info,$action,$action_id); // unset from for $action:$action_id
|
||||
|
||||
$readonlys["edit[$id]"] = !$this->bo->check_access($id,EGW_ACL_EDIT);
|
||||
$readonlys["close[$id]"] = $done || ($readonlys["edit_status[$id]"] = !($this->bo->check_access($id,EGW_ACL_EDIT) ||
|
||||
$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["delete[$id]"] = !$this->bo->check_access($id,EGW_ACL_DELETE);
|
||||
$readonlys["sp[$id]"] = !$this->bo->check_access($id,EGW_ACL_ADD);
|
||||
$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;
|
||||
$readonlys['view[0]'] = True; // no parent
|
||||
|
||||
@ -190,24 +191,49 @@
|
||||
}
|
||||
$rows[] = $info;
|
||||
}
|
||||
if ($query['no_actions']) $rows['no_actions'] = true;
|
||||
//echo "<p>readonlys = "; _debug_array($readonlys);
|
||||
//echo "rows=<pre>".print_r($rows,True)."</pre>\n";
|
||||
|
||||
return $query['total'];
|
||||
}
|
||||
|
||||
function index($values = 0,$action='',$action_id='',$referer=0,$extra_app_header=False,$return_html=False,$own_referer='')
|
||||
/**
|
||||
* Shows the infolog list
|
||||
*
|
||||
* @param array $values=null etemplate content
|
||||
* @param string $action='' if set only entries liked to that $action:$action_id are shown
|
||||
* @param string $action_id='' if set only entries liked to that $action:$action_id are shown
|
||||
* @param mixed $called_as=0 this is how we got called, for a hook eg. the call-params of that page containing the hook
|
||||
* @param boolean $extra_app_header=false
|
||||
* @param boolean $return_html=false
|
||||
* @param string $own_referer='' this is our own referer
|
||||
*/
|
||||
function index($values = 0,$action='',$action_id='',$called_as=0,$extra_app_header=False,$return_html=False,$own_referer='')
|
||||
{
|
||||
if (is_array($values))
|
||||
{
|
||||
$referer = $values['referer'];
|
||||
$called_as = $values['called_as'];
|
||||
$own_referer = $values['own_referer'];
|
||||
}
|
||||
elseif ($own_referer !== '')
|
||||
elseif ($own_referer === '')
|
||||
{
|
||||
$own_referer = $GLOBALS['egw']->common->get_referer();
|
||||
if (strstr($own_referer,'menuaction=infolog.uiinfolog.edit'))
|
||||
{
|
||||
$own_referer = $GLOBALS['egw']->session->appsession('own_session','infolog');
|
||||
}
|
||||
else
|
||||
{
|
||||
$GLOBALS['egw']->session->appsession('own_session','infolog',$own_referer);
|
||||
}
|
||||
}
|
||||
//echo "<p>uiinfolog::index(action='$action/$action_id',referer='$referer/$values[referer]') values=\n"; _debug_array($values);
|
||||
if (!$action)
|
||||
{
|
||||
$action = $values['action'] ? $values['action'] : get_var('action',array('POST','GET'));
|
||||
$action_id = $values['action_id'] ? $values['action_id'] : get_var('action_id',array('POST','GET'));
|
||||
}
|
||||
//echo "<p>uiinfolog::index(action='$action/$action_id',called_as='$called_as/$values[referer]',own_referer='$own_referer') values=\n"; _debug_array($values);
|
||||
if (!is_array($values))
|
||||
{
|
||||
$values = array('nm' => $this->read_sessiondata());
|
||||
@ -221,11 +247,9 @@
|
||||
$values['nm']['order'] = 'info_datemodified';
|
||||
$values['nm']['sort'] = 'DESC';
|
||||
}
|
||||
}
|
||||
if ($action == '')
|
||||
{
|
||||
$action = $values['action'] ? $values['action'] : get_var('action',array('POST','GET'));
|
||||
$action_id = $values['action_id'] ? $values['action_id'] : get_var('action_id',array('POST','GET'));
|
||||
$values['msg'] = $_GET['msg'];
|
||||
$values['action'] = $action;
|
||||
$values['action_id'] = $action_id;
|
||||
}
|
||||
if ($values['nm']['add'])
|
||||
{
|
||||
@ -237,7 +261,7 @@
|
||||
if ($values['add'])
|
||||
{
|
||||
list($type) = each($values['add']);
|
||||
return $this->edit(0,$action,$action_id,$type,$referer);
|
||||
return $this->edit(0,$action,$action_id,$type,$called_as);
|
||||
}
|
||||
elseif ($values['cancel'] && $own_referer)
|
||||
{
|
||||
@ -247,18 +271,19 @@
|
||||
{
|
||||
list($do,$do_id) = isset($values['main']) ? each($values['main']) : @each($values['nm']['rows']);
|
||||
list($do_id) = @each($do_id);
|
||||
//echo "<p>infolog::index: do='$do/$do_id', referer="; _debug_array($referer);
|
||||
//echo "<p>infolog::index: do='$do/$do_id', referer="; _debug_array($called_as);
|
||||
switch($do)
|
||||
{
|
||||
case 'edit':
|
||||
case 'edit_status':
|
||||
return $this->edit($do_id,$action,$action_id,'',$referer);
|
||||
return $this->edit($do_id,$action,$action_id,'',$called_as);
|
||||
case 'delete':
|
||||
return $this->delete($do_id,$referer);
|
||||
if (!($values['msg'] = $this->delete($do_id,$called_as,'index'))) return;
|
||||
break;
|
||||
case 'close':
|
||||
return $this->close($do_id,$referer);
|
||||
return $this->close($do_id,$called_as);
|
||||
case 'sp':
|
||||
return $this->edit(0,'sp',$do_id,'',$referer);
|
||||
return $this->edit(0,'sp',$do_id,'',$called_as);
|
||||
case 'view':
|
||||
$value = array();
|
||||
$action = 'sp';
|
||||
@ -301,7 +326,7 @@
|
||||
$GLOBALS['egw_info']['user']['preferences']['infolog']['never_hide'] : $GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'] > 15;
|
||||
$persist['action'] = $values['nm']['action'] = $action;
|
||||
$persist['action_id'] = $values['nm']['action_id'] = $action_id;
|
||||
$persist['referer'] = $referer;
|
||||
$persist['called_as'] = $called_as;
|
||||
$persist['own_referer'] = $own_referer;
|
||||
|
||||
$all_stati = array();
|
||||
@ -325,24 +350,44 @@
|
||||
|
||||
if ($info_id)
|
||||
{
|
||||
$this->bo->write(array(
|
||||
$values = array(
|
||||
'info_id' => $info_id,
|
||||
'info_status' => 'done',
|
||||
));
|
||||
);
|
||||
$this->bo->write($values);
|
||||
}
|
||||
return $referer ? $this->tmpl->location($referer) : $this->index();
|
||||
}
|
||||
|
||||
function delete($values=0,$referer='')
|
||||
function delete($values=0,$referer='',$called_by='')
|
||||
{
|
||||
$info_id = (int) (is_array($values) ? $values['info_id'] : ($values ? $values : $_GET['info_id']));
|
||||
$referer = is_array($values) ? $values['referer'] : $referer;
|
||||
|
||||
if (!is_array($values) && $info_id > 0 && !$this->bo->anzSubs($info_id)) // entries without subs get confirmed by javascript
|
||||
{
|
||||
$values = array('delete' => true);
|
||||
}
|
||||
//echo "<p>uiinfolog::delete(".print_r($values,true).",'$referer','$called_by') info_id=$info_id</p>\n";
|
||||
|
||||
if (is_array($values) || $info_id <= 0)
|
||||
{
|
||||
if ($values['delete'] && $info_id > 0 && $this->bo->check_access($info_id,EGW_ACL_DELETE))
|
||||
if (($values['delete'] || $values['delete_subs']) && $info_id > 0 && $this->bo->check_access($info_id,EGW_ACL_DELETE))
|
||||
{
|
||||
$this->bo->delete($info_id,$values['remove_subs'],$values['info_id_parent']);
|
||||
$deleted = $this->bo->delete($info_id,$values['delete_subs'],$values['info_id_parent']);
|
||||
}
|
||||
if ($called_by) // direct call from the same request
|
||||
{
|
||||
return $deleted ? lang('InfoLog entry deleted') : '';
|
||||
}
|
||||
if ($values['called_by'] == 'edit') // we run in the edit popup => give control back to edit
|
||||
{
|
||||
$this->edit(array(
|
||||
'info_id' => $info_id,
|
||||
'button' => array('deleted' => true), // not delete!
|
||||
'referer' => $referer,
|
||||
'msg' => $deleted ? lang('Infolog entry deleted') : '',
|
||||
));
|
||||
}
|
||||
return $referer ? $this->tmpl->location($referer) : $this->index();
|
||||
}
|
||||
@ -351,16 +396,27 @@
|
||||
|
||||
$this->tmpl->read('infolog.delete');
|
||||
|
||||
$values['main']['no_actions'] = True;
|
||||
$values['remove_subs'] = $this->bo->anzSubs($info_id) > 0;
|
||||
$values['nm'] = array(
|
||||
'action' => 'sp',
|
||||
'action_id' => $info_id,
|
||||
'options-filter' => $this->filters,
|
||||
'get_rows' => 'infolog.uiinfolog.get_rows',
|
||||
'no_filter2' => True,
|
||||
'never_hide' => isset($GLOBALS['egw_info']['user']['preferences']['infolog']['never_hide']) ?
|
||||
$GLOBALS['egw_info']['user']['preferences']['infolog']['never_hide'] :
|
||||
$GLOBALS['egw_info']['user']['preferences']['common']['maxmatchs'] > 15,
|
||||
);
|
||||
$values['main']['no_actions'] = $values['nm']['no_actions'] = True;
|
||||
|
||||
$persist['info_id'] = $info_id;
|
||||
$persist['referer'] = $referer;
|
||||
$persist['info_id_parent'] = $values['main'][1]['info_id_parent'];
|
||||
$persist['info_id_parent'] = $values['main'][1]['info_id_parent'];
|
||||
$persist['called_by'] = $called_by;
|
||||
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.lang('Delete');
|
||||
$GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => 'ManualInfologDelete');
|
||||
|
||||
$this->tmpl->exec('infolog.uiinfolog.delete',$values,'',$readonlys,$persist);
|
||||
$this->tmpl->exec('infolog.uiinfolog.delete',$values,'',$readonlys,$persist,$called_by == 'edit' ? 2 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -381,14 +437,19 @@
|
||||
$action = $content['action'];
|
||||
$action_id = $content['action_id'];
|
||||
$referer = $content['referer'];
|
||||
$no_popup = $content['no_popup'];
|
||||
$caller = $content['caller'];
|
||||
|
||||
if (isset($content['link_to']['primary']))
|
||||
{
|
||||
$content['info_link_id'] = $content['link_to']['primary'];
|
||||
}
|
||||
if ($content['save'] || $content['delete'] || $content['cancel'])
|
||||
list($button) = @each($content['button']);
|
||||
unset($content['button']);
|
||||
if ($button)
|
||||
{
|
||||
if ($content['save'] && $info_id)
|
||||
//echo "<p>uiinfolog::edit(info_id=$info_id) '$button' button pressed, content="; _debug_array($content);
|
||||
if (($button == 'save' || $button == 'apply') && $info_id)
|
||||
{
|
||||
if (!($edit_acl = $this->bo->check_access($info_id,EGW_ACL_EDIT)))
|
||||
{
|
||||
@ -396,50 +457,83 @@
|
||||
$status_only = in_array($this->user, $old['info_responsible']);
|
||||
}
|
||||
}
|
||||
if ($content['save'] && (!$info_id || $edit_acl || $status_only))
|
||||
if (($button == 'save' || $button == 'apply') && (!$info_id || $edit_acl || $status_only))
|
||||
{
|
||||
if (strstr($content['info_link_id'],':') !== False)
|
||||
if (is_array($content['link_to']['to_id']) && count($content['link_to']['to_id']))
|
||||
{
|
||||
$info_link_id = $content['info_link_id'];
|
||||
$content['info_link_id'] = 0; // as field has to be int
|
||||
$first_link_to = $content['link_to']['to_id'];
|
||||
if (strstr($content['info_link_id'],':') !== False)
|
||||
{
|
||||
$info_link_id = $content['info_link_id'];
|
||||
$content['info_link_id'] = 0; // as field has to be int
|
||||
}
|
||||
}
|
||||
if ($status_only)
|
||||
if (!($info_id = $this->bo->write($content)))
|
||||
{
|
||||
$content = array(
|
||||
'info_id' => $content['info_id'],
|
||||
'info_status' => $content['info_status']
|
||||
);
|
||||
$content['msg'] = $info_id !== 0 || !$content['info_id'] ? lang('Error: saving the entry') :
|
||||
lang('Error: the entry has been updated since you opened it for editing!').'<br />'.
|
||||
lang('Copy your changes to the clipboard, %1reload the entry%2 and merge them.','<a href="'.
|
||||
htmlspecialchars($GLOBALS['egw']->link('/index.php',array(
|
||||
'menuaction' => 'infolog.uiinfolog.edit',
|
||||
'info_id' => $content['info_id'],
|
||||
'no_popup' => $no_popup,
|
||||
'referer' => $referer,
|
||||
))).'">','</a>');
|
||||
$button = ''; // not exiting edit
|
||||
$info_id = $content['info_id'];
|
||||
}
|
||||
$this->bo->write($content);
|
||||
else
|
||||
{
|
||||
$content['msg'] = lang('InfoLog entry saved');
|
||||
$content['js'] = "opener.location.href='".$GLOBALS['egw']->link($referer,array('msg' => $content['msg']))."';";
|
||||
}
|
||||
if ($info_id && $first_link_to) // writing links for a new entry
|
||||
{
|
||||
$this->link->link('infolog',$info_id,$first_link_to);
|
||||
|
||||
if (!$info_id && is_array($content['link_to']['to_id'])) // writing link for new entry
|
||||
{
|
||||
$content['info_id'] = $this->bo->so->data['info_id'];
|
||||
$this->link->link('infolog',$content['info_id'],$content['link_to']['to_id']);
|
||||
if ($info_link_id)
|
||||
{
|
||||
list($app,$id) = explode(':',$info_link_id);
|
||||
$link = $this->link->get_link('infolog',$content['info_id'],$app,$id);
|
||||
$link = $this->link->get_link('infolog',$info_id,$app,$id);
|
||||
$content['info_link_id'] = $link['link_id'];
|
||||
|
||||
$this->bo->write(array(
|
||||
$to_write = array(
|
||||
'info_id' => $content['info_id'],
|
||||
'info_link_id' => $content['info_link_id'],
|
||||
'info_from' => $content['info_from']
|
||||
),False);
|
||||
'info_from' => $content['info_from'],
|
||||
'info_owner' => $content['info_owner'],
|
||||
);
|
||||
$this->bo->write($to_write,False);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif ($content['delete'] && $info_id > 0)
|
||||
elseif ($button == 'delete' && $info_id > 0)
|
||||
{
|
||||
if (!$referer && $action) $referer = array(
|
||||
'menuaction' => 'infolog.uiinfolog.index',
|
||||
'action' => $action,
|
||||
'action_id' => $action_id
|
||||
);
|
||||
return $this->delete($info_id,$referer); // checks ACL first
|
||||
if (!($content['msg'] = $this->delete($info_id,$referer,'edit'))) return; // checks ACL first
|
||||
|
||||
$content['js'] = "opener.location.href='".$GLOBALS['egw']->link($referer,array('msg' => $content['msg']))."';";
|
||||
}
|
||||
return $referer ? $this->tmpl->location($referer) : $this->index(0,$action,$action_id);
|
||||
// called again after delete confirmation dialog
|
||||
elseif ($button == 'deleted' && $content['msg'])
|
||||
{
|
||||
$content['js'] = "opener.location.href='".$GLOBALS['egw']->link($referer,array('msg' => $content['msg']))."';";
|
||||
}
|
||||
if ($button == 'save' || $button == 'cancel' || $button == 'delete' || $button == 'deleted')
|
||||
{
|
||||
if ($no_popup)
|
||||
{
|
||||
$GLOBALS['egw']->redirect_link($referer,array('msg' => $content['msg']));
|
||||
}
|
||||
$content['js'] .= 'window.close();';
|
||||
echo '<html><body onload="'.$content['js'].'"></body></html>';
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
}
|
||||
if ($content['js']) $content['js'] = '<script>'.$content['js'].'</script>';
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -449,7 +543,10 @@
|
||||
$action_id = $action_id ? $action_id : get_var('action_id',array('POST','GET'));
|
||||
$info_id = $content ? $content : get_var('info_id', array('POST','GET'));
|
||||
$type = $type ? $type : get_var('type', array('POST','GET'));
|
||||
$referer = $referer !== '' ? $referer : $GLOBALS['egw']->common->get_referer();
|
||||
$referer = $referer !== '' ? $referer : ($_GET['referer'] ? $_GET['referer'] :
|
||||
$GLOBALS['egw']->common->get_referer('/index.php?menuaction=infolog.uiinfolog.index'));
|
||||
$referer = preg_replace('/[&?]{1}msg=[^&]+/','',$referer); // remove previou/old msg from referer
|
||||
$no_popup = $_GET['no_popup'];
|
||||
//echo "<p>uiinfolog::edit: info_id=$info_id, action='$action', action_id='$action_id', type='$type', referer='$referer'</p>\n";
|
||||
|
||||
$content = $this->bo->read( $info_id || $action != 'sp' ? $info_id : $action_id );
|
||||
@ -496,7 +593,7 @@
|
||||
{
|
||||
if ($info_id && !$this->bo->check_access($info_id,EGW_ACL_EDIT))
|
||||
{
|
||||
if (in_array($this->user, $content['info_responsible']))
|
||||
if (in_array($this->user, (array)$content['info_responsible']))
|
||||
{
|
||||
$content['status_only'] = True;
|
||||
foreach($content as $name => $value)
|
||||
@ -509,9 +606,18 @@
|
||||
$readonlys['#'.$name] = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
else // Permission denied
|
||||
{
|
||||
return $referer ? $this->tmpl->location($referer) : $this->index(0,$action,$action_id);
|
||||
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_exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -549,6 +655,7 @@
|
||||
case 'new': // new entry
|
||||
$content['info_startdate'] = (int) $_GET['startdate'] ? (int) $_GET['startdate'] : $today;
|
||||
$content['info_priority'] = 1; // normal
|
||||
$content['info_owner'] = $this->user;
|
||||
if ($type != '')
|
||||
{
|
||||
$content['info_type'] = $type;
|
||||
@ -564,8 +671,10 @@
|
||||
$content['info_type'] = 'note';
|
||||
}
|
||||
}
|
||||
$readonlys['delete'] = !$info_id || !$this->bo->check_access($info_id,EGW_ACL_DELETE);
|
||||
|
||||
if (!($readonlys['delete'] = !$info_id || !$this->bo->check_access($info_id,EGW_ACL_DELETE)))
|
||||
{
|
||||
$content['info_anz_subs'] = $this->bo->anzSubs($info_id); // to determine js confirmation of delete or not
|
||||
}
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang($this->messages[$info_id ? 'edit' : ($action == 'sp' ? 'add_sub' : 'add')]);
|
||||
|
||||
$this->tmpl->read('infolog.edit');
|
||||
@ -576,27 +685,30 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->tmpl->set_cell_attribute('description|links|delegation|customfields','name','description|links|delegation');
|
||||
$readonlys['description|links|delegation|customfields'] = array('customfields' => true);
|
||||
}
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('InfoLog').' - '.
|
||||
($content['status_only'] ? lang('Edit Status') : lang('Edit'));
|
||||
$GLOBALS['egw_info']['flags']['params']['manual'] = array('page' => ($info_id ? 'ManualInfologEdit' : 'ManualInfologAdd'));
|
||||
|
||||
//echo "<p>uiinfolog.edit(info_id='$info_id',action='$action',action_id='$action_id') readonlys="; print_r($readonlys); echo ", content = "; _debug_array($content);
|
||||
$this->tmpl->exec('infolog.uiinfolog.edit',$content,array(
|
||||
'info_type' => $this->bo->enums['type'],
|
||||
'info_priority' => $this->bo->enums['priority'],
|
||||
'info_confirm' => $this->bo->enums['confirm'],
|
||||
'info_status' => $this->bo->status[$content['info_type']]
|
||||
),$readonlys,array(
|
||||
'info_id' => $info_id,
|
||||
'info_id_parent' => $content['info_id_parent'],
|
||||
'info_link_id' => $content['info_link_id'],
|
||||
'action' => $action,
|
||||
'action_id' => $action_id,
|
||||
'referer' => $referer,
|
||||
'link_to' => array('to_id' => $content['link_to']['to_id']) // in case tab gets not viewed
|
||||
));
|
||||
),$readonlys,array( // preserved values
|
||||
'info_id' => $info_id,
|
||||
'info_id_parent'=> $content['info_id_parent'],
|
||||
'info_link_id' => $content['info_link_id'],
|
||||
'info_owner' => $content['info_owner'],
|
||||
'info_datemodified' => $content['info_datemodified'],
|
||||
'info_modifier' => $content['info_modifier'],
|
||||
'action' => $action,
|
||||
'action_id' => $action_id,
|
||||
'referer' => $referer,
|
||||
'no_popup' => $no_popup,
|
||||
'link_to' => array('to_id' => $content['link_to']['to_id']) // in case tab gets not viewed
|
||||
),$no_popup ? 0 : 2);
|
||||
}
|
||||
|
||||
function menuaction($action = 'get_list',$app='infolog')
|
||||
|
File diff suppressed because one or more lines are too long
@ -29,13 +29,11 @@ add: infolog de Hinzuf
|
||||
all infolog de alle
|
||||
all links and attachments infolog de alle Verknüpfungen und Anhänge
|
||||
allows to set the status of an entry, eg. set a todo to done if it's finished (values depend on entry-typ) infolog de erlaubt den Status eines Eintrags zu setzen, zB. eine Aufgabe auf erledigt wenn sie beendet ist (Werte hängen vom Type des Eintrags ab)
|
||||
applies the changes infolog de übernimmt die Änderungen
|
||||
apply the changes infolog de Übernimmt die Änderungen
|
||||
are you shure you want to delete this entry ? infolog de Sind Sie sicher, dass Sie diesen Eintrag löschen wollen?
|
||||
are you sure you want to delete this entry infolog de Sind Sie sicher, dass Sie diesen Eintrag löschen wollen?
|
||||
attach a file infolog de Datei anhängen
|
||||
attach file infolog de Datei anhängen
|
||||
back to main list infolog de Zurück zur Gesamtliste
|
||||
back to projectlist infolog de Zurück zur Gesamtliste
|
||||
billed infolog de abgerechnet
|
||||
both infolog de Annahme+erledigt
|
||||
call infolog de anrufen
|
||||
@ -52,10 +50,12 @@ comment infolog de Kommentar
|
||||
configuration infolog de Konfiguration
|
||||
confirm infolog de Bestätigung
|
||||
contact infolog de Kontakt
|
||||
copy your changes to the clipboard, %1reload the entry%2 and merge them. infolog de Kopieren Sie ihre Änderungen in die Zwischenablage, %1laden den Eintrag neu%2 und fügen diese wieder ein.
|
||||
create new links infolog de Neue Verknüpfung erzeugen
|
||||
creates a new field infolog de erstellt ein neues Feld
|
||||
creates a new status with the given values infolog de erstellt einen neuen Status mit den angegebenen Werten
|
||||
creates a new typ with the given name infolog de erstellt einen neuen Typ mit dem eingegebenen Namen
|
||||
creation infolog de Erstellung
|
||||
csv-fieldname infolog de CSV-Feldname
|
||||
csv-filename infolog de CSV-Dateiname
|
||||
csv-import common de CSV-Import
|
||||
@ -74,22 +74,21 @@ default filter for infolog infolog de Standard-Filter f
|
||||
default status for a new log entry infolog de Vorgabe für den Status eines neuen Eintrags
|
||||
delegation infolog de Delegation
|
||||
delete infolog de Löschen
|
||||
delete all subs (if not subs will be subs of this enties parent or have no parent) infolog de Alle Untereinträge löschen (wenn nicht werden diese Untereinträge des übergeordneten Eintrags oder sind keine Untereinträge mehr)
|
||||
delete one record by passing its id. infolog de Einen Datensatz spezifiziert durch seine id löschen.
|
||||
delete the entry infolog de Eintrag löschen
|
||||
delete this entry infolog de diesen Eintrag löschen
|
||||
delete this entry and all listed sub-entries infolog de Diesen Eintrag und all aufgelisteten Untereinträge löschen
|
||||
deletes the selected typ infolog de löscht den ausgewählten Typ
|
||||
deletes this field infolog de löscht dieses Feld
|
||||
deletes this status infolog de löscht diesen Status
|
||||
description infolog de Beschreibung
|
||||
description can not exceed 8000 characters in length infolog de Beschreibung darf nicht länger als 8000 Zeichen sein
|
||||
determines the order the fields are displayed infolog de legt die Reihenfolge fest in der die Felder angezeigt werden
|
||||
disables a status without deleting it infolog de deaktiviert einen Status ohne ihn zu löschen
|
||||
do you want a confirmation of the responsible on: accepting, finishing the task or both infolog de wollen Sie eine Bestätigung des Verantwortlichen bei: Annahme, Beendigung der Aufgabe oder bei beidem
|
||||
done infolog de erledigt
|
||||
download infolog de Datei laden
|
||||
duration infolog de Dauer
|
||||
each value is a line like <id>[=<label>] infolog de jeder Wert ist eine Zeile im Format <id>=[<angezeigter Wert>]
|
||||
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 status infolog de Status ändern
|
||||
@ -103,6 +102,8 @@ enter a custom phone/email, leave empty if linked entry should be used infolog d
|
||||
enter a textual description of the log-entry infolog de geben Sie eine textliche Beschreibung des Eintrags ein
|
||||
enter the query pattern infolog de geben Sie ein Suchmuster ein
|
||||
entry and all files infolog de Eintrag und alle Dateien
|
||||
error: saving the entry infolog de Fehler: beim Speichern des Eintrags
|
||||
error: the entry has been updated since you opened it for editing! infolog de Fehler: der Eintrag wurde geändert seit Sie ihn zum Bearbeiten geöffnet haben!
|
||||
existing links infolog de Bestehende Verknüpfungen
|
||||
fax infolog de Fax
|
||||
fieldseparator infolog de Feldbegrenzer
|
||||
@ -122,6 +123,8 @@ infolog - import csv-file infolog de InfoLog - Import CSV-Datei
|
||||
infolog - new infolog de InfoLog - Anlegen
|
||||
infolog - new subproject infolog de InfoLog - Anlegen Teilprojekt
|
||||
infolog - subprojects from infolog de InfoLog - Teilprojekte von
|
||||
infolog entry deleted infolog de InfoLog Eintrag gelöscht
|
||||
infolog entry saved infolog de InfoLog Eintrag gespeichert
|
||||
infolog list infolog de InfoLog Liste
|
||||
infolog preferences common de InfoLog Einstellungen
|
||||
infolog-fieldname infolog de InfoLog-Feldname
|
||||
@ -141,10 +144,6 @@ longer textual description infolog de l
|
||||
low infolog de niedrig
|
||||
max length of the input [, length of the inputfield (optional)] infolog de max. Länge der Eingabe [, Länge des Eingabefeldes (optional)]
|
||||
max number of entries to display on the main screen infolog de Wieviele Einträge sollen maximal auf der Startseite angezeigt werden
|
||||
my infolog de meine
|
||||
my open infolog de meine offen
|
||||
my overdue infolog de meine überfällig
|
||||
my upcoming infolog de meine zukünftig
|
||||
name must not be empty !!! infolog de Name darf nicht leer sein !!!
|
||||
name of new type to create infolog de Name des neu anzulegenden Types
|
||||
never hide search and filters infolog de Suche und Filter niemals ausblenden
|
||||
@ -161,7 +160,7 @@ not infolog de nicht
|
||||
not assigned infolog de nicht zugewiesen
|
||||
note infolog de Notiz
|
||||
number of records to read (%1) infolog de Anzahl Datensätze lesen (%1)
|
||||
number of row for a multiline inputfield or line of a multi-select-box infolog de Anzahl Zeilen für ein Mehrzeiliges Eingabefeld oder eines mehrfachen Auswahlfeldes
|
||||
number of row for a multiline inputfield or line of a multi-select-box infolog de Anzahl Zeilen für ein mehrzeiliges Eingabefeld oder eines mehrfachen Auswahlfeldes
|
||||
offer infolog de Angebot
|
||||
ongoing infolog de in Arbeit
|
||||
only the attachments infolog de nur die Anhänge
|
||||
@ -173,12 +172,13 @@ order infolog de Reihenfolge
|
||||
overdue infolog de überfällig
|
||||
own infolog de eigene
|
||||
own open infolog de eigene offen
|
||||
own overdue infolog de eigene überfällig
|
||||
own overdue infolog de verantwortlich überfällig
|
||||
own upcoming infolog de eigene zukünftig
|
||||
path on (web-)serverside<br>eg. /var/samba/share infolog de Pfad auf (Web-)Server<br>zB. /var/samba/Share
|
||||
path to user and group files has to be outside of the webservers document-root!!! infolog de Pfad zu Benutzer- und Gruppen-Dateien MUSS AUSSERHALB des Wurzelverzeichnisses des Webservers (document-root) liegen!!!
|
||||
pattern for search in addressbook infolog de Muster für Suche im Adressbuch
|
||||
pattern for search in projects infolog de Muster für Suche des Projekts
|
||||
permission denied infolog de Zugriff verweigert
|
||||
phone infolog de Anruf
|
||||
phone/email infolog de Telefon/Email
|
||||
phonecall infolog de Telefonanruf
|
||||
@ -191,7 +191,9 @@ read one record by passing its id. infolog de Einen Datensatz spezifiziert durch
|
||||
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)
|
||||
responsible infolog de Verantwortlich
|
||||
responsible infolog de verantwortlich
|
||||
responsible open infolog de verantwortlich offen
|
||||
responsible upcoming infolog de verantwortlich zufünftig
|
||||
responsible user, priority, times infolog de Verantwortlicher, Priorität, Zeiten
|
||||
returns a list / search for records. infolog de Liefert eine Liste von / sucht nach Datensätzen.
|
||||
save infolog de Speichern
|
||||
@ -202,7 +204,7 @@ search for: infolog de Suchen nach:
|
||||
select infolog de Auswählen
|
||||
select a category for this entry infolog de eine Kategorie für diesen Eintrag auswählen
|
||||
select a priority for this task infolog de eine Priorität für diesen Eintrag auswählen
|
||||
select a responsible user: a person you want to delegate this task infolog de einen Verantwortlichen auswählen: eine Person der Sie diese Aufgabe delegieren wollen
|
||||
select a responsible user: a person you want to delegate this task infolog de Verantwortlichen auswählen: Person(en) der Sie diese Aufgabe delegieren wollen
|
||||
select a typ to edit it's status-values or delete it infolog de einen Type auswählen um seine Statuswerte zu ändern oder ihn zu löschen
|
||||
select an app to search in infolog de eine Anwendung zum Durchsuchen auswählen
|
||||
select an entry to link with infolog de einen Eintrag zum Verküpfen auswählen
|
||||
@ -226,6 +228,7 @@ startrecord infolog de Startdatensatz
|
||||
status infolog de Status
|
||||
status ... infolog de Status ...
|
||||
sub infolog de Unter-<br>einträge
|
||||
sub-entries become subs of the parent or main entries, if there's no parent infolog de Untereinträge gehören dann zum übergeordneten Eintrag oder werden Haupteinträge wenn es keinen übergeordneten gibt.
|
||||
subject infolog de Titel
|
||||
task infolog de Aufgabe
|
||||
test import (show importable records <u>only</u> in browser) infolog de Test Import (zeige importierbare Datensätze <u>nur</u> im Browser)
|
||||
@ -248,8 +251,6 @@ unlink infolog de Verk
|
||||
upcoming infolog de zukünftig
|
||||
urgency infolog de Priorität
|
||||
urgent infolog de Dringend
|
||||
use button to search for address infolog de Button zum Suchen der Adresse verwenden
|
||||
use button to search for project infolog de Button zum Suchen des Projekts verwenden
|
||||
used time infolog de benötigte Zeit
|
||||
valid path on clientside<br>eg. \\server\share or e:\ infolog de gültiger Pfad clientseitig<br>zB. \\Server\Share oder e:\
|
||||
values for selectbox infolog de Werte für die Auswahlbox
|
||||
@ -263,6 +264,7 @@ when should the todo or phonecall be started, it shows up from that date in the
|
||||
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
|
||||
yes - delete including sub-entries infolog de Ja - Löschen einschließlich Untereinträge
|
||||
you can't delete one of the stock types !!! infolog de Sie können keinen der Standardtypen löschen!!!
|
||||
you have entered an invalid ending date infolog de Sie haben ein ungültiges Enddatum eingegeben
|
||||
you have entered an invalid starting date infolog de Sie haben ein ungültiges Startdatum eingegeben
|
||||
|
@ -29,13 +29,11 @@ add: infolog en Add:
|
||||
all infolog en All
|
||||
all links and attachments infolog en all links and attachments
|
||||
allows to set the status of an entry, eg. set a todo to done if it's finished (values depend on entry-typ) infolog en allows to set the status of an entry, eg. set a ToDo to done if it's finished (values depend on entry-type)
|
||||
applies the changes infolog en applies the changes
|
||||
apply the changes infolog en Apply the changes
|
||||
are you shure you want to delete this entry ? infolog en Are you sure you want to delete this entry ?
|
||||
are you sure you want to delete this entry infolog en Are you sure you want to delete this entry
|
||||
attach a file infolog en Attach a file
|
||||
attach file infolog en Attach file
|
||||
back to main list infolog en Back to main list
|
||||
back to projectlist infolog en Back to Projectlist
|
||||
billed infolog en billed
|
||||
both infolog en both
|
||||
call infolog en call
|
||||
@ -52,10 +50,12 @@ comment infolog en Comment
|
||||
configuration infolog en Configuration
|
||||
confirm infolog en Confirm
|
||||
contact infolog en Contact
|
||||
copy your changes to the clipboard, %1reload the entry%2 and merge them. infolog en Copy your changes to the clipboard, %1reload the entry%2 and merge them.
|
||||
create new links infolog en Create new links
|
||||
creates a new field infolog en creates a new field
|
||||
creates a new status with the given values infolog en creates a new status with the given values
|
||||
creates a new typ with the given name infolog en creates a new type with the given name
|
||||
creation infolog en Creation
|
||||
csv-fieldname infolog en CSV-Fieldname
|
||||
csv-filename infolog en CSV-Filename
|
||||
csv-import common en CSV-Import
|
||||
@ -74,15 +74,14 @@ default filter for infolog infolog en Default Filter for InfoLog
|
||||
default status for a new log entry infolog en default status for a new log entry
|
||||
delegation infolog en Delegation
|
||||
delete infolog en Delete
|
||||
delete all subs (if not subs will be subs of this enties parent or have no parent) infolog en Delete all subs (if not subs will be subs of this enties parent or have no parent)
|
||||
delete one record by passing its id. infolog en Delete one record by passing its id.
|
||||
delete the entry infolog en Delete the entry
|
||||
delete this entry infolog en delete this entry
|
||||
delete this entry and all listed sub-entries infolog en Delete this entry and all listed sub-entries
|
||||
deletes the selected typ infolog en deletes the selected type
|
||||
deletes this field infolog en deletes this field
|
||||
deletes this status infolog en deletes this status
|
||||
description infolog en Description
|
||||
description can not exceed 8000 characters in length infolog en Description can not exceed 8000 characters in length
|
||||
determines the order the fields are displayed infolog en determines the order the fields are displayed
|
||||
disables a status without deleting it infolog en disables a status without deleting it
|
||||
do you want a confirmation of the responsible on: accepting, finishing the task or both infolog en do you want a confirmation of the responsible on: accepting, finishing the task or both
|
||||
@ -103,6 +102,8 @@ enter a custom phone/email, leave empty if linked entry should be used infolog e
|
||||
enter a textual description of the log-entry infolog en enter a textual description of the log-entry
|
||||
enter the query pattern infolog en Enter the query pattern
|
||||
entry and all files infolog en Entry and all files
|
||||
error: saving the entry infolog en Error: saving the entry
|
||||
error: the entry has been updated since you opened it for editing! infolog en Error: the entry has been updated since you opened it for editing!
|
||||
existing links infolog en Existing links
|
||||
fax infolog en Fax
|
||||
fieldseparator infolog en Fieldseparator
|
||||
@ -122,6 +123,8 @@ infolog - import csv-file infolog en InfoLog - Import CSV-File
|
||||
infolog - new infolog en InfoLog - New
|
||||
infolog - new subproject infolog en InfoLog - New Subproject
|
||||
infolog - subprojects from infolog en InfoLog - Subprojects from
|
||||
infolog entry deleted infolog en InfoLog entry deleted
|
||||
infolog entry saved infolog en InfoLog entry saved
|
||||
infolog list infolog en InfoLog list
|
||||
infolog preferences common en InfoLog preferences
|
||||
infolog-fieldname infolog en Info Log-Fieldname
|
||||
@ -141,10 +144,6 @@ longer textual description infolog en longer textual description
|
||||
low infolog en low
|
||||
max length of the input [, length of the inputfield (optional)] infolog en max length of the input [, length of the inputfield (optional)]
|
||||
max number of entries to display on the main screen infolog en Max number of entries to display on the main screen
|
||||
my infolog en my
|
||||
my open infolog en my open
|
||||
my overdue infolog en my overdue
|
||||
my upcoming infolog en my upcoming
|
||||
name must not be empty !!! infolog en Name must not be empty !!!
|
||||
name of new type to create infolog en name of new type to create
|
||||
never hide search and filters infolog en Never hide search and filters
|
||||
@ -179,6 +178,7 @@ path on (web-)serverside<br>eg. /var/samba/share infolog en path on (web-)server
|
||||
path to user and group files has to be outside of the webservers document-root!!! infolog en Path to user and group files HAS TO BE OUTSIDE of the webservers document-root!!!
|
||||
pattern for search in addressbook infolog en pattern for search in Addressbook
|
||||
pattern for search in projects infolog en pattern for search in Projects
|
||||
permission denied infolog en Permission denied
|
||||
phone infolog en Phone Call
|
||||
phone/email infolog en Phone/Email
|
||||
phonecall infolog en Phone Call
|
||||
@ -191,7 +191,9 @@ read one record by passing its id. infolog en Read one record by passing its id.
|
||||
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)
|
||||
responsible infolog en Responsible
|
||||
responsible infolog en responsible
|
||||
responsible open infolog en responsible open
|
||||
responsible upcoming infolog en responsible upcoming
|
||||
responsible user, priority, times infolog en responsible user, priority, times
|
||||
returns a list / search for records. infolog en Returns a list / search for records.
|
||||
save infolog en Save
|
||||
@ -226,6 +228,7 @@ startrecord infolog en Startrecord
|
||||
status infolog en Status
|
||||
status ... infolog en Status ...
|
||||
sub infolog en Sub
|
||||
sub-entries become subs of the parent or main entries, if there's no parent infolog en Sub-entries become subs of the parent or main entries, if there's no parent
|
||||
subject infolog en Subject
|
||||
task infolog en ToDo
|
||||
test import (show importable records <u>only</u> in browser) infolog en Test Import (show importable records <u>only</u> in browser)
|
||||
@ -248,8 +251,6 @@ unlink infolog en Unlink
|
||||
upcoming infolog en upcoming
|
||||
urgency infolog en urgency
|
||||
urgent infolog en urgent
|
||||
use button to search for address infolog en use Button to search for Address
|
||||
use button to search for project infolog en use Button to search for Project
|
||||
used time infolog en used time
|
||||
valid path on clientside<br>eg. \\server\share or e:\ infolog en valid path on clientside<br>eg. \\Server\Share or e:\
|
||||
values for selectbox infolog en Values for selectbox
|
||||
@ -263,6 +264,7 @@ when should the todo or phonecall be started, it shows up from that date in the
|
||||
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
|
||||
yes - delete including sub-entries infolog en Yes - Delete including sub-entries
|
||||
you can't delete one of the stock types !!! infolog en You can't delete one of the stock types !!!
|
||||
you have entered an invalid ending date infolog en You have entered an invalid ending date
|
||||
you have entered an invalid starting date infolog en You have entered an invalid starting date
|
||||
|
@ -59,6 +59,7 @@
|
||||
$setup_info['infolog']['hooks']['calendar_include_events'] = 'infolog.boinfolog.cal_to_include';
|
||||
$setup_info['infolog']['hooks']['calendar_include_todos'] = 'infolog.boinfolog.cal_to_include';
|
||||
$setup_info['infolog']['hooks']['sidebox_menu'] = 'infolog.admin_prefs_sidebox_hooks.all_hooks';
|
||||
$setup_info['infolog']['hooks']['search_link'] = 'infolog.infolog_link_registry.search_link';
|
||||
|
||||
/* Dependencies for this app to work */
|
||||
$setup_info['infolog']['depends'][] = array(
|
||||
|
13
infolog/templates/default/app.css
Normal file
13
infolog/templates/default/app.css
Normal file
@ -0,0 +1,13 @@
|
||||
/* $Id$ */
|
||||
.headertext { color: black; font-size: 120%; }
|
||||
.lpadding5 { padding-left: 5px; };
|
||||
.redItalic { color: red; font-style: italic; }
|
||||
.low,.low_done,.normal,.normal_done,.high,.high_done,.urgent,.urgent_done { font-weight: bold; }
|
||||
.low,.low_done { color:#606060; }
|
||||
.normal,.normal_done { color:black }
|
||||
.high { color:#cc0000; }
|
||||
.high_done { color:#800000; }
|
||||
.urgent { color:#ff00ff; }
|
||||
.urgent_done { color:#800080; }
|
||||
.overdue { color:#cc0000; font-weight:bold; }
|
||||
.private { font-style:italic; }
|
@ -1,118 +1,192 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<grid id="infolog.index.rows-noheader" template="" lang="" group="0" version="0.9.15.003">
|
||||
<columns>
|
||||
<column width="5%"/>
|
||||
<column/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<vbox>
|
||||
<description value="Type"/>
|
||||
<description value="Status"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Subject"/>
|
||||
<description value="Description"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Startdate"/>
|
||||
<description value="Enddate"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Owner"/>
|
||||
<description value="Responsible"/>
|
||||
</vbox>
|
||||
<description value="last changed"/>
|
||||
<description value="Sub"/>
|
||||
<description value="Action"/>
|
||||
</row>
|
||||
<row class="row" valign="top">
|
||||
<hbox options="2,2" align="center">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it"/>
|
||||
</hbox>
|
||||
<vbox options="0,0">
|
||||
<description options="b,@${row}[info_link_view]" value="%s $row_cont[info_addr]" no_lang="1" id="${row}[info_link_title]" statustext="view this linked entry in its application"/>
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<description no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
</vbox>
|
||||
<vbox options="0,0">
|
||||
<date id="${row}[info_startdate]" readonly="true"/>
|
||||
<date class="$row_cont[end_class]" id="${row}[info_enddate]" readonly="true"/>
|
||||
</vbox>
|
||||
<vbox options="0,0">
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_owner]" readonly="true"/>
|
||||
</menulist>
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_responsible]" readonly="true"/>
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox options="0,0">
|
||||
<date-time id="${row}[info_datemodified]" readonly="true"/>
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_modifier]" readonly="true"/>
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox options="0,0" align="center">
|
||||
<button image="new.gif" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry"/>
|
||||
<button image="view.gif" label="View subs" align="center" id="view[$row_cont[info_id]]" statustext="View all subs of this entry"/>
|
||||
<button image="parent.gif" label="View parent" align="center" id="view[$row_cont[info_id_parent]]" statustext="View the parent of this entry and all his subs"/>
|
||||
</vbox>
|
||||
<hbox>
|
||||
<button image="edit.gif" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry"/>
|
||||
<button image="delete.gif" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry"/>
|
||||
<button image="addfile.gif" label="Add file" id="file[$row_cont[info_id]]" disabled="true" statustext="Attach a file"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
<styles>
|
||||
.low,.low_done,.normal,.normal_done,.high,.high_done,.urgent,.urgent_done { font-weight: bold; }
|
||||
.low,.low_done { color:#606060; }
|
||||
.normal,.normal_done { color:black }
|
||||
.high { color:#cc0000; }
|
||||
.high_done { color:#800000; }
|
||||
.urgent { color:#ff00ff; }
|
||||
.urgent_done { color:#800080; }
|
||||
.overdue { color:#cc0000; font-weight:bold; }
|
||||
.private { font-style:italic; }
|
||||
|
||||
</styles>
|
||||
</grid>
|
||||
<grid id="infolog.delete" template="" lang="" group="" version="0.9.15.003" width="100%" border="0" spacing="0" padding="0">
|
||||
<columns>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<grid content="main" align="center" id="infolog.index.rows-noheader"/>
|
||||
</row>
|
||||
<row valign="bottom" height="50">
|
||||
<description class="headertext" value="Are you shure you want to delete this entry ?" align="center"/>
|
||||
</row>
|
||||
<row height="50" disabled="!@remove_subs">
|
||||
<checkbox label="Delete all subs (if not subs will be subs of this enties parent or have no parent)" align="center" id="remove_subs"/>
|
||||
</row>
|
||||
<row>
|
||||
<hbox options="20" align="center">
|
||||
<button label="Yes - Delete" align="right" id="delete" statustext="Delete the entry"/>
|
||||
<button label="No - Cancel" id="cancel" statustext="Abort without deleting"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
<styles>
|
||||
.headertext { color: black; font-size: 120%; }
|
||||
</styles>
|
||||
</grid>
|
||||
<template id="infolog.index.rows-noheader" template="" lang="" group="0" version="1.0.1.002">
|
||||
<grid>
|
||||
<columns>
|
||||
<column width="5%"/>
|
||||
<column/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="12%"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<vbox>
|
||||
<description value="Type"/>
|
||||
<description value="Status"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Subject"/>
|
||||
<description value="Description"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Startdate"/>
|
||||
<description value="Enddate"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<description value="Owner"/>
|
||||
<description value="Responsible"/>
|
||||
</vbox>
|
||||
<description value="last changed"/>
|
||||
<description value="Sub"/>
|
||||
<description value="Action"/>
|
||||
</row>
|
||||
<row class="row" valign="top">
|
||||
<hbox align="center" orient="2,2">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" 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=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox orient="0,0">
|
||||
<link label="%s $row_cont[info_addr]" id="${row}[info_link]"/>
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<date id="${row}[info_startdate]" readonly="true"/>
|
||||
<date class="$row_cont[end_class]" id="${row}[info_enddate]" readonly="true"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_owner]" readonly="true"/>
|
||||
</menulist>
|
||||
<listbox type="select-account" id="${row}[info_responsible]" readonly="true" rows="5"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<date-time id="${row}[info_datemodified]" readonly="true"/>
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_modifier]" readonly="true"/>
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox align="center" orient="0,0">
|
||||
<button image="new" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&action=sp&action_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="view.gif" label="View subs" align="center" id="view[$row_cont[info_id]]" statustext="View all subs of this entry"/>
|
||||
<button image="parent.gif" label="View parent" align="center" id="view[$row_cont[info_id_parent]]" statustext="View the parent of this entry and all his subs"/>
|
||||
</vbox>
|
||||
<hbox>
|
||||
<button image="edit" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="delete" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry" onclick="return $row_cont[info_anz_subs] || confirm('Delete this entry');"/>
|
||||
<button image="done" label="Close" id="close[$row_cont[info_id]]" statustext="Sets the status of this entry to done"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="infolog.index.rows" template="" lang="" group="0" version="1.0.1.003">
|
||||
<grid>
|
||||
<columns>
|
||||
<column width="2%"/>
|
||||
<column/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="12%"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<vbox orient="0,0">
|
||||
<nextmatch-filterheader options="Type ..." id="info_type"/>
|
||||
<nextmatch-filterheader options="Status ..." id="info_status"/>
|
||||
</vbox>
|
||||
<grid width="100%" spacing="0" padding="0">
|
||||
<columns>
|
||||
<column/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<nextmatch-sortheader label="Subject" id="info_subject"/>
|
||||
<nextmatch-sortheader label="Priority" align="right" id="info_priority" options="DESC"/>
|
||||
</row>
|
||||
<row>
|
||||
<nextmatch-sortheader label="Description" id="info_des"/>
|
||||
<nextmatch-sortheader label="Creation" align="right" id="info_id" options="DESC"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<vbox>
|
||||
<nextmatch-sortheader label="Startdate" id="info_startdate"/>
|
||||
<nextmatch-sortheader label="Enddate" id="info_enddate"/>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<nextmatch-accountfilter id="info_owner" options="Owner" statustext="Select to filter by owner"/>
|
||||
<nextmatch-accountfilter id="info_responsible" options="Responsible" statustext="Select to filter by responsible"/>
|
||||
</vbox>
|
||||
<nextmatch-sortheader label="last changed" id="info_datemodified" options="DESC"/>
|
||||
<description value="Sub"/>
|
||||
<description value="Action"/>
|
||||
</row>
|
||||
<row class="row" valign="top">
|
||||
<hbox align="center" orient=",5">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" 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=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox 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]"/>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<date-time options=",8" id="${row}[info_startdate]" readonly="true"/>
|
||||
<date class="$row_cont[end_class]" id="${row}[info_enddate]" readonly="true"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_owner]" readonly="true"/>
|
||||
</menulist>
|
||||
<listbox type="select-account" id="${row}[info_responsible]" readonly="true" rows="5"/>
|
||||
</vbox>
|
||||
<vbox orient="0,0">
|
||||
<date-time id="${row}[info_datemodified]" readonly="true"/>
|
||||
<menulist>
|
||||
<menupopup type="select-account" id="${row}[info_modifier]" readonly="true"/>
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox align="center" orient="0,0">
|
||||
<button image="new" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&action=sp&action_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="view.gif" label="View subs" align="center" id="view[$row_cont[info_id]]" statustext="View all subs of this entry"/>
|
||||
<button image="parent.gif" label="View parent" align="center" id="view[$row_cont[info_id_parent]]" statustext="View the parent of this entry and all his subs"/>
|
||||
</vbox>
|
||||
<hbox>
|
||||
<button image="edit" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="delete" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry" onclick="return $row_cont[info_anz_subs] || confirm('Delete this entry');"/>
|
||||
<button image="done.gif" label="Close" id="close[$row_cont[info_id]]" statustext="Sets the status of this entry to done"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="infolog.delete" template="" lang="" group="0" version="1.0.1.002">
|
||||
<grid width="100%" border="0" spacing="0" padding="0">
|
||||
<columns>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<description/>
|
||||
</row>
|
||||
<row>
|
||||
<template content="main" align="center" id="infolog.index.rows-noheader"/>
|
||||
</row>
|
||||
<row valign="bottom" height="30">
|
||||
<description class="headertext" value="Are you shure you want to delete this entry ?" align="center"/>
|
||||
</row>
|
||||
<row height="50">
|
||||
<hbox align="center">
|
||||
<button label="Yes - Delete" id="delete" statustext="Sub-entries become subs of the parent or main entries, if there's no parent"/>
|
||||
<button label="Yes - Delete including sub-entries" id="delete_subs" statustext="Delete this entry and all listed sub-entries"/>
|
||||
<button label="No - Cancel" id="cancel" statustext="Abort without deleting"/>
|
||||
</hbox>
|
||||
</row>
|
||||
<row>
|
||||
<nextmatch options="infolog.index.rows" span="all" id="nm"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
</overlay>
|
@ -2,7 +2,7 @@
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="infolog.edit.description" template="" lang="" group="0" version="1.0.1.001">
|
||||
<grid width="100%" height="260" border="0">
|
||||
<grid width="100%" height="245" border="0">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
<column/>
|
||||
@ -13,13 +13,13 @@
|
||||
</row>
|
||||
<row class="row" valign="top">
|
||||
<description/>
|
||||
<textbox multiline="true" rows="15" cols="80" no_lang="1" id="info_des" statustext="enter a textual description of the log-entry"/>
|
||||
<textbox multiline="true" rows="14" cols="80" no_lang="1" id="info_des" statustext="enter a textual description of the log-entry"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="infolog.edit.links" template="" lang="" group="0" version="1.0.1.001">
|
||||
<grid width="100%" height="260" overflow="auto">
|
||||
<grid width="100%" height="245" overflow="auto">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
<column/>
|
||||
@ -34,14 +34,14 @@
|
||||
<row class="th">
|
||||
<description span="all" value="Existing links"/>
|
||||
</row>
|
||||
<row class="row_off" valign="top" height="164">
|
||||
<row class="row_off" valign="top">
|
||||
<link-list span="all" id="link_to"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</template>
|
||||
<template id="infolog.edit.delegation" template="" lang="" group="0" version="1.0.1.001">
|
||||
<grid width="100%" height="260">
|
||||
<grid width="100%" height="245">
|
||||
<columns>
|
||||
<column width="100"/>
|
||||
<column/>
|
||||
@ -76,7 +76,7 @@
|
||||
<description options=",,,info_planned_time" value="planned time"/>
|
||||
<date-duration id="info_planned_time"/>
|
||||
</row>
|
||||
<row class="row" valign="top" height="50">
|
||||
<row class="row" valign="top">
|
||||
<description options=",,,info_used_time" value="used time"/>
|
||||
<date-duration id="info_used_time"/>
|
||||
</row>
|
||||
@ -84,12 +84,15 @@
|
||||
</grid>
|
||||
</template>
|
||||
<template id="infolog.edit.customfields" template="" lang="" group="0" version="1.0.1.001">
|
||||
<grid width="100%" height="260" spacing="0" padding="0" overflow="auto">
|
||||
<grid width="100%" height="245" class="row_on" spacing="0" padding="0" overflow="auto">
|
||||
<columns>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<row class="th" height="20">
|
||||
<description value="Custom fields"/>
|
||||
</row>
|
||||
<row height="100%">
|
||||
<customfields id="customfields"/>
|
||||
</row>
|
||||
</rows>
|
||||
@ -99,12 +102,18 @@
|
||||
<grid width="100%">
|
||||
<columns>
|
||||
<column width="103"/>
|
||||
<column width="300"/>
|
||||
<column width="100"/>
|
||||
<column width="260"/>
|
||||
<column width="120"/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row class="th">
|
||||
<row disabled="!@msg">
|
||||
<html span="all" class="redItalic" align="center" id="msg" no_lang="1"/>
|
||||
<description/>
|
||||
<description/>
|
||||
<description/>
|
||||
</row>
|
||||
<row class="th" height="28">
|
||||
<description value="Type" options=",,,info_type"/>
|
||||
<menulist span="all">
|
||||
<menupopup id="info_type" onchange="1" statustext="Type of the log-entry: Note, Phonecall or ToDo"/>
|
||||
@ -118,9 +127,9 @@
|
||||
</row>
|
||||
<row class="row">
|
||||
<description value="Contact" options=",,,info_from"/>
|
||||
<textbox size="40" maxlength="64" id="info_from" statustext="Custom contact-information, leave emtpy to use information from most recent link" blur="@blur_title"/>
|
||||
<description value="Phone/Email" options=",,,info_addr"/>
|
||||
<textbox size="40" maxlength="64" id="info_addr" statustext="Custom contact-address, leave empty to use information from most recent link"/>
|
||||
<textbox size="35" maxlength="64" id="info_from" statustext="Custom contact-information, leave emtpy to use information from most recent link" blur="@blur_title"/>
|
||||
<description value="Phone/Email" options=",,,_info_addr"/>
|
||||
<textbox size="35" maxlength="64" id="info_addr" statustext="Custom contact-address, leave empty to use information from most recent link"/>
|
||||
</row>
|
||||
<row class="row">
|
||||
<description value="Subject" options=",,,info_subject"/>
|
||||
@ -142,10 +151,10 @@
|
||||
</tabpanels>
|
||||
</tabbox>
|
||||
</row>
|
||||
<row class="th">
|
||||
<row class="th" disabled="1">
|
||||
<description span="all" value="Dates, Status, Access"/>
|
||||
</row>
|
||||
<row class="row">
|
||||
<row class="row_on">
|
||||
<description value="Startdate" options=",,,info_startdate"/>
|
||||
<date-time options=",2" id="info_startdate" statustext="when should the ToDo or Phonecall be started, it shows up from that date in the filter open or own open (startpage)"/>
|
||||
<description value="Enddate" options=",,,info_enddate"/>
|
||||
@ -173,16 +182,16 @@
|
||||
</hbox>
|
||||
</row>
|
||||
<row>
|
||||
<button label="Save" id="save" statustext="Saves this entry"/>
|
||||
<button label="Cancel" id="cancel" statustext="leave without saveing the entry"/>
|
||||
<hbox span="2">
|
||||
<button label="Save" id="button[save]" statustext="Saves this entry"/>
|
||||
<button id="button[apply]" label="Apply" statustext="Apply the changes"/>
|
||||
<button label="Cancel" id="button[cancel]" statustext="leave without saveing the entry" onclick="window.close();"/>
|
||||
<html id="js"/>
|
||||
</hbox>
|
||||
<description/>
|
||||
<button label="Delete" align="right" id="delete" statustext="delete this entry"/>
|
||||
<button label="Delete" align="right" id="button[delete]" statustext="delete this entry" onclick="return $cont[info_anz_subs] || confirm('Delete this entry');"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<styles>
|
||||
.headertext { color: black; font-size: 120%; }
|
||||
.lpadding5 { padding-left: 5px; };
|
||||
</styles>
|
||||
</template>
|
||||
</overlay>
|
@ -1,14 +1,26 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- $Id$ -->
|
||||
<overlay>
|
||||
<template id="infolog.index.rows-noheader" template="" lang="" group="0" version="1.0.1.001">
|
||||
<template id="infolog.index.header_left" template="" lang="" group="0" version="1.0.1.001">
|
||||
<description class="headertext bold" value="InfoLog"/>
|
||||
<styles>.bold { font-weight: bold; }</styles>
|
||||
</template>
|
||||
<template id="infolog.index.header_right" template="" lang="" group="0" version="1.0.1.001">
|
||||
<hbox>
|
||||
<description class="headertext" value="Add:"/>
|
||||
<button image="task" label="ToDo" id="add[task]" statustext="Add a new ToDo" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&type=task&action=$cont[action]&action_id=$cont[action_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="phone" label="Phonecall" id="add[phone]" statustext="Add a new Phonecall" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&type=phone&action=$cont[action]&action_id=$cont[action_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="note" label="Note" id="add[note]" statustext="Add a new Note" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&type=note&action=$cont[action]&action_id=$cont[action_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
</template>
|
||||
<template id="infolog.index.rows-noheader" template="" lang="" group="0" version="1.0.1.002">
|
||||
<grid>
|
||||
<columns>
|
||||
<column width="5%"/>
|
||||
<column/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="12%"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
</columns>
|
||||
@ -37,10 +49,10 @@
|
||||
<row class="row" valign="top">
|
||||
<hbox align="center" orient="2,2">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" 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=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox orient="0,0">
|
||||
<description options="b,@${row}[info_link_view]" value="%s $row_cont[info_addr]" no_lang="1" id="${row}[info_link_title]" statustext="view this linked entry in its application"/>
|
||||
<link label="%s $row_cont[info_addr]" id="${row}[info_link]"/>
|
||||
<description class="$row_cont[sub_class]" no_lang="1" id="${row}[info_subject]"/>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
@ -62,39 +74,27 @@
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox align="center" orient="0,0">
|
||||
<button image="new.gif" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry"/>
|
||||
<button image="new" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&action=sp&action_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="view.gif" label="View subs" align="center" id="view[$row_cont[info_id]]" statustext="View all subs of this entry"/>
|
||||
<button image="parent.gif" label="View parent" align="center" id="view[$row_cont[info_id_parent]]" statustext="View the parent of this entry and all his subs"/>
|
||||
</vbox>
|
||||
<hbox>
|
||||
<button image="edit.gif" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry"/>
|
||||
<button image="delete.gif" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry"/>
|
||||
<button image="done.gif" label="Close" id="close[$row_cont[info_id]]" statustext="Sets the status of this entry to done"/>
|
||||
<button image="edit" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="delete" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry" onclick="return $row_cont[info_anz_subs] || confirm('Delete this entry');"/>
|
||||
<button image="done" label="Close" id="close[$row_cont[info_id]]" statustext="Sets the status of this entry to done"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<styles>
|
||||
.low,.low_done,.normal,.normal_done,.high,.high_done,.urgent,.urgent_done { font-weight: bold; }
|
||||
.low,.low_done { color:#606060; }
|
||||
.normal,.normal_done { color:black }
|
||||
.high { color:#cc0000; }
|
||||
.high_done { color:#800000; }
|
||||
.urgent { color:#ff00ff; }
|
||||
.urgent_done { color:#800080; }
|
||||
.overdue { color:#cc0000; font-weight:bold; }
|
||||
.private { font-style:italic; }
|
||||
|
||||
</styles>
|
||||
</template>
|
||||
<template id="infolog.index.rows" template="" lang="" group="0" version="1.0.1.002">
|
||||
<template id="infolog.index.rows" template="" lang="" group="0" version="1.0.1.003">
|
||||
<grid>
|
||||
<columns>
|
||||
<column width="2%"/>
|
||||
<column/>
|
||||
<column width="8%"/>
|
||||
<column width="8%"/>
|
||||
<column width="9%"/>
|
||||
<column width="12%"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
<column width="3%" disabled="@no_actions"/>
|
||||
</columns>
|
||||
@ -116,7 +116,7 @@
|
||||
</row>
|
||||
<row>
|
||||
<nextmatch-sortheader label="Description" id="info_des"/>
|
||||
<description/>
|
||||
<nextmatch-sortheader label="Creation" align="right" id="info_id" options="DESC"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
@ -135,10 +135,10 @@
|
||||
<row class="row" valign="top">
|
||||
<hbox align="center" orient=",5">
|
||||
<image label="$row_cont[info_type]" src="${row}[info_type]"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" id="edit_status[$row_cont[info_id]]" statustext="Change the status of an entry, eg. close it"/>
|
||||
<button image="$row_cont[info_status]" ro_image="$row_cont[info_status]" label="$row_cont[info_status]" 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=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
</hbox>
|
||||
<vbox orient="0,0">
|
||||
<description options="b,@${row}[info_link_view]" value="%s $row_cont[info_addr]" no_lang="1" id="${row}[info_link_title]" statustext="view this linked entry in its application"/>
|
||||
<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]"/>
|
||||
<description options=",,1" no_lang="1" id="${row}[info_des]"/>
|
||||
<link-string id="${row}[filelinks]"/>
|
||||
@ -160,47 +160,33 @@
|
||||
</menulist>
|
||||
</vbox>
|
||||
<vbox align="center" orient="0,0">
|
||||
<button image="new.gif" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry"/>
|
||||
<button image="new" label="Add sub" align="center" id="sp[$row_cont[info_id]]" statustext="Add a new sub-task, -note, -call to this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&action=sp&action_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="view.gif" label="View subs" align="center" id="view[$row_cont[info_id]]" statustext="View all subs of this entry"/>
|
||||
<button image="parent.gif" label="View parent" align="center" id="view[$row_cont[info_id_parent]]" statustext="View the parent of this entry and all his subs"/>
|
||||
</vbox>
|
||||
<hbox>
|
||||
<button image="edit.gif" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry"/>
|
||||
<button image="delete.gif" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry"/>
|
||||
<button image="edit" label="Edit" id="edit[$row_cont[info_id]]" statustext="Edit this entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&info_id=$row_cont[info_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button image="delete" label="Delete" id="delete[$row_cont[info_id]]" statustext="Delete this entry" onclick="return $row_cont[info_anz_subs] || confirm('Delete this entry');"/>
|
||||
<button image="done.gif" label="Close" id="close[$row_cont[info_id]]" statustext="Sets the status of this entry to done"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<styles>
|
||||
.low,.low_done,.normal,.normal_done,.high,.high_done,.urgent,.urgent_done { font-weight: bold; }
|
||||
.low,.low_done { color:#606060; }
|
||||
.normal,.normal_done { color:black }
|
||||
.high { color:#cc0000; }
|
||||
.high_done { color:#800000; }
|
||||
.urgent { color:#ff00ff; }
|
||||
.urgent_done { color:#800080; }
|
||||
.overdue { color:#cc0000; font-weight:bold; }
|
||||
.private { font-style:italic; }
|
||||
|
||||
</styles>
|
||||
</template>
|
||||
<template id="infolog.index" template="" lang="" group="0" version="1.0.1.001">
|
||||
<template id="infolog.index" template="" lang="" group="0" version="1.0.1.002">
|
||||
<grid width="100%" border="0" spacing="0" padding="0">
|
||||
<columns>
|
||||
<column width="95%"/>
|
||||
<column/>
|
||||
<column width="90%"/>
|
||||
<column/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row disabled="!@msg">
|
||||
<description span="all" class="redItalic" align="center" id="msg" no_lang="1"/>
|
||||
<description/>
|
||||
</row>
|
||||
<row disabled="1">
|
||||
<description class="headertext" id="appheader"/>
|
||||
<description class="headertext" value="Add:" align="right"/>
|
||||
<hbox>
|
||||
<button image="task" label="ToDo" align="right" id="add[task]" statustext="Add a new ToDo"/>
|
||||
<button image="phone" label="Phonecall" id="add[phone]" statustext="Add a new Phonecall"/>
|
||||
<button image="note" label="Note" id="add[note]" statustext="Add a new Note"/>
|
||||
</hbox>
|
||||
<template id="infolog.index.header_left"/>
|
||||
<template id="infolog.index.header_right"/>
|
||||
</row>
|
||||
<row disabled="!@main">
|
||||
<template content="main" span="all" id="infolog.index.rows-noheader"/>
|
||||
@ -210,14 +196,11 @@
|
||||
</row>
|
||||
<row>
|
||||
<hbox span="all">
|
||||
<button label="Add" id="add[note]" statustext="Add a new Entry"/>
|
||||
<button label="Add" id="add[note]" statustext="Add a new Entry" onclick="window.open(egw::link('/index.php','menuaction=infolog.uiinfolog.edit&type=note&action=$cont[action]&action_id=$cont[action_id]'),'_blank','dependent=yes,width=750,height=550,scrollbars=yes,status=yes'); return false;"/>
|
||||
<button label="Cancel" id="cancel" statustext="Back to main list"/>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<styles>
|
||||
.headertext { color: black; font-size: 120%; }
|
||||
</styles>
|
||||
</template>
|
||||
</overlay>
|
Loading…
Reference in New Issue
Block a user