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 * 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 * 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' * 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 * 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) * @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 * 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 // 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, $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'])) 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 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 $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 $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" * @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 * 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 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 * @return array of cal_ids, or false if error in the parameters
* *
* ToDo: search custom-fields too * 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"; //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']; $id = $row['cal_id'];
if ($row['cal_recur_date']) $id .= '-'.$row['cal_recur_date']; 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 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'])] = $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']); 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 //custom fields are not shown in the regular views, so we only query them, if explicitly required
foreach($this->db->select($this->extra_table,'*',array('cal_id'=>$ids),__LINE__,__FILE__,false,'','calendar') as $row) if (!is_null($cfs))
{ {
$set_ids = array($row['cal_id']); foreach($this->db->select($this->extra_table,'*',array('cal_id' => $ids,'cal_extra_name' => $cfs),
if (isset($recur_ids[$row['cal_id']])) $set_ids += $recur_ids[$row['cal_id']]; __LINE__,__FILE__,false,'','calendar') as $row)
foreach($set_ids as $id)
{ {
if (isset($events[$cal_id])) foreach((array)$recur_ids[$row['cal_id']] as $id)
{ {
$events[$id]['#'.$row['cal_extra_name']] = $row['cal_extra_value']; 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 // 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) 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 * @link http://www.egroupware.org
* @package calendar * @package calendar
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de> * @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 * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$ * @version $Id$
*/ */
@ -82,7 +82,7 @@ class calendar_uilist extends calendar_ui
'multiple' => 0, 'multiple' => 0,
'view' => $this->bo->cal_prefs['defaultcalendar'], '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); return $this->listview(null,'',true);
} }
@ -95,7 +95,7 @@ class calendar_uilist extends calendar_ui
if ($_GET['msg']) $msg .= $_GET['msg']; if ($_GET['msg']) $msg .= $_GET['msg'];
if ($this->group_warning) $msg .= $this->group_warning; 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']) if (is_array($content) && $content['nm']['rows']['delete'])
{ {
@ -120,7 +120,7 @@ class calendar_uilist extends calendar_ui
} }
} }
$content = array( $content = array(
'nm' => $GLOBALS['egw']->session->appsession('calendar_list','calendar'), 'nm' => egw_session::appsession('calendar_list','calendar'),
'msg' => $msg, 'msg' => $msg,
); );
if (!is_array($content['nm'])) 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']))); $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 if ($old_params['filter'] && $old_params['filter'] != $params['filter']) // filter changed => order accordingly
{ {
$params['order'] = 'cal_start'; $params['order'] = 'cal_start';
@ -211,14 +211,25 @@ class calendar_uilist extends calendar_ui
{ {
$this->adjust_for_search($params['search'],$params); $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( $search_params = array(
'cat_id' => $this->cat_id, 'cat_id' => $this->cat_id,
'filter' => $this->filter, 'filter' => $this->filter,
'query' => $params['search'], 'query' => $params['search'],
'offset' => (int) $params['start'], 'offset' => (int) $params['start'],
'order' => $params['order'] ? $params['order'].' '.$params['sort'] : 'cal_start', 'order' => $params['order'] ? $params['order'].' '.$params['sort'] : 'cal_start',
'cfs' => $cfs,
); );
switch($params['filter']) switch($params['filter'])
{ {
@ -293,6 +304,7 @@ class calendar_uilist extends calendar_ui
$event['date'] = $this->bo->date2string($event['start']); $event['date'] = $this->bo->date2string($event['start']);
if (empty($event['description'])) $event['description'] = ' '; // no description screws the titles horz. alignment 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 if (empty($event['location'])) $event['location'] = ' '; // no location screws the owner horz. alignment
$rows[] = $event; $rows[] = $event;
} }
$wv=0; $wv=0;
@ -309,7 +321,7 @@ class calendar_uilist extends calendar_ui
$rows['format'] = '16'; $rows['format'] = '16';
$dv=1; $dv=1;
} }
if ($wv&&$dv) if ($wv && $dv)
{ {
$rows['format'] = '64'; $rows['format'] = '64';
} }

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- $Id$ --> <!-- $Id$ -->
<overlay> <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%"> <grid width="100%">
<columns> <columns>
<column/> <column/>
@ -16,6 +16,7 @@
<column/> <column/>
<column/> <column/>
<column/> <column/>
<column/>
</columns> </columns>
<rows> <rows>
<row class="th"> <row class="th">
@ -39,7 +40,11 @@
<nextmatch-sortheader id="cal_owner" label="Owner" readonly="true"/> <nextmatch-sortheader id="cal_owner" label="Owner" readonly="true"/>
<nextmatch-sortheader id="cal_location" label="Location"/> <nextmatch-sortheader id="cal_location" label="Location"/>
<nextmatch-accountfilter options="All" id="participant" label="Participants"/> <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>
<row class="row" valign="top"> <row class="row" valign="top">
<vbox id="start"> <vbox id="start">
@ -69,6 +74,7 @@
</menulist> </menulist>
<description id="${row}[location]" no_lang="1"/> <description id="${row}[location]" no_lang="1"/>
<html id="${row}[parts]" readonly="true" no_lang="1"/> <html id="${row}[parts]" readonly="true" no_lang="1"/>
<customfields-list id="$row"/>
<hbox class="noPrint"> <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="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;"/> <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> </rows>
</grid> </grid>
</template> </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%"> <grid width="100%">
<columns> <columns>
<column/> <column/>