forked from extern/egroupware
- regular search method used by index is called now search
- search for (not yet working) extended search is called now ex_search (will be replaced by search) - some parameter cleanups - some changes for the new API contacts class, which just extends the bocontacts class of addressbook
This commit is contained in:
parent
c170b9a047
commit
2315bfc199
@ -309,14 +309,12 @@ class bocontacts extends socontacts
|
||||
/**
|
||||
* reads contacts matched by key and puts all cols in the data array
|
||||
*
|
||||
* @param array $keys array with keys in form internalName => value, may be a scalar value if only one key
|
||||
* @param string/array $extra_cols string or array of strings to be added to the SELECT, eg. "count(*) as num"
|
||||
* @param string $join='' sql to do a join, added as is after the table-name, eg. ", table2 WHERE x=y" or
|
||||
* @param int/string $contact_id
|
||||
* @return array/boolean contact data or false on error
|
||||
*/
|
||||
function read($keys,$extra_cols='',$join='')
|
||||
function read($contact_id)
|
||||
{
|
||||
$data = parent::read($keys,$extra_cols,$join);
|
||||
$data = parent::read($contact_id);
|
||||
if (!$data || !$this->check_perms(EGW_ACL_READ,$data))
|
||||
{
|
||||
return false;
|
||||
|
@ -25,11 +25,6 @@
|
||||
|
||||
class socontacts
|
||||
{
|
||||
/**
|
||||
* @var string $links_table table name 'egw_links'
|
||||
*/
|
||||
var $links_table = 'egw_links';
|
||||
|
||||
/**
|
||||
* @var string $extra_table name of customefields table
|
||||
*/
|
||||
@ -93,6 +88,11 @@ class socontacts
|
||||
*/
|
||||
var $content_types = array();
|
||||
|
||||
/**
|
||||
* @var int $total total number of matches of last search
|
||||
*/
|
||||
var $total;
|
||||
|
||||
function socontacts($contact_app='addressbook')
|
||||
{
|
||||
$this->user = $GLOBALS['egw_info']['user']['account_id'];
|
||||
@ -124,7 +124,9 @@ class socontacts
|
||||
$this->grants = $GLOBALS['egw']->acl->get_grants($contact_app,false);
|
||||
|
||||
// remove some columns, absolutly not necessary to search in sql
|
||||
$this->columns_to_search = array_diff(array_values($this->somain->db_cols),array('jpegphoto','owner','tid','private','id','cat_id','modified','modifier','creator','created'));
|
||||
$this->columns_to_search = array_diff(array_values($this->somain->db_cols),array('jpegphoto','owner','tid',
|
||||
'private','id','cat_id','modified','modifier','creator','created','tz'));
|
||||
$this->columns_to_search[] = $this->extra_value; // custome fields from extra_table
|
||||
$this->account_extra_search = array('account_firstname','account_lastname','account_email','account_lid');
|
||||
}
|
||||
// add grants for accounts: admin --> everything, everyone --> read
|
||||
@ -259,7 +261,7 @@ class socontacts
|
||||
/**
|
||||
* reads contact data including custom fields
|
||||
*
|
||||
* @param interger/string $contact_id contact_id or 'a'.account_id
|
||||
* @param int/string $contact_id contact_id or 'a'.account_id
|
||||
* @return array/boolean data if row could be retrived else False
|
||||
*/
|
||||
function read($contact_id)
|
||||
@ -301,7 +303,7 @@ class socontacts
|
||||
* @param boolean $need_full_no_count=false If true an unlimited query is run to determine the total number of rows, default false
|
||||
* @return array of matching rows (the row is an array of the cols) or False
|
||||
*/
|
||||
function search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
|
||||
function ex_search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
|
||||
{
|
||||
//echo 'socontacts::search->criteria:'; _debug_array($criteria);
|
||||
// we can only deal with one category atm.
|
||||
@ -498,7 +500,7 @@ class socontacts
|
||||
* @param boolean $need_full_no_count=false If true an unlimited query is run to determine the total number of rows, default false
|
||||
* @return array of matching rows (the row is an array of the cols) or False
|
||||
*/
|
||||
function ®ular_search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
|
||||
function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
|
||||
{
|
||||
//echo "<p>socontacts::search(".print_r($criteria,true).",'$only_keys','$order_by','$extra_cols','$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n";
|
||||
|
||||
|
@ -37,7 +37,8 @@ class socontacts_sql extends so_sql
|
||||
* For a union-query you call search for each query with $start=='UNION' and one more with only $order_by and $start set to run the union-query.
|
||||
*
|
||||
* @param array/string $criteria array of key and data cols, OR a SQL query (content for WHERE), fully quoted (!)
|
||||
* @param boolean/string $only_keys=true True returns only keys, False returns all cols. comma seperated list of keys to return
|
||||
* @param boolean/string/array $only_keys=true True returns only keys, False returns all cols. or
|
||||
* comma seperated list or array of columns to return
|
||||
* @param string $order_by='' fieldnames + {ASC|DESC} separated by colons ',', can also contain a GROUP BY (if it contains ORDER BY)
|
||||
* @param string/array $extra_cols='' string or array of strings to be added to the SELECT, eg. "count(*) as num"
|
||||
* @param string $wildcard='' appended befor and after each criteria
|
||||
@ -52,7 +53,7 @@ class socontacts_sql extends so_sql
|
||||
*/
|
||||
function &search($criteria,$only_keys=True,$order_by='',$extra_cols='',$wildcard='',$empty=False,$op='AND',$start=false,$filter=null,$join='',$need_full_no_count=false)
|
||||
{
|
||||
if ((int) $this->debug >= 4) echo "<p>socontacts_sql::search(".print_r($criteria,true).",'$only_keys','$order_by','$extra_cols','$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n";
|
||||
if ((int) $this->debug >= 4) echo "<p>socontacts_sql::search(".print_r($criteria,true).",".print_r($only_keys,true).",'$order_by','$extra_cols','$wildcard','$empty','$op','$start',".print_r($filter,true).",'$join')</p>\n";
|
||||
|
||||
$owner = isset($filter['owner']) ? $filter['owner'] : (isset($criteria['owner']) ? $criteria['owner'] : null);
|
||||
|
||||
@ -88,6 +89,8 @@ class socontacts_sql extends so_sql
|
||||
$extra_cols = $extra_cols ? array_merge(is_array($extra_cols) ? $extra_cols : implode(',',$extra_cols),array_values($accounts2contacts)) :
|
||||
array_values($accounts2contacts);
|
||||
|
||||
// we need to remove the above columns from the select list, as they are added again via extra_cols and
|
||||
// having them double is ambigues
|
||||
if (!$only_keys)
|
||||
{
|
||||
$account_table = $GLOBALS['egw']->db->get_table_definitions('phpgwapi',$this->accounts_table); // global db is on phpgwapi
|
||||
@ -95,20 +98,39 @@ class socontacts_sql extends so_sql
|
||||
$only_keys = implode(',',array_merge(array_diff(array_keys($this->db_cols),array_keys($accounts2contacts)),
|
||||
array_keys($account_table['fd'])));
|
||||
}
|
||||
elseif($only_keys !== true)
|
||||
{
|
||||
if (!is_array($only_keys)) $only_keys = explode(',',$only_keys);
|
||||
|
||||
foreach(array_keys($accounts2contacts) as $col)
|
||||
{
|
||||
if (($key = array_search($col,$only_keys)) !== false ||
|
||||
($key = array_search(str_replace('contact_','',$col),$only_keys)) !== false)
|
||||
{
|
||||
unset($only_keys[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach($filter as $col => $value)
|
||||
{
|
||||
if (!is_int($col))
|
||||
if (!is_int($col) && ($db_col = array_search($col,$this->db_cols)) !== false)
|
||||
{
|
||||
if (($db_col = array_search($col,$this->db_cols)) !== false && isset($accounts2contacts[$db_col]))
|
||||
if (isset($accounts2contacts[$db_col]))
|
||||
{
|
||||
unset($filter[$col]);
|
||||
$filter[] = str_replace(' AS '.$db_col,'',$accounts2contacts[$db_col]).'='.$this->db->quote($value,$this->table_def['fd'][$db_col]['type']);
|
||||
$filter[] = str_replace(' AS '.$db_col,'',$accounts2contacts[$db_col]).
|
||||
($value === "!''" ? "!=''" : '='.$this->db->quote($value,$this->table_def['fd'][$db_col]['type']));
|
||||
}
|
||||
elseif($value == "!''") // not empty query, will match all accounts, as their value is NULL not ''
|
||||
{
|
||||
$filter[] = "($db_col != '' AND $db_col IS NOT NULL)";
|
||||
}
|
||||
}
|
||||
elseif (preg_match("/^([a-z0-9_]+) *(=|!=|LIKE|NOT LIKE) *'(.*)'\$/i",$value,$matches))
|
||||
elseif (preg_match("/^([a-z0-9_]+) *(=|!=|LIKE|NOT LIKE|=!) *'(.*)'\$/i",$value,$matches))
|
||||
{
|
||||
if (($db_col = array_search($matches[1],$this->db_cols)) !== false && isset($accounts2contacts[$db_col]))
|
||||
{
|
||||
if ($matches[2] == '=!') $matches[2] = '!=';
|
||||
$filter[$col] = str_replace(' AS '.$db_col,'',$accounts2contacts[$db_col]).' '.$matches[2].' \''.$matches[3].'\'';
|
||||
}
|
||||
}
|
||||
|
@ -329,7 +329,7 @@ class uicontacts extends bocontacts
|
||||
{
|
||||
$query['col_filter'][] = $query['order']."!=''";
|
||||
}
|
||||
$rows = (array) $this->regular_search($criteria,$id_only,$order,'','%',false,'OR',array((int)$query['start'],(int) $query['num_rows']),$query['col_filter']);
|
||||
$rows = (array) parent::search($criteria,$id_only,$order,'','%',false,'OR',array((int)$query['start'],(int) $query['num_rows']),$query['col_filter']);
|
||||
//echo "<p style='margin-top: 100px;'>".$this->somain->db->Query_ID->sql."</p>\n";
|
||||
|
||||
if ($id_only) return $this->total; // no need to set other fields or $readonlys
|
||||
@ -878,7 +878,7 @@ class uicontacts extends bocontacts
|
||||
$GLOBALS['egw_info']['flags']['app_header'] = lang('Addressbook'). ' - '. lang('Advanced search');
|
||||
if(!($GLOBALS['egw_info']['server']['contact_repository'] == 'sql' || !isset($GLOBALS['egw_info']['server']['contact_repository'])))
|
||||
{
|
||||
$GLOBALS['egw']->common->phpgw_header();
|
||||
$GLOBALS['egw']->common->egw_header();
|
||||
echo parse_navbar();
|
||||
echo '<p> Advanced Search is not supported for ldap storage yet. Sorry! </p>';
|
||||
$GLOBALS['egw']->common->egw_exit();
|
||||
@ -956,6 +956,11 @@ class uicontacts extends bocontacts
|
||||
$sel_options['tz'] = $tz + array('' => lang('doesn\'t matter'));
|
||||
$sel_options['tid'][] = lang('all');
|
||||
//foreach($this->content_types as $type => $data) $sel_options['tid'][$type] = $data['name'];
|
||||
|
||||
// some changes for the new addressbook
|
||||
$sel_options['owner'] = $this->get_addressbooks(EGW_ACL_READ,lang('all'));
|
||||
$readonlys['change_photo'] = true;
|
||||
|
||||
$this->tmpl->read('addressbook.search');
|
||||
return $this->tmpl->exec('addressbook.uicontacts.search',$content,$sel_options,$readonlys,$preserv);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user