|
|
import logging
|
|
|
import datetime
|
|
|
|
|
|
from sqlalchemy import *
|
|
|
from sqlalchemy.exc import DatabaseError
|
|
|
from sqlalchemy.orm import relation, backref, class_mapper, joinedload
|
|
|
from sqlalchemy.orm.session import Session
|
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
|
|
|
|
from rhodecode.lib.dbmigrate.migrate import *
|
|
|
from rhodecode.lib.dbmigrate.migrate.changeset import *
|
|
|
from rhodecode.lib.utils2 import str2bool
|
|
|
|
|
|
from rhodecode.model.meta import Base
|
|
|
from rhodecode.model import meta
|
|
|
from rhodecode.lib.dbmigrate.versions import _reset_base, notify
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
def get_by_name(cls, key):
|
|
|
return cls.query().filter(cls.app_settings_name == key).scalar()
|
|
|
|
|
|
|
|
|
def get_by_name_or_create(cls, key, val='', type='unicode'):
|
|
|
res = get_by_name(cls, key)
|
|
|
if not res:
|
|
|
res = cls(key, val, type)
|
|
|
return res
|
|
|
|
|
|
|
|
|
def upgrade(migrate_engine):
|
|
|
"""
|
|
|
Upgrade operations go here.
|
|
|
Don't create your own engine; bind migrate_engine to your metadata
|
|
|
"""
|
|
|
_reset_base(migrate_engine)
|
|
|
from rhodecode.lib.dbmigrate.schema import db_2_3_0_0
|
|
|
|
|
|
# issue fixups
|
|
|
fixups(db_2_3_0_0, meta.Session)
|
|
|
|
|
|
|
|
|
def downgrade(migrate_engine):
|
|
|
meta = MetaData()
|
|
|
meta.bind = migrate_engine
|
|
|
|
|
|
|
|
|
def fixups(models, _SESSION):
|
|
|
notify('Fixing existing GA code into new format')
|
|
|
cur_code = get_by_name(models.RhodeCodeSetting, 'ga_code')
|
|
|
val = '''
|
|
|
<script>
|
|
|
// google analytics
|
|
|
var _gaq_code = '_GACODE_';
|
|
|
var _gaq = _gaq || [];
|
|
|
_gaq.push(['_setAccount', _gaq_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);
|
|
|
})();
|
|
|
|
|
|
rhodecode_statechange_callback = function(url, data){
|
|
|
// ANALYTICS callback on html5 history state changed
|
|
|
// triggered by file browser, url is the new url,
|
|
|
// data is extra info passed from the State object
|
|
|
if ( typeof window._gaq !== 'undefined' ) {
|
|
|
_gaq.push(['_trackPageview', url]);
|
|
|
}
|
|
|
}
|
|
|
</script>'''
|
|
|
if cur_code and getattr(cur_code, 'app_settings_value', ''):
|
|
|
cur_val = getattr(cur_code, 'app_settings_value', '')
|
|
|
val = val.replace('_GACODE_', cur_val)
|
|
|
notify('Found GA code %s, migrating' % cur_val)
|
|
|
new = get_by_name_or_create(models.RhodeCodeSetting, 'pre_code', val)
|
|
|
new.app_settings_value = val
|
|
|
_SESSION().add(new)
|
|
|
_SESSION().commit()
|
|
|
|