mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 16:48:49 +01:00
"fixed (undeletable) n type, which appears in new installations
to get rid of it on existing installs, you can now simply delete it (it does not get recreated, which makes it seem undeletable before)"
This commit is contained in:
parent
95d15246b5
commit
c76f649797
@ -5,13 +5,11 @@
|
|||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
||||||
* @package infolog
|
* @package infolog
|
||||||
* @copyright (c) 2003-6 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
* @copyright (c) 2003-8 by Ralf Becker <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$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include_once(EGW_API_INC.'/class.solink.inc.php');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* storage object / db-layer for InfoLog
|
* storage object / db-layer for InfoLog
|
||||||
*
|
*
|
||||||
@ -68,25 +66,6 @@ class soinfolog // DB-Layer
|
|||||||
*/
|
*/
|
||||||
var $tz_offset;
|
var $tz_offset;
|
||||||
|
|
||||||
/**
|
|
||||||
* custom fields backend
|
|
||||||
*
|
|
||||||
* @var so_sql
|
|
||||||
*/
|
|
||||||
var $soextra;
|
|
||||||
/**
|
|
||||||
* customfields name => array(...) pairs
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $customfields = array();
|
|
||||||
/**
|
|
||||||
* content-types as name => array(...) pairs
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $content_types = array();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@ -101,22 +80,6 @@ class soinfolog // DB-Layer
|
|||||||
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
||||||
|
|
||||||
$this->tz_offset = $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'];
|
$this->tz_offset = $GLOBALS['egw_info']['user']['preferences']['common']['tz_offset'];
|
||||||
$this->soextra =& CreateObject('etemplate.so_sql');
|
|
||||||
$this->soextra->so_sql('infolog',$this->extra_table);
|
|
||||||
|
|
||||||
$custom =& CreateObject('admin.customfields','infolog');
|
|
||||||
$this->customfields = $custom->get_customfields();
|
|
||||||
$this->content_types = $custom->get_content_types();
|
|
||||||
if (!$this->content_types)
|
|
||||||
{
|
|
||||||
$this->content_types = $custom->content_types = array('n' => array(
|
|
||||||
'name' => 'infolog',
|
|
||||||
'options' => array(
|
|
||||||
'template' => 'infolog.edit',
|
|
||||||
'icon' => 'navbar.png'
|
|
||||||
)));
|
|
||||||
$custom->save_repository();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -148,13 +111,13 @@ class soinfolog // DB-Layer
|
|||||||
{
|
{
|
||||||
if (is_array($info))
|
if (is_array($info))
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
elseif ((int) $info != $this->data['info_id']) // already loaded?
|
elseif ((int) $info != $this->data['info_id']) // already loaded?
|
||||||
{
|
{
|
||||||
// dont change our own internal data,
|
// dont change our own internal data,
|
||||||
// dont use new as it changes $phpgw->db
|
// dont use new as it changes $phpgw->db
|
||||||
$private_info = $this;
|
$private_info = $this;
|
||||||
$info = $private_info->read($info);
|
$info = $private_info->read($info);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -166,7 +129,7 @@ class soinfolog // DB-Layer
|
|||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
$owner = $info['info_owner'];
|
$owner = $info['info_owner'];
|
||||||
|
|
||||||
$access_ok = $owner == $this->user || // user has all rights
|
$access_ok = $owner == $this->user || // user has all rights
|
||||||
// ACL only on public entrys || $owner granted _PRIVATE
|
// ACL only on public entrys || $owner granted _PRIVATE
|
||||||
(!!($this->grants[$owner] & $required_rights) ||
|
(!!($this->grants[$owner] & $required_rights) ||
|
||||||
@ -177,20 +140,20 @@ class soinfolog // DB-Layer
|
|||||||
//echo "<p align=right>check_access(info_id=$info_id,requited=$required_rights,implicit_edit=$implicit_edit) owner=$owner, responsible=(".implode(',',$info['info_responsible'])."): access".($access_ok?"Ok":"Denied")."</p>\n";
|
//echo "<p align=right>check_access(info_id=$info_id,requited=$required_rights,implicit_edit=$implicit_edit) owner=$owner, responsible=(".implode(',',$info['info_responsible'])."): access".($access_ok?"Ok":"Denied")."</p>\n";
|
||||||
return $access_ok;
|
return $access_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter for a given responsible user: info_responsible either contains a the user or one of his memberships
|
* Filter for a given responsible user: info_responsible either contains a the user or one of his memberships
|
||||||
*
|
*
|
||||||
* @param int $user
|
* @param int $user
|
||||||
* @return string
|
* @return string
|
||||||
*
|
*
|
||||||
* @todo make the responsible a second table and that filter a join with the responsible table
|
* @todo make the responsible a second table and that filter a join with the responsible table
|
||||||
*/
|
*/
|
||||||
function responsible_filter($user)
|
function responsible_filter($user)
|
||||||
{
|
{
|
||||||
if (!$user) return '0';
|
if (!$user) return '0';
|
||||||
|
|
||||||
$responsible = $user > 0 ? $GLOBALS['egw']->accounts->memberships($user,true) :
|
$responsible = $user > 0 ? $GLOBALS['egw']->accounts->memberships($user,true) :
|
||||||
$GLOBALS['egw']->accounts->members($user,true);
|
$GLOBALS['egw']->accounts->members($user,true);
|
||||||
|
|
||||||
$responsible[] = $user;
|
$responsible[] = $user;
|
||||||
@ -206,8 +169,8 @@ class soinfolog // DB-Layer
|
|||||||
* generate sql to be AND'ed into a query to ensure ACL is respected (incl. _PRIVATE)
|
* generate sql to be AND'ed into a query to ensure ACL is respected (incl. _PRIVATE)
|
||||||
*
|
*
|
||||||
* @param string $filter: none|all - list all entrys user have rights to see<br>
|
* @param string $filter: none|all - list all entrys user have rights to see<br>
|
||||||
* private|own - list only his personal entrys (incl. those he is responsible for !!!),
|
* private|own - list only his personal entrys (incl. those he is responsible for !!!),
|
||||||
* responsible|my = entries the user is responsible for
|
* responsible|my = entries the user is responsible for
|
||||||
* delegated = entries the user delegated to someone else
|
* delegated = entries the user delegated to someone else
|
||||||
* @return string the necesary sql
|
* @return string the necesary sql
|
||||||
*/
|
*/
|
||||||
@ -223,7 +186,7 @@ class soinfolog // DB-Layer
|
|||||||
}
|
}
|
||||||
|
|
||||||
$filtermethod = " (info_owner=$this->user"; // user has all rights
|
$filtermethod = " (info_owner=$this->user"; // user has all rights
|
||||||
|
|
||||||
if ($filter == 'my' || $filter == 'responsible')
|
if ($filter == 'my' || $filter == 'responsible')
|
||||||
{
|
{
|
||||||
$filtermethod .= " AND info_responsible='0'";
|
$filtermethod .= " AND info_responsible='0'";
|
||||||
@ -276,7 +239,7 @@ class soinfolog // DB-Layer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$filtermethod .= ') ';
|
$filtermethod .= ') ';
|
||||||
|
|
||||||
if ($filter == 'user' && $f_user > 0)
|
if ($filter == 'user' && $f_user > 0)
|
||||||
{
|
{
|
||||||
$filtermethod .= " AND (info_owner=$f_user AND info_responsible='0' OR ".$this->responsible_filter($f_user).')';
|
$filtermethod .= " AND (info_owner=$f_user AND info_responsible='0' OR ".$this->responsible_filter($f_user).')';
|
||||||
@ -317,7 +280,7 @@ class soinfolog // DB-Layer
|
|||||||
* overdue: enddate < tomorrow
|
* overdue: enddate < tomorrow
|
||||||
* date: today <= startdate && startdate < tomorrow
|
* date: today <= startdate && startdate < tomorrow
|
||||||
* enddate: today <= enddate && enddate < tomorrow
|
* enddate: today <= enddate && enddate < tomorrow
|
||||||
* limitYYYY/MM/DD not older or open
|
* limitYYYY/MM/DD not older or open
|
||||||
* @return string the necesary sql
|
* @return string the necesary sql
|
||||||
*/
|
*/
|
||||||
function dateFilter($filter = '')
|
function dateFilter($filter = '')
|
||||||
@ -407,7 +370,7 @@ class soinfolog // DB-Layer
|
|||||||
}
|
}
|
||||||
return $this->data;
|
return $this->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read the status of the given infolog-ids
|
* Read the status of the given infolog-ids
|
||||||
*
|
*
|
||||||
@ -433,7 +396,7 @@ class soinfolog // DB-Layer
|
|||||||
$stati[$info['info_id']] = $status;
|
$stati[$info['info_id']] = $status;
|
||||||
}
|
}
|
||||||
return $stati;
|
return $stati;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* delete InfoLog entry $info_id AND the links to it
|
* delete InfoLog entry $info_id AND the links to it
|
||||||
@ -452,10 +415,11 @@ class soinfolog // DB-Layer
|
|||||||
$this->db->delete($this->info_table,array('info_id'=>$info_id),__LINE__,__FILE__);
|
$this->db->delete($this->info_table,array('info_id'=>$info_id),__LINE__,__FILE__);
|
||||||
$this->db->delete($this->extra_table,array('info_id'=>$info_id),__LINE__,__FILE__);
|
$this->db->delete($this->extra_table,array('info_id'=>$info_id),__LINE__,__FILE__);
|
||||||
egw_link::unlink(0,'infolog',$info_id);
|
egw_link::unlink(0,'infolog',$info_id);
|
||||||
|
egw_index::delete('infolog',$info_id);
|
||||||
|
|
||||||
if ($this->data['info_id'] == $info_id)
|
if ($this->data['info_id'] == $info_id)
|
||||||
{
|
{
|
||||||
$this->init( );
|
$this->init( );
|
||||||
}
|
}
|
||||||
// delete children, if they are owned by the user
|
// delete children, if they are owned by the user
|
||||||
if ($delete_children)
|
if ($delete_children)
|
||||||
@ -473,7 +437,7 @@ class soinfolog // DB-Layer
|
|||||||
// set parent_id to $new_parent or 0 for all not deleted children
|
// set parent_id to $new_parent or 0 for all not deleted children
|
||||||
$this->db->update($this->info_table,array('info_id_parent'=>$new_parent),array('info_id_parent'=>$info_id),__LINE__,__FILE__);
|
$this->db->update($this->info_table,array('info_id_parent'=>$new_parent),array('info_id_parent'=>$info_id),__LINE__,__FILE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return array with children of $info_id as info_id => info_owner pairs
|
* Return array with children of $info_id as info_id => info_owner pairs
|
||||||
*
|
*
|
||||||
@ -485,7 +449,7 @@ class soinfolog // DB-Layer
|
|||||||
$this->db->select($this->info_table,'info_id,info_owner',array(
|
$this->db->select($this->info_table,'info_id,info_owner',array(
|
||||||
'info_id_parent' => $info_id,
|
'info_id_parent' => $info_id,
|
||||||
),__LINE__,__FILE__);
|
),__LINE__,__FILE__);
|
||||||
|
|
||||||
$children = array();
|
$children = array();
|
||||||
while (($row = $this->db->row(true)))
|
while (($row = $this->db->row(true)))
|
||||||
{
|
{
|
||||||
@ -568,7 +532,7 @@ class soinfolog // DB-Layer
|
|||||||
|
|
||||||
$this->db->insert($this->info_table,$to_write,false,__LINE__,__FILE__);
|
$this->db->insert($this->info_table,$to_write,false,__LINE__,__FILE__);
|
||||||
$info_id = $this->data['info_id'] = $this->db->get_last_insert_id($this->info_table,'info_id');
|
$info_id = $this->data['info_id'] = $this->db->get_last_insert_id($this->info_table,'info_id');
|
||||||
|
|
||||||
if (!$this->data['info_uid']) // new entry without uid --> create one based on our info_id and save it
|
if (!$this->data['info_uid']) // new entry without uid --> create one based on our info_id and save it
|
||||||
{
|
{
|
||||||
$this->data['info_uid'] = $GLOBALS['egw']->common->generate_uid('infolog',$info_id);
|
$this->data['info_uid'] = $GLOBALS['egw']->common->generate_uid('infolog',$info_id);
|
||||||
@ -611,6 +575,10 @@ class soinfolog // DB-Layer
|
|||||||
// echo "<p>soinfolog.write this->data= "; _debug_array($this->data);
|
// echo "<p>soinfolog.write this->data= "; _debug_array($this->data);
|
||||||
//error_log("### soinfolog::write(".print_r($to_write,true).") where=".print_r($where,true)." returning id=".$this->data['info_id']);
|
//error_log("### soinfolog::write(".print_r($to_write,true).") where=".print_r($where,true)." returning id=".$this->data['info_id']);
|
||||||
|
|
||||||
|
// update the index
|
||||||
|
egw_index::save('infolog',$this->data['info_id'],$this->data['info_owner'],$this->data,$this->data['info_cat'],
|
||||||
|
array('info_uid','info_type','info_status','info_confirm','info_access'));
|
||||||
|
|
||||||
return $this->data['info_id'];
|
return $this->data['info_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,7 +605,7 @@ class soinfolog // DB-Layer
|
|||||||
//echo "<p>anzSubs($info_id) = ".$this->db->f(0)." ($sql)</p>\n";
|
//echo "<p>anzSubs($info_id) = ".$this->db->f(0)." ($sql)</p>\n";
|
||||||
return $this->db->f(0);
|
return $this->db->f(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* searches InfoLog for a certain pattern in $query
|
* searches InfoLog for a certain pattern in $query
|
||||||
*
|
*
|
||||||
@ -669,24 +637,24 @@ class soinfolog // DB-Layer
|
|||||||
$links = solink::get_links($action=='sp'?'infolog':$action,explode(',',$query['action_id']),'infolog');
|
$links = solink::get_links($action=='sp'?'infolog':$action,explode(',',$query['action_id']),'infolog');
|
||||||
if (count($links))
|
if (count($links))
|
||||||
{
|
{
|
||||||
$links = call_user_func_array('array_merge',$links); // flatten the array
|
$links = call_user_func_array('array_merge',$links); // flatten the array
|
||||||
$link_extra = ($action == 'sp' ? 'OR' : 'AND')." main.info_id IN (".implode(',',$links).')';
|
$link_extra = ($action == 'sp' ? 'OR' : 'AND')." main.info_id IN (".implode(',',$links).')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sortbycf='';
|
$sortbycf='';
|
||||||
if (!empty($query['order']) && (preg_match('/^[a-z_0-9, ]+$/i',$query['order']) || stripos($query['order'],'#')!==FALSE ) &&
|
if (!empty($query['order']) && (preg_match('/^[a-z_0-9, ]+$/i',$query['order']) || stripos($query['order'],'#')!==FALSE ) &&
|
||||||
(empty($query['sort']) || preg_match('/^(DESC|ASC)$/i',$query['sort'])))
|
(empty($query['sort']) || preg_match('/^(DESC|ASC)$/i',$query['sort'])))
|
||||||
{
|
{
|
||||||
$order = array();
|
$order = array();
|
||||||
foreach(explode(',',$query['order']) as $val)
|
foreach(explode(',',$query['order']) as $val)
|
||||||
{
|
{
|
||||||
$val = trim($val);
|
$val = trim($val);
|
||||||
if ($val[0] == '#')
|
if ($val[0] == '#')
|
||||||
{
|
{
|
||||||
$sortbycf = substr($val,1);
|
$sortbycf = substr($val,1);
|
||||||
$val = "cfsortcrit";
|
$val = "cfsortcrit";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$val = (substr($val,0,5) != 'info_' ? 'info_' : '').$val;
|
$val = (substr($val,0,5) != 'info_' ? 'info_' : '').$val;
|
||||||
if ($val == 'info_des' && $this->db->capabilities['order_on_text'] !== true)
|
if ($val == 'info_des' && $this->db->capabilities['order_on_text'] !== true)
|
||||||
@ -727,9 +695,9 @@ class soinfolog // DB-Layer
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$filtermethod .= ' AND '.$this->db->expression($this->info_table,array($col => $data));
|
$filtermethod .= ' AND '.$this->db->expression($this->info_table,array($col => $data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($col[0] == '#' && $query['custom_fields'] && $data)
|
if ($col[0] == '#' && $query['custom_fields'] && $data)
|
||||||
{
|
{
|
||||||
$filtermethod .= " AND main.info_id IN (SELECT DISTINCT info_id FROM $this->extra_table WHERE ".
|
$filtermethod .= " AND main.info_id IN (SELECT DISTINCT info_id FROM $this->extra_table WHERE ".
|
||||||
$this->db->expression($this->extra_table,array(
|
$this->db->expression($this->extra_table,array(
|
||||||
@ -752,6 +720,23 @@ class soinfolog // DB-Layer
|
|||||||
if ($query['query']) $query['search'] = $query['query']; // allow both names
|
if ($query['query']) $query['search'] = $query['query']; // allow both names
|
||||||
if ($query['search']) // we search in _from, _subject, _des and _extra_value for $query
|
if ($query['search']) // we search in _from, _subject, _des and _extra_value for $query
|
||||||
{
|
{
|
||||||
|
/* new code join the index
|
||||||
|
if (ctype_digit($query['search'])) // search by ticket-number (numbers get never indexed!)
|
||||||
|
{
|
||||||
|
$sql_query = 'AND info_id='.(int)$query['search'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$join = egw_index::sql_join_ids_by_keyword($query['search'],'infolog','info_id');
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* new code with info_id IN (subquery) --> way to slow
|
||||||
|
$sql_query .= 'AND info_id IN ('.
|
||||||
|
egw_index::sql_ids_by_keyword(explode(' ',$query['search']),egw_index::MATCH_CONTAINS,'infolog').
|
||||||
|
// add search string itself, if it is numeric, to allow to search for a info_id/ticket number
|
||||||
|
ctype_digit($query['search'] ? ' UNION (SELECT '.$this->db->quote($query['search']).')' : '').')';
|
||||||
|
*/
|
||||||
|
/* old code searching the table direct */
|
||||||
$pattern = $this->db->quote('%'.$query['search'].'%');
|
$pattern = $this->db->quote('%'.$query['search'].'%');
|
||||||
|
|
||||||
$columns = array('info_from','info_addr','info_location','info_subject','info_extra_value');
|
$columns = array('info_from','info_addr','info_location','info_subject','info_extra_value');
|
||||||
@ -760,9 +745,7 @@ class soinfolog // DB-Layer
|
|||||||
|
|
||||||
$sql_query = 'AND ('.(is_numeric($query['search']) ? 'main.info_id='.(int)$query['search'].' OR ' : '').
|
$sql_query = 'AND ('.(is_numeric($query['search']) ? 'main.info_id='.(int)$query['search'].' OR ' : '').
|
||||||
implode(" LIKE $pattern OR ",$columns)." LIKE $pattern) ";
|
implode(" LIKE $pattern OR ",$columns)." LIKE $pattern) ";
|
||||||
}
|
|
||||||
if ($query['search'])
|
|
||||||
{
|
|
||||||
$join = ($cfcolfilter>0 ? '':'LEFT')." JOIN $this->extra_table ON main.info_id=$this->extra_table.info_id ";
|
$join = ($cfcolfilter>0 ? '':'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
|
// mssql and others cant use DISTICT if text columns (info_des) are involved
|
||||||
$distinct = $this->db->capabilities['distinct_on_text'] ? 'DISTINCT' : '';
|
$distinct = $this->db->capabilities['distinct_on_text'] ? 'DISTINCT' : '';
|
||||||
@ -778,7 +761,7 @@ class soinfolog // DB-Layer
|
|||||||
if ($action == '' || $action == 'sp' || count($links))
|
if ($action == '' || $action == 'sp' || count($links))
|
||||||
{
|
{
|
||||||
$sql_query = "FROM $this->info_table main $join WHERE ($filtermethod $pid $sql_query) $link_extra";
|
$sql_query = "FROM $this->info_table main $join WHERE ($filtermethod $pid $sql_query) $link_extra";
|
||||||
|
|
||||||
if ($this->db->Type == 'mysql' && $this->db->ServerInfo['version'] >= 4.0)
|
if ($this->db->Type == 'mysql' && $this->db->ServerInfo['version'] >= 4.0)
|
||||||
{
|
{
|
||||||
$mysql_calc_rows = 'SQL_CALC_FOUND_ROWS ';
|
$mysql_calc_rows = 'SQL_CALC_FOUND_ROWS ';
|
||||||
@ -793,7 +776,7 @@ class soinfolog // DB-Layer
|
|||||||
$count_subs = ",(SELECT COUNT(*) FROM $this->info_table sub WHERE sub.info_id_parent=main.info_id AND $acl_filter) AS info_anz_subs";
|
$count_subs = ",(SELECT COUNT(*) FROM $this->info_table sub WHERE sub.info_id_parent=main.info_id AND $acl_filter) AS info_anz_subs";
|
||||||
}
|
}
|
||||||
$info_customfield = '';
|
$info_customfield = '';
|
||||||
if ($sortbycf != '')
|
if ($sortbycf != '')
|
||||||
{
|
{
|
||||||
$info_customfield = ", (SELECT DISTINCT info_extra_value FROM $this->extra_table sub2 where sub2.info_id=main.info_id AND info_extra_name=".$this->db->quote($sortbycf).") AS cfsortcrit ";
|
$info_customfield = ", (SELECT DISTINCT info_extra_value FROM $this->extra_table sub2 where sub2.info_id=main.info_id AND info_extra_name=".$this->db->quote($sortbycf).") AS cfsortcrit ";
|
||||||
}
|
}
|
||||||
@ -815,9 +798,9 @@ class soinfolog // DB-Layer
|
|||||||
}
|
}
|
||||||
// check if start is behind total --> loop to set start=0
|
// check if start is behind total --> loop to set start=0
|
||||||
while (isset($query['start']) && $query['start'] > $query['total']);
|
while (isset($query['start']) && $query['start'] > $query['total']);
|
||||||
|
|
||||||
foreach($rs as $info)
|
foreach($rs as $info)
|
||||||
{
|
{
|
||||||
$info['info_responsible'] = $info['info_responsible'] ? explode(',',$info['info_responsible']) : array();
|
$info['info_responsible'] = $info['info_responsible'] ? explode(',',$info['info_responsible']) : array();
|
||||||
|
|
||||||
$ids[$info['info_id']] = $info;
|
$ids[$info['info_id']] = $info;
|
||||||
@ -845,10 +828,10 @@ class soinfolog // DB-Layer
|
|||||||
}
|
}
|
||||||
return $ids;
|
return $ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query infolog for users with open entries, either own or responsible, with start or end within 4 days
|
* Query infolog for users with open entries, either own or responsible, with start or end within 4 days
|
||||||
*
|
*
|
||||||
* This functions tries to minimize the users really checked with the complete filters, as creating a
|
* This functions tries to minimize the users really checked with the complete filters, as creating a
|
||||||
* user enviroment and running the specific check costs ...
|
* user enviroment and running the specific check costs ...
|
||||||
*
|
*
|
||||||
@ -857,7 +840,7 @@ class soinfolog // DB-Layer
|
|||||||
function users_with_open_entries()
|
function users_with_open_entries()
|
||||||
{
|
{
|
||||||
$users = array();
|
$users = array();
|
||||||
|
|
||||||
$this->db->select($this->info_table,'DISTINCT info_owner',array(
|
$this->db->select($this->info_table,'DISTINCT info_owner',array(
|
||||||
str_replace(' AND ','',$this->statusFilter('open')),
|
str_replace(' AND ','',$this->statusFilter('open')),
|
||||||
'(ABS(info_startdate-'.time().')<'.(4*24*60*60).' OR '. // start_day within 4 days
|
'(ABS(info_startdate-'.time().')<'.(4*24*60*60).' OR '. // start_day within 4 days
|
||||||
|
Loading…
Reference in New Issue
Block a user