import random
from django.utils import simplejson
from conifer.middleware import genshi_locals
+from django.conf import settings
+
+try:
+ import markdown
+ def do_markdown(txt):
+ return markdown.markdown(txt)
+except ImportError:
+ def do_markdown(txt):
+ return _('(Markdown not installed).')
+
+
+# SCHEMAS: True if our database is being stored in a
+# multi-schema Postgres database.
+
+SCHEMAS = (settings.DATABASE_ENGINE == 'conifer.evergreen.backends.postgresql_with_schemas')
+
def highlight(text, phrase,
highlighter='<strong class="highlight">\\1</strong>'):
class UserProfile(m.Model):
+
+ class Meta:
+ db_table = 'reserves.user_profile' if SCHEMAS else 'reserves_user_profile'
+
user = m.ForeignKey(User, unique=True)
home_phone = m.CharField(max_length=100, blank=True)
home_address = m.TextField(blank=True)
wants_email_notices = m.BooleanField(default=False)
last_email_notice = m.DateTimeField(default=datetime.now,
blank=True, null=True)
-
+
def __unicode__(self):
return 'UserProfile(%s)' % self.user
if user:
return user
-#----------------------------------------------------------------------
-# LIBRARIES, SERVICE DESKS
-
-class LibraryUnit(m.Model):
- name = m.CharField(max_length=100)
- nickname = m.CharField(max_length=15,blank=True,default='')
- url = m.URLField()
- contact_email = m.EmailField()
-
- def __unicode__(self):
- return self.name
-
-class ServiceDesk(m.Model):
- library = m.ForeignKey(LibraryUnit)
- abbreviation = m.CharField(max_length=8,db_index=True)
- name = m.CharField(max_length=100)
- active = m.BooleanField(default=True)
-
- def __unicode__(self):
- return self.name
#----------------------------------------------------------------------
# TERMS, COURSES, MEMBERSHIP
class Term(m.Model):
+
+ class Meta:
+ db_table = 'reserves.term' if SCHEMAS else 'reserves_term'
+
code = m.CharField(max_length=16, blank=True, null=True, unique=True)
name = m.CharField(max_length=255)
start = m.DateField('Start (Y-M-D)')
return self.code or self.name
class Department(m.Model):
+
+ class Meta:
+ db_table = 'reserves.department' if SCHEMAS else 'reserves_department'
+
abbreviation = m.CharField(max_length=8,db_index=True)
name = m.CharField(max_length=255)
active = m.BooleanField(default=True)
class Course(m.Model):
"""An offering of a course."""
+
+ class Meta:
+ db_table = 'reserves.course' if SCHEMAS else 'reserves_course'
+
# some courses may be ad-hoc and have no code.
code = m.CharField(max_length=64, blank=True, null=True)
department = m.ForeignKey(Department)
return course_sections.sections_tuple_delimiter.join(section).encode('base64').strip()
class Member(m.Model):
+
class Meta:
unique_together = (('course', 'user'))
+ db_table = 'reserves.member' if SCHEMAS else 'reserves_member'
course = m.ForeignKey(Course)
user = m.ForeignKey(User)
A reserve item, physical or electronic, as it appears in a given
course instance.
"""
+
+ class Meta:
+ db_table = 'reserves.item' if SCHEMAS else 'reserves_item'
# Structure
metadata_attribute_choices = metadata_attributes.items()
metadata_attribute_choices.sort(key=lambda (a,b): b)
+
class Metadata(m.Model):
"""Metadata for items."""
+ class Meta:
+ db_table = 'reserves.metadata' if SCHEMAS else 'reserves_metadata'
+
item = m.ForeignKey(Item)
#fixme, arbitrary sizes.
name = m.CharField('Attribute', max_length=128, choices=metadata_attribute_choices)
#------------------------------------------------------------
# News items
-try:
- import markdown
- def do_markdown(txt):
- return markdown.markdown(txt)
-except ImportError:
- def do_markdown(txt):
- return _('(Markdown not installed).')
-
class NewsItem(m.Model):
+
+ class Meta:
+ db_table = 'reserves.news_item' if SCHEMAS else 'reserves_news_item'
+
subject = m.CharField(max_length=200)
body = m.TextField()
published = m.DateTimeField(default=datetime.now, blank=True, null=True)
# Z39.50 Support
class Target(m.Model):
+
+ class Meta:
+ db_table = 'reserves.target' if SCHEMAS else 'reserves_target'
+
name = m.CharField(max_length=100)
host = m.CharField(max_length=50)
db = m.CharField(max_length=50)
class CheckInOut(m.Model):
"""A log of checkout-to-patron and item-return events."""
+ class Meta:
+ db_table = 'reserves.check_inout' if SCHEMAS else 'reserves_check_inout'
+
is_checkout = m.BooleanField() # in or out?
is_successful = m.BooleanField() # did the transaction work?
staff = m.ForeignKey(User) # who processed the request?
class PhysicalObject(m.Model):
"""A record of a physical object entering and leaving the Reserves area."""
+
+ class Meta:
+ db_table = 'reserves.physical_object' if SCHEMAS else 'reserves_physical_object'
+
barcode = m.CharField(max_length=100) # item barcode
receiver = m.ForeignKey(User, related_name='receiver') # who received the item?
received = m.DateTimeField(auto_now_add=True)