Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F9790448
example_addressbook_backend.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
example_addressbook_backend.php
View Options
<?php
/**
* Example backend class for a custom address book
*
* This one just holds a static list of address records
*
* @author Thomas Bruederli
*/
class
example_addressbook_backend
extends
rcube_addressbook
{
public
$primary_key
=
'ID'
;
public
$readonly
=
true
;
public
$groups
=
true
;
private
$filter
;
private
$result
;
private
$name
;
private
$db_groups
=
[
[
'ID'
=>
'testgroup1'
,
'name'
=>
"Testgroup"
],
[
'ID'
=>
'testgroup2'
,
'name'
=>
"Sample Group"
],
];
private
$db_users
=
[
[
'ID'
=>
'111'
,
'name'
=>
"John Doe"
,
'firstname'
=>
"John"
,
'surname'
=>
"Doe"
,
'email'
=>
"example1@roundcube.net"
,
'groups'
=>
[
'testgroup1'
]
],
[
'ID'
=>
'112'
,
'name'
=>
"Jane Example"
,
'firstname'
=>
"Jane"
,
'surname'
=>
"Example"
,
'email'
=>
"example2@roundcube.net"
,
'groups'
=>
[
'testgroup2'
]
]
];
public
function
__construct
(
$name
)
{
$this
->
ready
=
true
;
$this
->
name
=
$name
;
}
/**
* Get group properties such as name and email address(es)
*
* @param string $group_id Group identifier
*
* @return ?array Group properties as hash array, null in case of error.
*/
function
get_group
(
$group_id
)
{
foreach
(
$this
->
db_groups
as
$group
)
{
if
(
$group
[
'ID'
]
==
$group_id
)
{
return
$group
;
}
}
}
public
function
get_name
()
{
return
$this
->
name
;
}
public
function
set_search_set
(
$filter
)
{
$this
->
filter
=
$filter
;
}
public
function
get_search_set
()
{
return
$this
->
filter
;
}
public
function
reset
()
{
$this
->
result
=
null
;
$this
->
filter
=
null
;
}
function
list_groups
(
$search
=
null
,
$mode
=
0
)
{
if
(
is_string
(
$search
)
&&
strlen
(
$search
))
{
$result
=
[];
foreach
(
$this
->
db_groups
as
$group
)
{
if
(
stripos
(
$group
[
'name'
],
$search
)
!==
false
)
{
$result
[]
=
$group
;
}
}
return
$result
;
}
return
$this
->
db_groups
;
}
public
function
list_records
(
$cols
=
null
,
$subset
=
0
,
$nocount
=
false
)
{
// Note: Paging is not implemented
return
$this
->
result
=
$this
->
count
();
}
public
function
search
(
$fields
,
$value
,
$strict
=
false
,
$select
=
true
,
$nocount
=
false
,
$required
=
[])
{
// Note: we do not implement all possible search request modes and variants.
// We implement only the simplest searching case in "select" mode
$result
=
new
rcube_result_set
();
foreach
(
$this
->
list_records
()
as
$record
)
{
if
(
is_string
(
$value
))
{
$found
=
false
;
foreach
(
$record
as
$key
=>
$data
)
{
$data
=
is_array
(
$data
)
?
implode
(
' '
,
$data
)
:
(
string
)
$data
;
if
(
strpos
(
mb_strtolower
(
$data
),
mb_strtolower
(
$value
))
!==
false
)
{
$found
=
true
;
break
;
}
}
if
(
$found
)
{
$result
->
add
(
$record
);
}
}
}
return
$result
;
}
public
function
count
()
{
// Note: Paging is not implemented
$result
=
new
rcube_result_set
(
0
,
(
$this
->
list_page
-
1
)
*
$this
->
page_size
);
$count
=
0
;
foreach
(
$this
->
db_users
as
$user
)
{
if
(
$this
->
group_id
&&
(
empty
(
$user
[
'groups'
])
||
!
in_array
(
$this
->
group_id
,
$user
[
'groups'
])))
{
continue
;
}
// TODO: This should consider current search filter
$result
->
add
(
$user
);
$count
++;
}
$result
->
count
=
$count
;
return
$result
;
}
public
function
get_result
()
{
return
$this
->
result
;
}
public
function
get_record
(
$id
,
$assoc
=
false
)
{
$result
=
new
rcube_result_set
(
0
);
foreach
(
$this
->
db_users
as
$user
)
{
if
(
$user
[
'ID'
]
==
$id
)
{
if
(
$assoc
)
{
return
$user
;
}
$result
->
add
(
$user
);
$result
->
count
=
1
;
}
}
return
$result
;
}
/**
* Get group assignments of a specific contact record
*
* @param mixed $id Record identifier
*
* @return array List of assigned groups, indexed by group ID
*/
function
get_record_groups
(
$id
)
{
$result
=
[];
foreach
(
$this
->
db_users
as
$user
)
{
if
(
$user
[
'ID'
]
==
$id
)
{
foreach
(
$this
->
db_groups
as
$group
)
{
if
(!
empty
(
$user
[
'groups'
])
&&
in_array
(
$group
[
'ID'
],
$user
[
'groups'
]))
{
$result
[
$group
[
'ID'
]]
=
$group
[
'name'
];
}
}
}
}
return
$result
;
}
/**
* Setter for the current group
*/
function
set_group
(
$gid
)
{
$this
->
group_id
=
$gid
;
}
function
create_group
(
$name
)
{
$result
=
false
;
return
$result
;
}
function
delete_group
(
$gid
)
{
return
false
;
}
function
rename_group
(
$gid
,
$newname
,
&
$newid
)
{
return
$newname
;
}
function
add_to_group
(
$group_id
,
$ids
)
{
return
false
;
}
function
remove_from_group
(
$group_id
,
$ids
)
{
return
false
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 8:44 AM (10 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1245321
Default Alt Text
example_addressbook_backend.php (5 KB)
Attached To
Mode
R3 roundcubemail
Attached
Detach File
Event Timeline
Log In to Comment