diff options
Diffstat (limited to 'mediawiki/models.py')
-rw-r--r-- | mediawiki/models.py | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/mediawiki/models.py b/mediawiki/models.py new file mode 100644 index 00000000..e37aec32 --- /dev/null +++ b/mediawiki/models.py @@ -0,0 +1,312 @@ +# This is an auto-generated Django model module. +# You'll have to do the following manually to clean this up: +# * Rearrange models' order +# * Make sure each model has one field with primary_key=True +# Feel free to rename the models, but don't rename db_table values or field names. +# +# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' +# into your database. + +table_prefix = u'nmrwiki' +from django.db import models +import re +from django.conf import settings +import logging +from django.contrib.auth.models import User as DjangoUser +from django.utils.translation import ugettext as _ +import hashlib +import time +import random + +MW_TS = '%Y%m%d%H%M%S' + +TITLE_CHOICES = ( + ('none',_('----')), + ('prof',_('Prof.')), + ('dr',_('Dr.')), +) + +class User(models.Model): + user_id = models.IntegerField(primary_key=True,db_column='user_id') + user_name = models.CharField(max_length=765) + user_real_name = models.CharField(max_length=765) + user_password = models.TextField() + user_newpassword = models.TextField() + user_newpass_time = models.CharField(max_length=14, blank=True) + user_email = models.TextField() + user_options = models.TextField() + user_touched = models.CharField(max_length=14) + user_token = models.CharField(max_length=32) + user_email_authenticated = models.CharField(max_length=14, blank=True) + user_email_token = models.CharField(max_length=32, blank=True) + user_email_token_expires = models.CharField(max_length=14, blank=True) + user_registration = models.CharField(max_length=14, blank=True) + user_editcount = models.IntegerField(null=True, blank=True) + user_last_name = models.CharField(max_length=765, blank=True) + user_first_name = models.CharField(max_length=765, blank=True) + user_reason_to_join = models.CharField(max_length=765, blank=True) + user_title = models.CharField(max_length=16, blank=True, choices=TITLE_CHOICES) + class Meta: + db_table = table_prefix + u'user' + managed = False + + def set_default_options(self): + default_options = { + 'quickbar':1, + 'underline':2, + 'cols':80, + 'rows':25, + 'searchlimit':20, + 'contextlines':5, + 'contextchars':50, + 'skin':'false', + 'math':1, + 'rcdays':7, + 'rclimit':50, + 'wllimit':250, + 'highlightbroken':1, + 'stubthreshold':0, + 'previewontop':1, + 'editsection':1, + 'editsectiononrightclick':0, + 'showtoc':1, + 'showtoolbar':1, + 'date':'default', + 'imagesize':2, + 'thumbsize':2, + 'rememberpassword':0, + 'enotifwatchlistpages':0, + 'enotifusertalkpages':1, + 'enotifminoredits':0, + 'enotifrevealaddr':0, + 'shownumberswatching':1, + 'fancysig':0, + 'externaleditor':0, + 'externaldiff':0, + 'showjumplinks':1, + 'numberheadings':0, + 'uselivepreview':0, + 'watchlistdays':3.0, + 'usenewrc':1, + } + self.user_options = '\n'.join( + map(lambda opt: '%s=%s' % (opt[0], str(opt[1])), + default_options.items()) + ) + + def set_password_and_token(self,password): + p = hashlib.md5(password).hexdigest() + if hasattr(settings,'MEDIAWIKI_SALT_PASSWORD') and settings.MEDIAWIKI_SALT_PASSWORD == True: + p = hashlib.md5('%d-%s' % (self.user_id, p)).hexdigest() + self.user_password = p + self.user_token = hashlib.md5(p + str(time.time())).hexdigest() + + def get_name(self): + if self.user_real_name: + if re.search(r'\S',self.user_real_name): + return self.user_real_name + return self.user_name + ' (nickname)' + + def get_html(self): + return '<a href="%s">%s</a>' % (self.get_absolute_url(),self.get_name()) + + def get_absolute_url(self): + url = settings.MEDIAWIKI_URL + '?title=User:' + self.user_name + return url + +class UserProfile(models.Model): + nup_user_id = models.ForeignKey(User,primary_key=True,db_column='nup_user_id') + nup_about = models.CharField(max_length=765, blank=True) + nup_position_title = models.CharField(max_length=765, blank=True) + nup_position_type = models.CharField(max_length=765, blank=True) + nup_employer_division = models.CharField(max_length=765, blank=True) + nup_employer_company = models.CharField(max_length=765, blank=True) + nup_employer_type = models.CharField(max_length=765, blank=True) + nup_employment_status = models.CharField(max_length=45, blank=True) + nup_profession = models.CharField(max_length=765, blank=True) + nup_city = models.CharField(max_length=765, blank=True) + nup_state = models.CharField(max_length=765, blank=True) + nup_country = models.CharField(max_length=765, blank=True) + nup_lattitude = models.FloatField(null=True, blank=True) + nup_longitude = models.FloatField(null=True, blank=True) + nup_hiring = models.IntegerField(null=True, blank=True) + nup_hunting = models.IntegerField(null=True, blank=True) + nup_education = models.TextField(blank=True) + nup_websites = models.TextField(blank=True) + nup_interests = models.TextField(blank=True) + nup_job_ad = models.TextField(blank=True) + nup_job_ad_title = models.CharField(max_length=765, blank=True) + nup_job_ad_active = models.IntegerField(null=True, blank=True) + nup_expertise = models.TextField(blank=True) + nup_is_approved = models.BooleanField() + class Meta: + db_table = table_prefix + u'new_user_profile' + managed = False + +class RecentChanges(models.Model): + rc_id = models.AutoField(primary_key=True, db_column='rc_id') + rc_timestamp = models.CharField(max_length=14) + rc_cur_time = models.CharField(max_length=14) + rc_user = models.ForeignKey(User, db_column='rc_user') + rc_user_text = models.CharField(max_length=765) + rc_namespace = models.IntegerField() + rc_title = models.CharField(max_length=765) + rc_comment = models.CharField(max_length=765) + rc_minor = models.IntegerField() + rc_bot = models.IntegerField() + rc_new = models.IntegerField() + rc_cur_id = models.IntegerField() + rc_this_oldid = models.IntegerField() + rc_last_oldid = models.IntegerField() + rc_type = models.IntegerField() + rc_moved_to_ns = models.IntegerField() + rc_moved_to_title = models.CharField(max_length=765) + rc_patrolled = models.IntegerField() + rc_ip = models.CharField(max_length=40) + rc_old_len = models.IntegerField(null=True, blank=True) + rc_new_len = models.IntegerField(null=True, blank=True) + rc_deleted = models.IntegerField() + rc_logid = models.ForeignKey('Logging', db_column='rc_logid') + rc_log_type = models.CharField(max_length=255, blank=True) + rc_log_action = models.CharField(max_length=255, blank=True) + rc_params = models.TextField(blank=True) + class Meta: + db_table = table_prefix + u'recentchanges' + managed = False + +class Logging(models.Model): + log_id = models.AutoField(primary_key=True) + log_type = models.CharField(max_length=10) + log_action = models.CharField(max_length=10) + log_timestamp = models.CharField(max_length=14) + log_user = models.ForeignKey(User,db_column='log_user') + log_namespace = models.IntegerField() + log_title = models.CharField(max_length=765) + log_comment = models.CharField(max_length=765) + log_params = models.TextField() + log_deleted = models.IntegerField() + class Meta: + db_table = table_prefix + u'logging' + managed = False + + def show_in_recent_changes(self, ip=None, rc_minor=False): + #to call this method self object must already exist in DB + if self.log_type == 'newusers' and self.log_action=='create': + rc = RecentChanges( + rc_ip=ip, + rc_minor=int(rc_minor), + rc_deleted=0, + rc_bot=0, + rc_new=0, + rc_moved_to_title='', + rc_moved_to_ns=0, + rc_this_oldid=0, + rc_last_oldid=0, + rc_patrolled=1, + rc_old_len=None, + rc_new_len=None, + rc_logid=self, + rc_user=self.log_user, + rc_user_text=self.log_user.user_name, + rc_log_type=self.log_type, + rc_log_action=self.log_action, + rc_timestamp = self.log_timestamp, + rc_cur_time = self.log_timestamp, + rc_title='Log/newusers', + rc_namespace=-1, #-1 special, 2 is User namespace + rc_params=self.log_params, + rc_comment=_('Welcome new user!'), + rc_type=3,#MW RCLOG constant from Defines.php + rc_cur_id=0, + ) + rc.save() + else: + raise NotImplementedError() + + +class Page(models.Model): + page_id = models.AutoField(primary_key=True) + page_namespace = models.IntegerField(unique=True) + page_title = models.CharField(max_length=765) + page_restrictions = models.TextField() + page_counter = models.IntegerField() + page_is_redirect = models.IntegerField() + page_is_new = models.IntegerField() + page_random = models.FloatField() + page_touched = models.CharField(max_length=14) + page_latest = models.IntegerField() + page_len = models.IntegerField() + class Meta: + db_table = table_prefix + u'page' + managed = False + def save(self): + raise Exception('WikiUser table is read-only in this application') + +class PageLinks(models.Model): + pl_from = models.ForeignKey(Page) + pl_namespace = models.IntegerField() + pl_title = models.CharField(max_length=765) + class Meta: + db_table = table_prefix + u'pagelinks' + managed = False + def save(self): + raise Exception('WikiUser table is read-only in this application') + +class Revision(models.Model): + rev_id = models.IntegerField(unique=True) + rev_page = models.IntegerField() + rev_text_id = models.IntegerField() + rev_comment = models.TextField() + rev_user = models.IntegerField() + rev_user_text = models.CharField(max_length=765) + rev_timestamp = models.CharField(max_length=14) + rev_minor_edit = models.IntegerField() + rev_deleted = models.IntegerField() + rev_len = models.IntegerField(null=True, blank=True) + rev_parent_id = models.IntegerField(null=True, blank=True) + class Meta: + db_table = table_prefix + u'revision' + managed = False + +class Text(models.Model): + old_id = models.IntegerField(primary_key=True) + old_text = models.TextField() + old_flags = models.TextField() + class Meta: + db_table = table_prefix + u'text' + managed = False + +#nmrwiki_stats table may be of interest + +class UserGroups(models.Model): + ug_user = models.ForeignKey(User,primary_key=True) + ug_group = models.CharField(max_length=16) + class Meta: + db_table = table_prefix + u'user_groups' + managed = False + +def user_get_absolute_url(user): + return user.mediawiki_user.get_absolute_url() + +def user_get_html(user): + return user.mediawiki_user.get_html() + +def user_has_valid_email(user): + if user.mediawiki_user.user_email_authenticated: + return True + else: + return False + +def user_get_description_for_admin(user): + out = user.get_html() + ' (%s)' % user.username + if user.has_valid_email(): + out += ' - has valid email' + else: + out += ' - <em>no email!</em>' + return out + +DjangoUser.add_to_class('mediawiki_user',models.ForeignKey(User, null=True)) +DjangoUser.add_to_class('get_wiki_profile_url',user_get_absolute_url) +DjangoUser.add_to_class('get_wiki_profile_url_html',user_get_html) +DjangoUser.add_to_class('get_description_for_admin',user_get_description_for_admin) +DjangoUser.add_to_class('has_valid_wiki_email',user_has_valid_email) |