{"id":5,"date":"2011-09-29T14:43:23","date_gmt":"2011-09-29T14:43:23","guid":{"rendered":"http:\/\/blogs.law.harvard.edu\/cmcgrath\/?p=5"},"modified":"2011-09-29T15:01:47","modified_gmt":"2011-09-29T15:01:47","slug":"how-inscriptio-is-structured","status":"publish","type":"post","link":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/2011\/09\/29\/how-inscriptio-is-structured\/","title":{"rendered":"How Inscriptio is structured"},"content":{"rendered":"<p>Carrel Object List<\/p>\n<p>This was originally a google document developed collaboratively by project principals. This is still a work in progress and will evolve over time.<br \/>\nLibrary<\/p>\n<p>A library:<\/p>\n<p>* has many floors<br \/>\n* has an address, including latitude \/ longitude, URL and basic contact info<br \/>\n* has many reservable asset types<br \/>\n* has a bulletin board post expiration time<\/p>\n<p>Floor<\/p>\n<p>A floor:<\/p>\n<p>* belongs to a library<br \/>\n* has a map, most likely a high quality PNG<br \/>\n* is ordered relative to other floors &#8211; meaning a different floor is above or below it.<br \/>\n* has many call numbers<br \/>\n* has many subject areas.<br \/>\n* has many reservable assets<\/p>\n<p>Subject Area<\/p>\n<p>A subject area:<\/p>\n<p>* has and belongs to many floors<br \/>\n* has many call numbers<br \/>\n* has basic attributes like description and name<\/p>\n<p>Call number<\/p>\n<p>A call number:<\/p>\n<p>* belongs to a subject area<br \/>\n* has and belongs to many floors<br \/>\n* has a code, description and other basic attributes<\/p>\n<p>Reservable Asset<\/p>\n<p>A reservable asset:<\/p>\n<p>* belongs to a floor<br \/>\n* belongs to a reservable asset type<br \/>\n* has a location on the floor map &#8211; most likely an x y pixel offset to place it in the proper place.<br \/>\n* has many reservations<br \/>\n* has many users through its reservations<br \/>\n* has a section and number<br \/>\n* has a bulletin board<br \/>\n* has current users<br \/>\n* has a photo (optional)<br \/>\n* has a video (optional)<br \/>\n* has a minimum reservation time<br \/>\n* has a maximum reservation time<br \/>\n* has a reservation time increment &#8211; can only reserve in &#8211; say, 1 day or 1 week chunks.<br \/>\n* has a maximum number of concurrent users<br \/>\n* has a locker key \/ code (if defined in the reservable asset type)<br \/>\n* has general information, that\u2019s probably merged into the welcome message.<br \/>\n* can be relinquished by the user reserving it, returning a slot to the reservable pool.<\/p>\n<p>Reservable Asset Type<\/p>\n<p>A reservable asset type:<\/p>\n<p>* belongs to a Library<br \/>\n* has many reservable assets<br \/>\n* Has a name &#8211; carrel, locker, hold shelf, etc.<br \/>\n* Sets defaults for reservable assets &#8211; minimum reservation time, maximum reservation time, maximum number of concurrent users, reservation time increment, whether or not it has a code \/ key,<br \/>\n* Has options that effect the bulletin board &#8211; can have one? How long should posts live?<br \/>\n* has a photo<br \/>\n* has a welcome message, which may include follow-up instructions (Pick up your carrel reservation card here)<br \/>\n* has an expiration extension time period: the time before the expiration in which a user can renew a reservation for up to the maximum reservation time.<br \/>\n* has user types that can reserve this asset.<br \/>\n* has many Reservation Expiration Notices, which define the content and scheduling of reservation expiration messages. These messages can be related to either when an active reservation expires, or when a \u201creservation hold\u201d is expiration. A reservation hold is a reservation that hasn\u2019t been approved by a moderator.<br \/>\n* has a moderation flag &#8211; meaning, either the reservation goes through automatically without administrator approval OR an asset reservation must be OK\u2019d by an admin.<br \/>\n* has a \u201cmoderation held\u201d message. The welcome message can serve as the moderation approved message.<\/p>\n<p>Reservation Expiration Notices<\/p>\n<p>A reservation expiration notice:<\/p>\n<p>* has a type &#8211; \u201chold\u201d or \u201cactual,\u201d where \u201chold\u201d is a notice for the reservation hold expiration times, and \u201cactual\u201d is a notice for when an actively reserved item is expiring.<br \/>\n* belongs to a reservable asset type.<br \/>\n* has a \u201cdays before expiration\u201d attribute, which sets when this message is sent.<br \/>\n* has a message and a subject line<br \/>\n* has a reply-to<br \/>\n* is a multipart text\/html message<br \/>\n* will template tags to substitute simple parameter like Library name, user name, date, etc.<br \/>\n* belongs to many reservations, but is only invoked when the \u201cdays before expiration\u201d time is hit.<\/p>\n<p>Reservation<\/p>\n<p>A reservation:<\/p>\n<p>* belongs to a reservable asset<br \/>\n* belongs to a user<br \/>\n* has a code to uniquely identify it<br \/>\n* has a start date<br \/>\n* has an end date<br \/>\n* has an approved flag, which means the reservation has been approved by an administrator.<\/p>\n<p>Bulletin Board<\/p>\n<p>A bulletin board:<\/p>\n<p>* has many posts ordered by creation time<br \/>\n* belongs to a discussable asset &#8211; currently only a reservable asset, but could include a library.<br \/>\n* has many users through the reservable assets list of current users<br \/>\n* has a maximum \u201cpost lifetime\u201d<\/p>\n<p>Post<\/p>\n<p>A post:<\/p>\n<p>* belongs to a bulletin board<br \/>\n* belongs to a user<br \/>\n* has a creation time<br \/>\n* has a message<br \/>\n* has an (optional) image file attachment<br \/>\n* has many (optional) moderator flags<br \/>\n* has a \u201cpublic\u201d flag, allowing a post to be seen more broadly.<\/p>\n<p>Moderator Flag<\/p>\n<p>A moderator flag:<\/p>\n<p>* belongs to a post<br \/>\n* has a reason &#8211; Abusive, Offensive, etc?<br \/>\n* belongs to user<\/p>\n<p>Authentication source<\/p>\n<p>An authentication source:<\/p>\n<p>* has many users<br \/>\n* has many user types<br \/>\n* has an \u201cauthenticate\u201d method that accepts user information and does a backend lookup returning a true or false if a user has authenticated properly to that user type.<\/p>\n<p>User Type<\/p>\n<p>A user type:<\/p>\n<p>* has many users<br \/>\n* has a name &#8211; \u201cgrad students\u201d, \u201cundergrads\u201d, etc.<br \/>\n* has many authentication sources<\/p>\n<p>User<\/p>\n<p>A user:<\/p>\n<p>* has many reservations<br \/>\n* has many reservable assets through reservations<br \/>\n* has many posts<br \/>\n* belongs to a User Type<br \/>\n* has an authentication source through its user type<\/p>\n<p>Administrator<\/p>\n<p>An administrator:<\/p>\n<p>* Has a username and password.<br \/>\n* has an email address<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Carrel Object List This was originally a google document developed collaboratively by project principals. This is still a work in progress and will evolve over time. Library A library: * has many floors * has an address, including latitude \/ longitude, URL and basic contact info * has many reservable asset types * has a [&hellip;]<\/p>\n","protected":false},"author":4453,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/users\/4453"}],"replies":[{"embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":3,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":19,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/posts\/5\/revisions\/19"}],"wp:attachment":[{"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/archive.blogs.harvard.edu\/cmcgrath\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}