Implemented display of custom fields in list-view

ToDo: implement search, sort and filtering by them
This commit is contained in:
Ralf Becker 2009-10-03 07:32:05 +00:00
parent adf5ca040e
commit 04d48a677a
5 changed files with 47 additions and 54 deletions

View File

@ -278,8 +278,9 @@ class calendar_bo
* order column-names plus optional DESC|ASC separted by comma
* ignore_acl if set and true no check_perms for a general EGW_ACL_READ grants is performed
* enum_groups boolean if set and true, group-members will be added as participants with status 'G'
* cols string|array columns to select, if set the recordset/iterator will be returned
* cols string|array columns to select, if set an iterator will be returned
* append string to append to the query, eg. GROUP BY
* cfs array if set, query given custom fields or all for empty array, none are returned, if not set (default)
* @return iterator|array|boolean array of events or array with YYYYMMDD strings / array of events pairs (depending on $daywise param)
* or false if there are no read-grants from _any_ of the requested users or iterator/recordset if cols are given
*/
@ -383,7 +384,7 @@ class calendar_bo
}
// date2ts(,true) converts to server time, db2data converts again to user-time
$events =& $this->so->search(isset($start) ? $this->date2ts($start,true) : null,isset($end) ? $this->date2ts($end,true) : null,
$users,$cat_id,$filter,$params['query'],$offset,(int)$params['num_rows'],$params['order'],$params['sql_filter'],$params['cols'],$params['append']);
$users,$cat_id,$filter,$params['query'],$offset,(int)$params['num_rows'],$params['order'],$params['sql_filter'],$params['cols'],$params['append'],$params['cfs']);
if (isset($params['cols']))
{

View File

@ -276,14 +276,15 @@ class calendar_so
* @param int $num_rows=0 number of rows to return if offset set, default 0 = use default in user prefs
* @param string $order='cal_start' column-names plus optional DESC|ASC separted by comma
* @param string $sql_filter='' sql to be and'ed into query (fully quoted)
* @param string|array $_cols=null what to select, default "$this->repeats_table.*,$this->cal_table.*,cal_start,cal_end,cal_recur_date"
* if specified an iterator for the rows is returned
* @param string|array $_cols=null what to select, default "$this->repeats_table.*,$this->cal_table.*,cal_start,cal_end,cal_recur_date",
* if specified and not false an iterator for the rows is returned
* @param string $append='' SQL to append to the query before $order, eg. for a GROUP BY clause
* @param array $cfs=null custom fields to query, null = none, array() = all, or array with cfs names
* @return array of cal_ids, or false if error in the parameters
*
* ToDo: search custom-fields too
*/
function &search($start,$end,$users,$cat_id=0,$filter='all',$query='',$offset=False,$num_rows=0,$order='cal_start',$sql_filter='',$_cols=null,$append='')
function &search($start,$end,$users,$cat_id=0,$filter='all',$query='',$offset=False,$num_rows=0,$order='cal_start',$sql_filter='',$_cols=null,$append='',$cfs=null)
{
//echo '<p>'.__METHOD__.'('.($start ? date('Y-m-d H:i',$start) : '').','.($end ? date('Y-m-d H:i',$end) : '').','.array2string($users).','.array2string($cat_id).",'$filter',".array2string($query).",$offset,$num_rows,$order,$show_rejected,".array2string($_cols).",$append)</p>\n";
@ -439,6 +440,7 @@ class calendar_so
{
$id = $row['cal_id'];
if ($row['cal_recur_date']) $id .= '-'.$row['cal_recur_date'];
$recur_ids[$row['cal_id']][] = $id;
if (!isset($events[$id])) continue; // not needed first entry of recuring event
@ -446,21 +448,21 @@ class calendar_so
$events[$id]['participants'][self::combine_user($row['cal_user_type'],$row['cal_user_id'])] =
self::combine_status($row['cal_status'],$row['cal_quantity'],$row['cal_role']);
}
/* custom fields are not shown in the regular views, so we can ignore them here for the moment
foreach($this->db->select($this->extra_table,'*',array('cal_id'=>$ids),__LINE__,__FILE__,false,'','calendar') as $row)
//custom fields are not shown in the regular views, so we only query them, if explicitly required
if (!is_null($cfs))
{
$set_ids = array($row['cal_id']);
if (isset($recur_ids[$row['cal_id']])) $set_ids += $recur_ids[$row['cal_id']];
foreach($set_ids as $id)
foreach($this->db->select($this->extra_table,'*',array('cal_id' => $ids,'cal_extra_name' => $cfs),
__LINE__,__FILE__,false,'','calendar') as $row)
{
if (isset($events[$cal_id]))
foreach((array)$recur_ids[$row['cal_id']] as $id)
{
if (isset($events[$id]))
{
$events[$id]['#'.$row['cal_extra_name']] = $row['cal_extra_value'];
}
}
}
*/
}
// alarms, atm. we read all alarms in the system, as this can be done in a single query
foreach((array)$this->async->read('cal'.(is_array($ids) ? '' : ':'.(int)$ids).':%') as $id => $job)
{

View File

@ -5,7 +5,7 @@
* @link http://www.egroupware.org
* @package calendar
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2005-8 by RalfBecker-At-outdoor-training.de
* @copyright (c) 2005-9 by RalfBecker-At-outdoor-training.de
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
@ -82,7 +82,7 @@ class calendar_uilist extends calendar_ui
'multiple' => 0,
'view' => $this->bo->cal_prefs['defaultcalendar'],
));
$GLOBALS['egw']->session->appsession('calendar_list','calendar',''); // in case there's already something set
egw_session::appsession('calendar_list','calendar',''); // in case there's already something set
return $this->listview(null,'',true);
}
@ -95,7 +95,7 @@ class calendar_uilist extends calendar_ui
if ($_GET['msg']) $msg .= $_GET['msg'];
if ($this->group_warning) $msg .= $this->group_warning;
$etpl =& CreateObject('etemplate.etemplate','calendar.list');
$etpl = new etemplate('calendar.list');
if (is_array($content) && $content['nm']['rows']['delete'])
{
@ -120,7 +120,7 @@ class calendar_uilist extends calendar_ui
}
}
$content = array(
'nm' => $GLOBALS['egw']->session->appsession('calendar_list','calendar'),
'nm' => egw_session::appsession('calendar_list','calendar'),
'msg' => $msg,
);
if (!is_array($content['nm']))
@ -201,7 +201,7 @@ class calendar_uilist extends calendar_ui
$this->manage_states(array('date' => $this->bo->date2string($params['startdate'])));
}
}
$old_params = $GLOBALS['egw']->session->appsession('calendar_list','calendar');
$old_params = egw_session::appsession('calendar_list','calendar');
if ($old_params['filter'] && $old_params['filter'] != $params['filter']) // filter changed => order accordingly
{
$params['order'] = 'cal_start';
@ -211,14 +211,25 @@ class calendar_uilist extends calendar_ui
{
$this->adjust_for_search($params['search'],$params);
}
$GLOBALS['egw']->session->appsession('calendar_list','calendar',$params);
egw_session::appsession('calendar_list','calendar',$params);
// do we need to query custom fields and which
$select_cols = explode(',',$params['selectcols']);
if (in_array('cfs',$select_cols))
{
$cfs = array();
foreach($select_cols as $col)
{
if ($col[0] == '#') $cfs[] = substr($col,1);
}
}
$search_params = array(
'cat_id' => $this->cat_id,
'filter' => $this->filter,
'query' => $params['search'],
'offset' => (int) $params['start'],
'order' => $params['order'] ? $params['order'].' '.$params['sort'] : 'cal_start',
'cfs' => $cfs,
);
switch($params['filter'])
{
@ -293,6 +304,7 @@ class calendar_uilist extends calendar_ui
$event['date'] = $this->bo->date2string($event['start']);
if (empty($event['description'])) $event['description'] = ' '; // no description screws the titles horz. alignment
if (empty($event['location'])) $event['location'] = ' '; // no location screws the owner horz. alignment
$rows[] = $event;
}
$wv=0;
@ -309,7 +321,7 @@ class calendar_uilist extends calendar_ui
$rows['format'] = '16';
$dv=1;
}
if ($wv&&$dv)
if ($wv && $dv)
{
$rows['format'] = '64';
}

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<overlay>
<template id="calendar.list.rows" template="" lang="" group="0" version="1.5.001">
<template id="calendar.list.rows" template="" lang="" group="0" version="1.7.002">
<grid width="100%">
<columns>
<column/>
@ -16,6 +16,7 @@
<column/>
<column/>
<column/>
<column/>
</columns>
<rows>
<row class="th">
@ -39,7 +40,11 @@
<nextmatch-sortheader id="cal_owner" label="Owner" readonly="true"/>
<nextmatch-sortheader id="cal_location" label="Location"/>
<nextmatch-accountfilter options="All" id="participant" label="Participants"/>
<description value="Actions" class="noPrint"/>
<nextmatch-customfields label="Custom fields" id="cfs" readonly="true"/>
<hbox label="Actions" class="noPrint">
<description value="Actions" statustext="Check all" class="noPrint"/>
<button image="check" label="Check all" id="check_all" statustext="Check all" onclick="toggle_all(this.form,form::name('checked[]')); return false;" needed="1" align="right"/>
</hbox>
</row>
<row class="row" valign="top">
<vbox id="start">
@ -69,6 +74,7 @@
</menulist>
<description id="${row}[location]" no_lang="1"/>
<html id="${row}[parts]" readonly="true" no_lang="1"/>
<customfields-list id="$row"/>
<hbox class="noPrint">
<button image="view" label="View" id="view[$row_cont[id]]" statustext="View this event" onclick="window.open(egw::link('/index.php','menuaction=calendar.calendar_uiforms.edit&amp;cal_id=$row_cont[id]&amp;date=$row_cont[date]'),'425','dependent=yes,width=750,height=450,scrollbars=yes,status=yes'); return false;"/>
<button image="edit" label="Edit" id="edit[$row_cont[id]]" statustext="Edit this event" onclick="window.open(egw::link('/index.php','menuaction=calendar.calendar_uiforms.edit&amp;cal_id=$row_cont[id]&amp;date=$row_cont[date]'),'425','dependent=yes,width=750,height=450,scrollbars=yes,status=yes'); return false;"/>
@ -79,7 +85,7 @@
</rows>
</grid>
</template>
<template id="calendar.list" template="" lang="" group="0" version="1.5.001">
<template id="calendar.list" template="" lang="" group="0" version="1.7.001">
<grid width="100%">
<columns>
<column/>