Most of the code handling "free text tags" (e.g. author, topic, objective, etc.) is duplicated for each tag type. This code could really be consolidated into two general functions (e.g. getTags(moduleID) and setTags(moduleID, tags) ) to reduce the code base and improve both maintainability and the ability to add new tag types.
Also consider consolidating the way these tags are stored in the database (e.g. in just one table instead of separate tables for each type).