]> git.openstreetmap.org Git - osqa.git/commitdiff
display the XML messages set to the site administrators
authorjordan <jordan@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Sat, 23 Apr 2011 22:47:46 +0000 (22:47 +0000)
committerjordan <jordan@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Sat, 23 Apr 2011 22:47:46 +0000 (22:47 +0000)
git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@1000 0cfe37f9-358a-4d5e-be75-b63607b5c754

forum/settings/__init__.py
forum_modules/updater/settings.py
forum_modules/updater/startup.py
forum_modules/updater/views.py

index d8d5aa01ebd4c78348f8fa0953a7ebbaef759aa0..4596605abd4b11f818bf7bc8085e4b1e8a0a57b1 100644 (file)
@@ -7,8 +7,13 @@ from django.conf import settings as djsettings
 from django.utils.version import get_svn_revision
 
 OSQA_VERSION = "Development Build"
+
 SVN_REVISION = get_svn_revision(djsettings.SITE_SRC_ROOT)
 
+# We'll have to keep in mind this variable on every release.
+if SVN_REVISION == u'SVN-unknown':
+    SVN_REVISION = u'SVN-1000'
+
 MAINTAINANCE_MODE = Setting('MAINTAINANCE_MODE', None)
 
 SETTINGS_PACK = Setting('SETTINGS_PACK', "default")
index 3faa290e02fd5180eb942b14870bc8a95ab107be..7c3a8c338e4ad3b5e6c962af65e483d16bbcc90a 100644 (file)
@@ -1,3 +1,5 @@
+import datetime
+
 from forum.settings.base import Setting, SettingSet
 from django.utils.translation import ugettext_lazy as _
 
@@ -14,5 +16,9 @@ required=False))
 
 SITE_KEY = Setting('SITE_KEY', generate_installation_key())
 
+UPDATE_MESSAGES_XML = Setting('UPDATE_MESSAGES_XML', '')
+
+LATEST_UPDATE_DATETIME = Setting('LATEST_UPDATES_DATETIME', datetime.datetime.now())
+
 # Update server. Do not edit.
-UPDATE_SERVER_URL = 'http://192.168.0.102:8008'
\ No newline at end of file
+UPDATE_SERVER_URL = 'http://192.168.0.102:8008'
index 4164248eca04cb3b669c12d961fd691d882990ab..dec53e25feb7f8db762be2ea206c364e8bf0983d 100644 (file)
@@ -1 +1,49 @@
+import datetime
 import views
+import logging
+import settings
+
+from xml.dom.minidom import parse, parseString
+
+from forum.modules import ui, decorate
+from forum.settings import SVN_REVISION
+from django.contrib.auth.middleware import AuthenticationMiddleware
+from django.core.exceptions import ObjectDoesNotExist
+from django.utils.encoding import smart_str
+
+# Trigger the update process
+now = datetime.datetime.now()
+if (now - settings.LATEST_UPDATE_DATETIME) > datetime.timedelta(days=1):
+    pass
+
+# Update the user messages
+@decorate.result(AuthenticationMiddleware.process_request, needs_params=True)
+def process_request(result, self, request):
+    messages_dom = parseString(smart_str(settings.UPDATE_MESSAGES_XML.value))
+    messages = messages_dom.getElementsByTagName('message')
+
+    for message in messages:
+        # Get the SVN Revision
+        try:
+            svn_revision = int(SVN_REVISION.replace('SVN-', ''))
+        except ValueError:
+            # Here we'll have to find another way of getting the SVN revision
+            svn_revision = 0
+
+        message_body = message.getElementsByTagName('body')[0].firstChild.nodeValue
+        message_revision = int(message.getElementsByTagName('revision')[0].firstChild.nodeValue)
+
+        # Add the message to the user messages set only if the Message Revision number is greater than the
+        # current installation SVN Revision number and only if the current user is a super user.
+        if message_revision >= svn_revision and request.user.is_superuser:
+            # We do not want to repeat ourselves. If the message already exists in the message list, we're not going to
+            # add it. That's why first of all we're going the check if it is there.
+            try:
+                # If the message doesn't exist in the RelatedManager ObjectsDoesNotExist is going to be raised.
+                request.user.message_set.all().get(message=message_body)
+            except ObjectDoesNotExist:
+                # Let's create the message.
+                request.user.message_set.create(message=message_body)
+            except:
+                pass
+    return result
index 083819f7b30ae3535709f9e0711fce82984fa972..cc469148d3c2b55f2a3ce7887f73aebe61a5e0f6 100644 (file)
@@ -13,7 +13,7 @@ from django.utils import simplejson
 from django.conf import settings
 
 from base import get_site_views, get_server_name, get_admin_emails
-from settings import SITE_KEY, UPDATE_SERVER_URL
+import settings as updater_settings
 from forum.settings import APP_URL, SVN_REVISION
 from forum.views.admin import admin_tools_page, admin_page
 
@@ -52,7 +52,7 @@ def updater_check(request):
     <os value="%(os)s" />
     %(emails)s
 </check> """ % {
-        'site_key' : SITE_KEY,
+        'site_key' : updater_settings.SITE_KEY,
         'app_url' : APP_URL,
         'svn_revision' : svn_revision,
         'site_views' : get_site_views(),
@@ -78,18 +78,21 @@ def updater_check(request):
     headers={ 'User-Agent' : user_agent,}
 
     try:
-        check_request = urllib2.Request('%s%s' % (UPDATE_SERVER_URL, '/site_check/'), data, headers=headers)
+        check_request = urllib2.Request('%s%s' % (updater_settings.UPDATE_SERVER_URL, '/site_check/'), data, headers=headers)
         check_response = urllib2.urlopen(check_request)
         content = check_response.read()
     except urllib2.HTTPError, error:
         content = error.read()
 
     # Read the messages from the Update Server
-    messages_xml_url = '%s%s' % (UPDATE_SERVER_URL, '/messages/xml/')
+    messages_xml_url = '%s%s' % (updater_settings.UPDATE_SERVER_URL, '/messages/xml/')
     messages_request = urllib2.Request(messages_xml_url, headers=headers)
     messages_response = urllib2.urlopen(messages_request)
     messages_xml = messages_response.read()
 
+    # Store the messages XML in a Setting object
+    updater_settings.UPDATE_MESSAGES_XML.set_value(messages_xml)
+
     messages_dom = parseString(messages_xml)
     messages_count = len(messages_dom.getElementsByTagName('message'))