6.0.0-git
2018-12-10
Last Modified 2017-08-01 by Guest

How to create a separate address book for use by Hermes

(or how to stop all my friends from being listed when creating a timesheet entry)
THIS ARTICLE IS BASED ON HERMES FOR HORDE 3.

Some insight on where Hermes (Time Tracking) gets it data for use within the pulldowns menu (as well as invoices, etc)

Hermes requires a good working install of Turba (Address Book). This is because Hermes needs an address book for the clients names. Go to Office -> Time Tracking -> Enter Time -> Client to see what I am talking about. If you saw everyone in your address book as an option, then you probably have your default Turba address book selected (in Turba), annoying eh? My address books contain several hundred entries, causing that pulldown to look horrible.

Solution? Create a separate address book for use by Hermes.

Step 1

Let's create a new table that is exactly the same as the default address book but with a different name. For the purposes of this document, I will use the name hordeclientdb for the new database table. (This is assuming you are using a sql backend).

1a. Create a new table.

Go to turba/scripts/sql and copy the file that you used to create your original Turba table. So, assuming that you are using MySQL, copy turba_objects.mysql.sql to something like turba_clients.mysql.sql. Edit the new file, turba_clients.mysql.sql and change all entries that have turba_objects and change them with the new name, turba_clients. You should encounter three instances of turba_objects, one for the CREATE TABLE, another for a CREATE INDEX, and the last for a GRANT commands.

Save your file and create the table. I.e., in MySQL do mysql -p < turba_clients.mysql.sql. Assuming you've had no errors, continue to step 1b.

1b. Edit turba/config/sources.php.

Add entries identical to the original table, leaving the original intact.

There is a bit of a cheat you can do in SQL (it has to be a recent version of MySQL if that is what you are using, eg. 5.x, maybe 4.x will do it) to get existing timeslice clients into your new table, I am not sure if Chuck will like it though ;-)

<pre>
insert into turba_clients
SELECT * FROM turba_objects WHERE object_id IN (
select clientjob_id FROM hermes_timeslices
);
</pre>

It will fall down if you use the above 'sql script' method, and your turba_clients table has had any extra fields added to it though, so you must make sure they are the same.

Another cheat to make sure they are the same, combined with the above is:

<pre>
create table turba_clients
SELECT * FROM turba_objects WHERE object_id IN (
select clientjob_id FROM hermes_timeslices
);
</pre>

Those SQL cheats worked for me (Kev Green).

Change the lines for the new entry to look like the below example.

$cfgSources['hordeclientdb'] = array(
   'title' => _("My Addressbook"),
   'type' => 'sql',
   'params' => array_merge($conf['sql'], array('table' => 'turba_clients')),

(Look over the rest of the entries for the new table, ensuring that it is readable, etc.)

This new source must be made 'browseable' (set the element 'browse' => true) otherwise the underlying search for 'all entries' will fail, and you'll get "There are no clients which you have access to" instead of a drop-down list of clients when you stop the clock on a timeslice. (Kev Green).

Step 2

Now tell Hermes which address book to use. Using an Administrator enabled login, go to Administration -> Setup -> Address Book (turba) -> name of client address book. In the field above, enter the name of the database you wish to use, we used hordeclientdb.

Populate the new table with just the names and addresses for your clients, within Turba as you would any addressbook entry.

Permission your users to see/use this new database.

Result? you should now have a nicely trimmed selection list.

Alternate solution

If you are using Turba 2.1 or higher and are using shared address books, you can follow these steps. For this example, we are using shares on a source called localsql and want to create a shared, client address book called Our Clients.

Step 1

Create a new shared address book. If you already have a shared address book created for your client list, skip to step 2.

1a. Log in to Turba as the account that you want to be the owner of the shared address book.
1b. Click on My Address Books, choose a name for the new address book (Our Clients in this example).
1c. Choose the new address book (Our Clients) in the Edit Address Books section, and click on Edit Permissions. Set permissions appropriate to your needs.

Step 2

While logged on as an administrator, go to Administration -> DataTree and expand the horde.shares.turba branch. Expand the branch for your shared source ( localsql in this example) and locate the entry for the address book we just created.

Turba 2.2 and up: Shares are no longer hierarchical in nature, so you will not see the source type as described above. You will only see a list containing an entry for every Turba share.

Now, the tricky part. If you have a fairly large user base, you will most likely have to browse through a good number of entries. Most of the entries will be your user's default address books, these will be named after the user. What you are looking for is an entry such as 82e8f032c1ab043b5efaa4fde50653d2. These are user created address books. In our example, the one we are looking for will have something like this when you expand it:

Array ( )
Array (
   [0] => Array (
       [name] => owner
       [key] =>
       [value] => mike
    )
   [1] => Array (
       [name] => name
       [key] =>
       [value] => test
    )
   [2] => Array (
       [name] => uid
       [key] =>
       [value] => 82e8f032c1ab043b5efaa4fde50653d2
    )
    .
    .
    .

Once you find the correct entry, copy down the uid (82e8f032c1ab043b5efaa4fde50653d2).

Turba 2.2 and up: The uid will be the name of the datatree entry so it is no longer
required to exand the datatree entry to find it, although it might make it easier to copy
and paste if you do so.

Step 3

Go to the Administration -> Setup -> Address Book (turba) and fill the following in to the Name of Client Addressbook field:

localsql:82e8f032c1ab043b5efaa4fde50653d2

That's the source name (localsql) followed by a colon, followed by the uid of the address book we want to use.

Turba 2.2 and up: You no longer should include the source type in the name. For the above example, the correct value to enter in the Name of Client Addressbook field would be 82e8f032c1ab043b5efaa4fde50653d2.

Your shared client address book should now be visible in Hermes, without having to create an entirely seperate sql source.

Alternate solution 2 - MySQL

If you are using mysql as backend for the Shares Administration -> Setup -> Horde (horde) -> Shares then you'll need to get the addressbook uid from the manage addressbook section.

Step 1

Go to Organizing -> Adress Book -> My Adress Book. Set the permissions accordingly and then right-click "Edit" icon. You should be able to the "Link Location". Depending on your browser it may be called a bit different.

Step 2

Go to Administration -> Setup -> Address Book (turba) and fill the paste the copied link in to the Name of Client Addressbook field (it will look something like this):

http://domain.com/horde/turba/addressbooks/edit.php?a=cf5f669fdd0477984384d248efcf7f1c

No cut everything before the "=" so that it looks like this:

cf5f669fdd0477984384d248efcf7f1c

After you save this your shared client address book should now be visible in Hermes.