changeset 890:042d38683d42 beta

implemented #89 google analytics code
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 29 Dec 2010 10:39:46 +0100
parents 79f42866bcbb
children cca7286401b3
files rhodecode/controllers/admin/settings.py rhodecode/lib/base.py rhodecode/lib/db_manage.py rhodecode/model/forms.py rhodecode/model/settings.py rhodecode/templates/admin/settings/settings.html rhodecode/templates/base/base.html
diffstat 7 files changed, 64 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/controllers/admin/settings.py	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/controllers/admin/settings.py	Wed Dec 29 10:39:46 2010 +0100
@@ -25,11 +25,17 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 # MA  02110-1301, USA.
 
+import logging
+import traceback
+import formencode
+
+from operator import itemgetter
 from formencode import htmlfill
 from pylons import request, session, tmpl_context as c, url, app_globals as g, \
     config
 from pylons.controllers.util import abort, redirect
 from pylons.i18n.translation import _
+
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
     HasPermissionAnyDecorator, NotAnonymous
@@ -43,10 +49,9 @@
 from rhodecode.model.scm import ScmModel
 from rhodecode.model.settings import SettingsModel
 from rhodecode.model.user import UserModel
+
 from sqlalchemy import func
-import formencode
-import logging
-import traceback
+
 
 log = logging.getLogger(__name__)
 
@@ -123,6 +128,7 @@
             try:
                 form_result = application_form.to_python(dict(request.POST))
                 settings_model = SettingsModel()
+
                 try:
                     hgsettings1 = settings_model.get('title')
                     hgsettings1.app_settings_value = form_result['rhodecode_title']
@@ -130,9 +136,14 @@
                     hgsettings2 = settings_model.get('realm')
                     hgsettings2.app_settings_value = form_result['rhodecode_realm']
 
+                    hgsettings3 = settings_model.get('ga_code')
+                    hgsettings3.app_settings_value = form_result['ga_code']
+
+
 
                     self.sa.add(hgsettings1)
                     self.sa.add(hgsettings2)
+                    self.sa.add(hgsettings3)
                     self.sa.commit()
                     set_rhodecode_config(config)
                     h.flash(_('Updated application settings'),
--- a/rhodecode/lib/base.py	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/lib/base.py	Wed Dec 29 10:39:46 2010 +0100
@@ -16,11 +16,12 @@
 
     def __before__(self):
         c.rhodecode_version = __version__
-        c.rhodecode_name = config['rhodecode_title']
+        c.rhodecode_name = config.get('rhodecode_title')
+        c.ga_code = config.get('rhodeocode_ga_code')
         c.repo_name = get_repo_slug(request)
         c.cached_repo_list = ScmModel().get_repos()
         c.backends = BACKENDS.keys()
-        self.cut_off_limit = int(config['cut_off_limit'])
+        self.cut_off_limit = int(config.get('cut_off_limit'))
         self.sa = meta.Session()
         scm_model = ScmModel(self.sa)
         #c.unread_journal = scm_model.get_unread_journal()
--- a/rhodecode/lib/db_manage.py	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/lib/db_manage.py	Wed Dec 29 10:39:46 2010 +0100
@@ -166,6 +166,9 @@
                 log.info('Changing ui settings')
                 self.klass.create_ui_settings()
 
+            def step_3(self):
+                print ('Adding additional settings into RhodeCode db')
+                self.klass.fix_settings()
 
         upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
 
@@ -212,7 +215,17 @@
             self.sa.rollback()
             raise
 
+    def fix_settings(self):
+        """Fixes rhodecode settings adds ga_code key for google analytics
+        """
 
+        hgsettings3 = RhodeCodeSettings('ga_code', '')
+        try:
+            self.sa.add(hgsettings3)
+            self.sa.commit()
+        except:
+            self.sa.rollback()
+            raise
 
     def admin_prompt(self, second=False):
         if not self.tests:
@@ -360,6 +373,7 @@
 
         hgsettings1 = RhodeCodeSettings('realm', 'RhodeCode authentication')
         hgsettings2 = RhodeCodeSettings('title', 'RhodeCode')
+        hgsettings3 = RhodeCodeSettings('ga_code', '')
 
 
         try:
@@ -370,6 +384,7 @@
             self.sa.add(paths)
             self.sa.add(hgsettings1)
             self.sa.add(hgsettings2)
+            self.sa.add(hgsettings3)
 
             self.sa.commit()
         except:
--- a/rhodecode/model/forms.py	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/model/forms.py	Wed Dec 29 10:39:46 2010 +0100
@@ -438,6 +438,7 @@
         filter_extra_fields = False
         rhodecode_title = UnicodeString(strip=True, min=1, not_empty=True)
         rhodecode_realm = UnicodeString(strip=True, min=1, not_empty=True)
+        ga_code = UnicodeString(strip=True, min=1, not_empty=False)
 
     return _ApplicationSettingsForm
 
--- a/rhodecode/model/settings.py	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/model/settings.py	Wed Dec 29 10:39:46 2010 +0100
@@ -46,6 +46,11 @@
         return r
 
     def get_app_settings(self):
+        """Get's config from database, each config key is prefixed with 
+        'rhodecode_' prefix, than global pylons config is updated with such 
+        keys
+        """
+
         ret = self.sa.query(RhodeCodeSettings)\
             .options(FromCache("sql_cache_short",
                            "get_hg_settings")).all()
--- a/rhodecode/templates/admin/settings/settings.html	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/templates/admin/settings/settings.html	Wed Dec 29 10:39:46 2010 +0100
@@ -97,7 +97,16 @@
                     ${h.text('rhodecode_realm',size=30)}
                 </div>
             </div>
-                                     
+            
+            <div class="field">
+                <div class="label">
+                    <label for="ga_code">${_('Google analytics code')}:</label>
+                </div>
+                <div class="input">
+                    ${h.text('ga_code',size=30)}
+                </div>
+            </div>
+                                                 
             <div class="buttons">
                 ${h.submit('save','Save settings',class_="ui-button")}
                 ${h.reset('reset','Reset',class_="ui-button")}
--- a/rhodecode/templates/base/base.html	Wed Dec 29 01:51:29 2010 +0100
+++ b/rhodecode/templates/base/base.html	Wed Dec 29 10:39:46 2010 +0100
@@ -10,6 +10,22 @@
     ${self.css()}
     <!-- scripts -->
     ${self.js()}
+%if c.ga_code:
+<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', '${c.ga_code}']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+
+
+</script>
+%endif
 </head>
 <body>
     <!-- header -->