""" startup info for the app client needs info that is static across all users and user specific info like roles and defaults so calling will be: index.cgi?cmd=webnotes.startup.common_info index.cgi?cmd=webnotes.startup.user_info&user=x@y.com to clear startup, you must clear all files in the vcs starting with index.cgi?cmd=webnotes.startup """ import webnotes def get_letter_heads(): """ get letter head """ import webnotes try: lh = {} ret = webnotes.conn.sql("select name, content from `tabLetter Head` where ifnull(disabled,0)=0") for r in ret: lh[r[0]] = r[1] return lh except Exception, e: if e.args[0]==1146: return {} else: raise Exception, e def get_content_user(): """ get user specific content """ import webnotes import webnotes.utils import webnotes.widgets.page import webnotes.widgets.menus user = webnotes.form_dict['user'] doclist, ret = [], {} webnotes.conn.begin() ret['profile'] = webnotes.user.load_profile() home_page = webnotes.user.get_home_page() if home_page: doclist += webnotes.widgets.page.get(home_page) ret['sysdefaults'] = webnotes.utils.get_defaults() ret['home_page'] = home_page or '' # role-wise menus ret['start_items'] = webnotes.widgets.menus.get_menu_items() # bundle webnotes.session['data']['profile'] = ret['profile'] if webnotes.session['data'].get('ipinfo'): ret['ipinfo'] = webnotes.session['data']['ipinfo'] webnotes.conn.commit() webnotes.response['docs'] = doclist return ret def get_content_common(): """ build common startup info """ import webnotes import webnotes.model.doc import webnotes.model.doctype import webnotes.model doclist, ret = [], {} doclist += webnotes.model.doc.get('Control Panel') doclist += webnotes.model.doctype.get('Event') doclist += webnotes.model.doctype.get('Search Criteria') cp = doclist[0] ret['account_name'] = cp.account_id or '' ret['letter_heads'] = get_letter_heads() ret['dt_labels'] = webnotes.model.get_dt_labels() webnotes.response['docs'] = doclist return ret def common_info(): """ get common startup info (from version or live) """ get_info('index.cgi?cmd=webnotes.startup.common_info', 'common') def user_info(): """ get user info """ user = webnotes.form_dict['user'] get_info('index.cgi?cmd=webnotes.startup.user_info&user='+user, 'user') def get_info(fname, key): """ get info from version or re-build """ from build.version import VersionControl vc = VersionControl() # from versions (same static) if vc.exists(fname): content = vc.get_file(fname)['content'] else: content = globals().get('get_content_'+key)() import json content = json.dumps(content) # add in vcs vc.add(fname=fname, content=content) vc.commit() vc.close() webnotes.response['content'] = content return def clear_info(info_type=None): """ clear startup info and force a new version parameter: info_type = 'user' or 'common' or 'all' """ if not info_type: info_type = webnotes.form_dict.get('info_type') from build.version import VersionControl vc = VersionControl() flist = [] if info_type=='common': flist = ['index.cgi?cmd=webnotes.startup.common_info'] elif info_type=='user': flist = [f[0] for f in vc.repo.sql("""select fname from files where fname like ?""",\ ('index.cgi?cmd=webnotes.startup.user_info%',))] elif info_type=='all': flist = [f[0] for f in vc.repo.sql("""select fname from files where fname like ?""",\ ('index.cgi?cmd=webnotes.startup%',))] else: webnotes.msgprint("info_type not found: %s" % info_type) for f in flist: print 'clearing %s' % f vc.remove(f) vc.commit() vc.close()