diff --git a/addressbook/addcategory.php b/addressbook/addcategory.php
new file mode 100644
index 0000000000..2599816608
--- /dev/null
+++ b/addressbook/addcategory.php
@@ -0,0 +1,65 @@
+common->get_tpl_dir('addressbook'));
+ $t->set_file(array('form' => 'category_form.tpl'));
+ $t->set_block('form','add','addhandle');
+ $t->set_block('form','edit','edithandle');
+
+ $c = CreateObject('phpgwapi.categories');
+
+ if ($submit) {
+ $errorcount = 0;
+
+ $exists = $c->exists('main',$cat_name);
+ if ($exists == True) { $error[$errorcount++] = lang('That category name has been used already !'); }
+
+ if (!$cat_name) { $error[$errorcount++] = lang('Please enter a name for that category !'); }
+
+ if (! $error) {
+ $cat_name = addslashes($cat_name);
+ $cat_description = addslashes($cat_description);
+
+ $c->add($cat_name,$cat_parent,$cat_description,$cat_data);
+ }
+ }
+
+ if ($errorcount) { $t->set_var('message',$phpgw->common->error_list($error)); }
+ if (($submit) && (! $error) && (! $errorcount)) { $t->set_var('message',lang("Category $cat_name has been added !")); }
+ if ((! $submit) && (! $error) && (! $errorcount)) { $t->set_var('message',''); }
+
+ $t->set_var('font',$font);
+ $t->set_var('user_name',$phpgw_info["user"]["fullname"]);
+ $t->set_var('title_categories',lang('Add category for'));
+ $t->set_var('actionurl',$phpgw->link('/addressbook/addcategory.php'));
+ $t->set_var('hidden_vars','');
+ $t->set_var('lang_choose',lang('Choose the category'));
+ $t->set_var('lang_main_cat',lang('Category'));
+
+ $t->set_var('main_cat_list',$c->formated_list('select','mains'));
+ $t->set_var('lang_name',lang('Category name'));
+ $t->set_var('lang_descr',lang('Category description'));
+ $t->set_var('cat_name',$cat_name);
+ $t->set_var('cat_description',$cat_description);
+ $t->set_var('lang_add',lang('Add'));
+ $t->set_var('lang_reset',lang('Clear Form'));
+ $t->set_var('edithandle','');
+ $t->set_var('addhandle','');
+ $t->pparse('out','form');
+ $t->pparse('addhandle','add');
+
+ $phpgw->common->phpgw_footer();
+?>
diff --git a/addressbook/categories.php b/addressbook/categories.php
new file mode 100644
index 0000000000..835c1899f3
--- /dev/null
+++ b/addressbook/categories.php
@@ -0,0 +1,128 @@
+ "addressbook",
+ "enable_nextmatchs_class" => True,
+ "enable_categories_class" => True);
+
+ include("../header.inc.php");
+
+ $t = CreateObject('phpgwapi.Template',$phpgw->common->get_tpl_dir('addressbook'));
+
+ $t->set_file(array('cat_list_t' => 'listcats.tpl',
+ 'cat_list' => 'listcats.tpl'));
+ $t->set_block('cat_list_t','cat_list','list');
+
+ $common_hidden_vars = "\n"
+ . "\n"
+ . "\n"
+ . "\n"
+ . "\n";
+
+ if (isset($phpgw_info["user"]["preferences"]["addressbook"]["addressbook_font"])) {
+ $font = $phpgw_info["user"]["preferences"]["addressbook"]["addressbook_font"];
+ }
+ else { $font = set_font(); }
+
+ $t->set_var('font',$font);
+ $t->set_var('user_name',$phpgw_info["user"]["fullname"]);
+ $t->set_var('title_categories',lang('Categories for'));
+ $t->set_var('lang_action',lang('Category list'));
+ $t->set_var('add_action',$phpgw->link("/addressbook/addcategory.php"));
+ $t->set_var('lang_add',lang('Add'));
+ $t->set_var('lang_search',lang('Search'));
+ $t->set_var('actionurl',$phpgw->link("/addressbook/categories.php"));
+
+ if (! $start) { $start = 0; }
+
+ if($phpgw_info["user"]["preferences"]["common"]["maxmatchs"] && $phpgw_info["user"]["preferences"]["common"]["maxmatchs"] > 0) {
+ $limit = $phpgw_info["user"]["preferences"]["common"]["maxmatchs"];
+ }
+ else { $limit = 15; }
+
+ $c = CreateObject('phpgwapi.categories');
+ $categories = $c->return_array($type,$start,$limit,$query,$sort,$order);
+
+//--------------------------------- nextmatch --------------------------------------------
+
+ $left = $phpgw->nextmatchs->left('/addressbook/categories.php',$start,$c->total_records);
+ $right = $phpgw->nextmatchs->right('/addressbook/categories.php',$start,$c->total_records);
+ $t->set_var('left',$left);
+ $t->set_var('right',$right);
+
+ if ($c->total_records > $limit) {
+ $lang_showing=lang("showing x - x of x",($start + 1),($start + $limit),$c->total_records);
+ }
+ else { $lang_showing=lang("showing x",$c->total_records); }
+ $t->set_var('lang_showing',$lang_showing);
+
+// ------------------------------ end nextmatch ------------------------------------------
+
+//------------------- list header variable template-declarations -------------------------
+
+ $t->set_var('th_bg',$phpgw_info["theme"][th_bg]);
+ $t->set_var('sort_name',$phpgw->nextmatchs->show_sort_order($sort,'cat_name',$order,'/addressbook/categories.php',lang('Name')));
+ $t->set_var('sort_description',$phpgw->nextmatchs->show_sort_order($sort,'cat_description',$order,'/addressbook/categories.php',lang('Description')));
+ $t->set_var('lang_addressbook',lang('Addressbook'));
+ $t->set_var('lang_edit',lang('Edit'));
+ $t->set_var('lang_delete',lang('Delete'));
+
+// -------------------------- end header declaration --------------------------------------
+
+ for ($i=0;$inextmatchs->alternate_row_color($tr_color);
+ $t->set_var(tr_color,$tr_color);
+
+ $cat_id = $categories[$i]['id'];
+ $owner = $categories[$i]['owner'];
+ $name = $phpgw->strip_html($categories[$i]['name']);
+ $descr = $phpgw->strip_html($categories[$i]['description']);
+ if (! $descr) { $descr = ' '; }
+
+//-------------------------- template declaration for list records ---------------------------
+
+ $t->set_var(array('name' => $name,
+ 'descr' => $descr));
+
+
+ $t->set_var('addressbook',$phpgw->link('/addressbook/index.php',"filter=$cat_id"));
+
+ if ($categories[$i]["owner"] == $phpgw_info["user"]["account_id"]) {
+ $t->set_var('edit',$phpgw->link('/addressbook/editcategory.php',"cat_id=$cat_id"));
+ $t->set_var('lang_edit_entry',lang('Edit'));
+ }
+ else {
+ $t->set_var('edit','');
+ $t->set_var('lang_edit_entry',' ');
+ }
+ if ($categories[$i]["owner"] == $phpgw_info["user"]["account_id"]) {
+ $t->set_var('delete',$phpgw->link('/addressbook/deletecategory.php',"cat_id=$cat_id"));
+ $t->set_var('lang_delete_entry',lang('Delete'));
+ }
+ else {
+ $t->set_var('delete','');
+ $t->set_var('lang_delete_entry',' ');
+ }
+ $t->parse('list','cat_list',True);
+ }
+ }
+// ---------------------------- end record declaration -----------------------------------------
+
+ $t->parse('out','cat_list_t',True);
+ $t->p('out');
+
+ $phpgw->common->phpgw_footer();
+?>
diff --git a/addressbook/deletecategory.php b/addressbook/deletecategory.php
new file mode 100644
index 0000000000..e0249c0bff
--- /dev/null
+++ b/addressbook/deletecategory.php
@@ -0,0 +1,59 @@
+ True,
+ 'nonavbar' => True);
+ }
+
+ $phpgw_info["flags"]["currentapp"] = "addressbook";
+ include("../header.inc.php");
+
+ $c = CreateObject('phpgwapi.categories');
+
+ if (! $cat_id) {
+ Header('Location: ' . $phpgw->link('/addressbook/categories.php'));
+ }
+
+ if ($confirm) {
+ $c->delete($cat_id);
+ Header('Location: ' . $phpgw->link('/addressbook/categories.php'));
+ }
+ else {
+ $hidden_vars = "\n";
+ $t = CreateObject('phpgwapi.Template',$phpgw->common->get_tpl_dir('addressbook'));
+ $t->set_file(array('category_delete' => 'delete.tpl'));
+ $t->set_var('deleteheader',lang('Are you sure you want to delete this category ?'));
+
+ $nolinkf = $phpgw->link('/addressbook/categories.php',"cat_id=$cat_id");
+ $nolink = "" . lang('No') ."";
+ $t->set_var("nolink",$nolink);
+
+ $yeslinkf = $phpgw->link('/addressbook/deletecategory.php',"cat_id=$cat_id&confirm=True");
+ $yeslinkf = "";
+
+ $yeslink = "" . lang('Yes') ."";
+ $yeslink = $yeslinkf;
+
+ $t->set_var('yeslink',$yeslink);
+
+ $t->pparse('out','category_delete');
+ }
+
+ $phpgw->common->phpgw_footer();
+?>
diff --git a/addressbook/editcategory.php b/addressbook/editcategory.php
new file mode 100644
index 0000000000..d4b9f1956a
--- /dev/null
+++ b/addressbook/editcategory.php
@@ -0,0 +1,75 @@
+link('/addressbook/categories.php',"sort=$sort&order=$order&query=$query&start=$start"
+ . "&filter=$filter"));
+ }
+
+ $t = CreateObject('phpgwapi.Template',$phpgw->common->get_tpl_dir('addressbook'));
+ $t->set_file(array('form' => 'category_form.tpl'));
+ $t->set_block('form','add','addhandle');
+ $t->set_block('form','edit','edithandle');
+
+ $c = CreateObject('phpgwapi.categories');
+
+ if ($submit) {
+ $errorcount = 0;
+ if (!$cat_name) { $error[$errorcount++] = lang('Please enter a name for that category !'); }
+ $phpgw->db->query("SELECT count(*) from phpgw_categories WHERE cat_name='$cat_name' AND cat_id !='$cat_id' AND cat_appname='"
+ . $phpgw_info["flags"]["currentapp"] ."'");
+ $phpgw->db->next_record();
+ if ($phpgw->db->f(0) != 0) { $error[$errorcount++] = lang('That category name has been used already !'); }
+
+ $cat_name = addslashes($cat_name);
+ $cat_description = addslashes($cat_description);
+
+ if (! $error) { $c->edit($cat_id,$cat_parent,$cat_name,$cat_description,$cat_data); }
+ }
+
+ if ($errorcount) { $t->set_var('message',$phpgw->common->error_list($error)); }
+ if (($submit) && (! $error) && (! $errorcount)) { $t->set_var('message',lang("Category $cat_name has been updated !")); }
+ if ((! $submit) && (! $error) && (! $errorcount)) { $t->set_var('message',''); }
+
+ $cats = $c->return_single($cat_id);
+
+ $t->set_var('font',$font);
+ $t->set_var('user_name',$phpgw_info["user"]["fullname"]);
+ $t->set_var('title_categories',lang('Edit category for'));
+ $t->set_var('lang_action',lang('Edit category'));
+ $t->set_var('actionurl',$phpgw->link('/addressbook/editcategory.php'));
+ $t->set_var('deleteurl',$phpgw->link('/addressbook/deletecategory.php'));
+ $hidden_vars = "\n";
+ $t->set_var('hidden_vars',$hidden_vars);
+ $t->set_var('lang_name',lang('Category name'));
+ $t->set_var('lang_descr',lang('Category description'));
+
+ $cat_id = $cats[0]['id'];
+
+ $t->set_var('cat_name',$phpgw->strip_html($cats[0]['name']));
+ $t->set_var('cat_description',$phpgw->strip_html($cats[0]['description']));
+
+ $t->set_var('lang_edit',lang('Edit'));
+ $t->set_var('lang_delete',lang('Delete'));
+
+ $t->set_var('edithandle','');
+ $t->set_var('addhandle','');
+
+ $t->pparse('out','form');
+ $t->pparse('edithandle','edit');
+
+ $phpgw->common->phpgw_footer();
+?>