* * Copyright (C) 2001 Joseph Engo * * -------------------------------------------------------------------------* * This library is part of the eGroupWare API * * http://www.egroupware.org/api * * ------------------------------------------------------------------------ * * This library is free software; you can redistribute it and/or modify it * * under the terms of the GNU Lesser General Public License as published by * * the Free Software Foundation; either version 2.1 of the License, * * or any later version. * * This library is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * * along with this library; if not, write to the Free Software Foundation, * * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * \**************************************************************************/ // $Id$ class historylog { var $db; var $table = 'egw_history_log'; var $appname; var $template; var $nextmatchs; var $types = array( 'C' => 'Created', 'D' => 'Deleted', 'E' => 'Edited' ); var $alternate_handlers = array(); function historylog($appname='') { if (!$appname) { $appname = $GLOBALS['egw_info']['flags']['currentapp']; } $this->appname = $appname; if (is_object($GLOBALS['egw_setup']->db)) { $this->db = clone($GLOBALS['egw_setup']->db); } else { $this->db = clone($GLOBALS['egw']->db); } $this->db->set_app('phpgwapi'); } function delete($record_id) { if (is_array($record_id) || is_numeric($record_id)) { $where = array( 'history_record_id' => $record_id, 'history_appname' => $this->appname, ); } else { $where = array('history_appname' => $record_id); } $this->db->delete($this->table,$where,__LINE__,__FILE__); return $this->db->affected_rows(); } function add($status,$record_id,$new_value,$old_value) { if ($new_value != $old_value) { $this->db->insert($this->table,array( 'history_record_id' => $record_id, 'history_appname' => $this->appname, 'history_owner' => $GLOBALS['egw_info']['user']['account_id'], 'history_status' => $status, 'history_new_value' => $new_value, 'history_old_value' => $old_value, 'history_timestamp' => time(), ),false,__LINE__,__FILE__); } } // array $filter_out function return_array($filter_out,$only_show,$_orderby = '',$sort = '', $record_id) { if (!$_orderby || !preg_match('/^[a-z0-9_]+$/i',$_orderby) || !preg_match('/^(asc|desc)?$/i',$sort)) { $orderby = 'ORDER BY history_timestamp,history_id'; } else { $orderby = "ORDER BY $_orderby $sort"; } $where = array( 'history_appname' => $this->appname, 'history_record_id' => $record_id, ); if (is_array($filter_out)) { foreach($filter_out as $_filter) { $where[] = 'history_status != '.$this->db->quote($_filter); } } if (is_array($only_show) && count($only_show)) { $to_or = array(); foreach($only_show as $_filter) { $to_or[] = 'history_status = '.$this->db->quote($_filter); } $where[] = '('.implode(' OR ',$to_or).')'; } $this->db->select($this->table,'*',$where,__LINE__,__FILE__,false,$orderby); while ($this->db->next_record()) { $return_values[] = array( 'id' => $this->db->f('history_id'), 'record_id' => $this->db->f('history_record_id'), 'owner' => $GLOBALS['egw']->accounts->id2name($this->db->f('history_owner')), 'status' => str_replace(' ','',$this->db->f('history_status')), 'new_value' => $this->db->f('history_new_value'), 'old_value' => $this->db->f('history_old_value'), 'datetime' => $this->db->from_timestamp($this->db->f('history_timestamp')) ); } return $return_values; } function return_html($filter_out,$orderby = '',$sort = '', $record_id) { $this->template =& CreateObject('phpgwapi.Template',EGW_TEMPLATE_DIR); $this->nextmatchs =& CreateObject('phpgwapi.nextmatchs'); $this->template->set_file('_history','history_list.tpl'); $this->template->set_block('_history','row_no_history'); $this->template->set_block('_history','list'); $this->template->set_block('_history','row'); $this->template->set_var('lang_user',lang('User')); $this->template->set_var('lang_date',lang('Date')); $this->template->set_var('lang_action',lang('Action')); $this->template->set_var('lang_new_value',lang('New Value')); $this->template->set_var('th_bg',$GLOBALS['egw_info']['theme']['th_bg']); $this->template->set_var('sort_date',lang('Date')); $this->template->set_var('sort_owner',lang('User')); $this->template->set_var('sort_status',lang('Status')); $this->template->set_var('sort_new_value',lang('New value')); $this->template->set_var('sort_old_value',lang('Old value')); $values = $this->return_array($filter_out,array(),$orderby,$sort,$record_id); if (!is_array($values)) { $this->template->set_var('tr_color',$GLOBALS['egw_info']['theme']['row_off']); $this->template->set_var('lang_no_history',lang('No history for this record')); $this->template->fp('rows','row_no_history'); return $this->template->fp('out','list'); } foreach($values as $value) { $this->nextmatchs->template_alternate_row_color($this->template); $this->template->set_var('row_date',$GLOBALS['egw']->common->show_date($value['datetime'])); $this->template->set_var('row_owner',$value['owner']); if ($this->alternate_handlers[$value['status']]) { eval('\$s = ' . $this->alternate_handlers[$value['status']] . '(' . $value['new_value'] . ');'); $this->template->set_var('row_new_value',$s); unset($s); eval('\$s = ' . $this->alternate_handlers[$value['status']] . '(' . $value['old_value'] . ');'); $this->template->set_var('row_old_value',$s); unset($s); } else { $this->template->set_var('row_new_value',$value['new_value']); $this->template->set_var('row_old_value',$value['old_value']); } $this->template->set_var('row_status',$this->types[$value['status']]); $this->template->fp('rows','row',True); } return $this->template->fp('out','list'); } }