##
PHP Gift Registry (phpgiftreg)

### Description

The PHP Gift Registry is a web-enabled gift registry intended for use among a circle of family members or friends. It is intended to fill the following purposes:

- Permit the long-term storage of a list of items one desires, along with its price, where it can be bought, and (optionally) a URL where it can be viewed.
- Enabled items to be "locked" by one shopper so that the same item is not bought by someone else.

Its features include:

- A single unifying view of items on your own list and people whose lists you can view.
- A now-optional request/permit system by which you can control who can see your list.
- A "checkin/checkout" system which allows you to reserve items on someone's list.
- An in-system messaging system by which users can be informed of item deletions or custom announcements.
- New users can request accounts. Optionally, administrators will be informed about the request, and they can then approve or reject the request. Either way, the user will be informed by e-mail.
- A site-customizable ranking system for items.
- An events system for users to add significant (read: gift-bearing) events which will show up on others' displays when the event nears.

### How to Get It and Use It

The software can be downloaded from SourceForge.net in the Files area. Installation instructions can be found within the tarball, or can be read here. You will require the following software:

- Apache 1.3.x or Apache 2.x or later.
- PHP 4.x or later. (register_globals = Off is okay, too.)
- MySQL 3.x or later.
- An operating system capable of running all of the above.

I have personally tested this application on Windows 2000, Windows XP, Slackware Linux, Fedora Core 1 and FreeBSD with varying versions of Apache, PHP and MySQL. I have encountered no issues.

### phpgiftreg in Action

Main view | Shopping view | Edit item

### Documentation

Here are some basic instructions to get you going.

A phpgiftreg installation consists of a set of users. Each user is a family member who maintains their own gift list. One or more users are designated as administrators; these users handle approvals of new users and can maintain categories and rankings (described below). When you run the setup script for the phpgiftreg, you will create the first administrator.

Users belong to zero or more families. (A user should always belong to one or more families.) A family is simply a group of users who would be interested in exchanging gifts for each other. For example, if Adam Smith marries Jane Doe, you'd likely have two families defined: the Smiths and the Does. Adam and Jane would probably belong to both families, while Adam's parents and siblings would only belong to the Smith family, and Jane's parents and siblings would only belong to the Doe family. This prevents Adam's second-cousin-twice-removed from seeing Jane's orthodontist, for example. Users can easily be added and removed from families.

Each user maintains a list of users that he/she shops for. All this means is that he can see that user's gift list. Your phpgiftreg installation can be set up to auto-allow shopping requests; otherwise, a user who requests to shop for another user must wait for the recipient to approve the request.

A gift list consists of a set of zero or more items. Each item has a description, an estimated price, a category, a store/retailer where it can be purchased, a ranking, a quantity, a URL where potential buyers can find more information, a comment, and an image. Only the description, price, category, store/retailer, ranking and quantity are mandatory.

Rankings and categories are maintained by the administrator. For the most part, the rankings should be adequate for most users, but the categories can be easily extended.

When a user shops for another user, he/she can reserve or purchase an item. A reservation simply marks the the intention of the buyer to purchase the item. A purchase marks the user as having purchased the item.

When quantities are involved, multiple users can allocate different amounts of reservations and purchases for the same item. For example, Jane Doe can ask for 10 steak knives. Adam's mom can reserve 4 and Jane's friend can purchase 2, leaving 4 available. Once Adam's mom buys the 4 knives, she can convert them to a purchase. If she changes her mind, she can release the reservation, leaving 8 available. Purchases can always be returned, which converts them back to a reservation.

If anonymous purchasing is turned on in the config.php, anybody shopping for another user can see how many of an item are reserved/purchased, but not who did so.

A user who has made multiple reservations/purchases for another user can use the shopping list feature to quickly print off a list of items they have reserved or purchased. This is handy to take to the store, rather than printing off each user's full list.

Once a user receives an item, he/she can mark the item as received, which is different from a deletion in that only the received quantity is debited from their item. If a reserved/purchased item is deleted without being received, a message is privately sent to the reserver/purchaser to inform them that the item is no longer required.

The system also allows the definition of events, which are gift-bearing opportunities, like Christmas and birthdays. Events can be personal or system events. Personal events are events specific to that user, like a birthday or anniversary. System events are events that apply to the entire family, like Christmas or Hanukkah. All events can be marked as recurring, meaning they repeat year after year. Only the administrator can modify system events.

The system also supports messages, which is a basic send/receive system for notifications. Most users should have the option set to automatically e-mail any messages received, provided they have specified a valid e-mail address.

Copyright 2008 Ryan Walberg <generalpf@yahoo.com>