def add_tt_table(env, db): """Migrate from template files to db.""" cursor = db.cursor() # detect existing templates files allTmpls = _findAllTmpls(env) allTmpls.sort(_cmp) # import into db for tt_name in allTmpls: tt_text = _loadTemplateText(env, tt_name) modi_time = _getMTime(tt_name) from tickettemplate.model import TT_Template TT_Template.insert(env, tt_name, tt_text, modi_time) # base64 # detect existing templates files allTmpls = _findAllTmplsBase64(env) allTmpls.sort(_cmpBase64) # import into db for tt_name in allTmpls: tt_text = _loadTemplateTextBase64(env, tt_name) modi_time = _getMTimeBase64(tt_name) from tickettemplate.model import TT_Template tt_name = base64.decodestring(tt_name).decode("utf-8") TT_Template.insert(env, tt_name, tt_text, modi_time)
def add_ticket_template_store(env, db): """Add table ticket_template_store.""" from tickettemplate.model import schema, schema_version, TT_Template from trac.db import DatabaseManager connector, _ = DatabaseManager(env)._get_connector() cursor = db.cursor() table = schema[0] for stmt in connector.to_sql(table): try: cursor.execute(stmt) except: pass from default_templates import DEFAULT_TEMPLATES from ttadmin import SYSTEM_USER now = int(time.time()) for tt_name, tt_value in DEFAULT_TEMPLATES: record = (now, SYSTEM_USER, tt_name, "description", tt_value,) TT_Template.insert(env, record) for id, modi_time, tt_name, tt_text in cursor.fetchall(): record = (modi_time, SYSTEM_USER, tt_name, "description", tt_text,) TT_Template.insert(env, record)
def add_tt_table(env, db): """Migrate from template files to db.""" # detect existing templates files allTmpls = _findAllTmpls(env) allTmpls.sort(_cmp) # import into db for tt_name in allTmpls: tt_text = _loadTemplateText(env, tt_name) modi_time = _getMTime(tt_name) from tickettemplate.model import TT_Template TT_Template.insert(env, tt_name, tt_text, modi_time) # base64 # detect existing templates files allTmpls = _findAllTmplsBase64(env) allTmpls.sort(_cmpBase64) # import into db for tt_name in allTmpls: tt_text = _loadTemplateTextBase64(env, tt_name) modi_time = _getMTimeBase64(tt_name) from tickettemplate.model import TT_Template tt_name = base64.decodestring(tt_name).decode('utf-8') TT_Template.insert(env, tt_name, tt_text, modi_time)
def environment_created(self): # Create the required tables db = self.env.get_db_cnx() connector, _ = DatabaseManager(self.env)._get_connector() cursor = db.cursor() for table in schema: for stmt in connector.to_sql(table): cursor.execute(stmt) # Insert a global version flag cursor.execute("INSERT INTO system (name,value) " "VALUES ('tt_version',%s)", (schema_version,)) # Create some default templates now = int(time.time()) from default_templates import DEFAULT_TEMPLATES for tt_name, tt_value in DEFAULT_TEMPLATES: record = [ now, SYSTEM_USER, tt_name, "description", tt_value, ] TT_Template.insert(self.env, record) db.commit()
def environment_created(self): # Create the required tables db = self.env.get_db_cnx() connector, _ = DatabaseManager(self.env)._get_connector() cursor = db.cursor() for table in schema: for stmt in connector.to_sql(table): cursor.execute(stmt) # Insert a global version flag cursor.execute( "INSERT INTO system (name,value) " "VALUES ('tt_version',%s)", (schema_version, )) # Create some default templates now = int(time.time()) from default_templates import DEFAULT_TEMPLATES for tt_name, tt_value in DEFAULT_TEMPLATES: record = [ now, SYSTEM_USER, tt_name, "description", tt_value, ] TT_Template.insert(self.env, record) db.commit()
def ticket_template_export(self): """export current ticket templates as json to stdout""" template_names = TT_Template.fetchNames(self.env) export_data = [] for template_name in template_names: export_datum = ( template_name, TT_Template.fetch(self.env, template_name), ) export_data.append(export_datum) print(json.dumps(export_data, indent=2))
def _loadTemplateText(self, tt_name): """ get tempate text from tt_dict. return tt_text if found in db or default tt_text if exists or empty string if default not exists. """ tt_text = TT_Template.fetch(self.env, tt_name) if not tt_text: tt_text = TT_Template.fetch(self.env, "default") return tt_text
def _loadTemplateText(self, tt_name): """ get template text from tt_dict. return tt_text if found in db or default tt_text if exists or empty string if default not exists. """ tt_text = TT_Template.fetch(self.env, tt_name) if not tt_text: tt_text = TT_Template.fetch(self.env, 'default') return tt_text
def _saveTemplateText(self, tt_name, tt_text): """ save ticket template text to db. """ id = TT_Template.insert( self.env, (int(time.time()), "SYSTEM", tt_name, "description", tt_text)) return id
def _getTTFields(self, tt_user, tt_name): """ Get all fields values return: { "summary": {"field_type":"text", "field_value": "abc"}, "description": {"field_type":"textarea", "field_value": "xyz"}, } """ result = {} # init result field_list = self._getFieldList() for field in field_list: result[field] = "" # update from db data = { "tt_user": tt_user, "tt_name": tt_name, } field_value_mapping = TT_Template.fetchCurrent(self.env, data) for k, v in field_value_mapping.items(): if k in field_list: result[k] = v for field in field_list: field_type = self.config.get("tickettemplate", field + ".type", "text") field_value = field_value_mapping.get(field) field_detail = {"field_type":field_type, "field_value": field_value} result[field] = field_detail return result
def process_admin_request(self, req, cat, page, path_info): req.perm.assert_permission('TT_ADMIN') req.hdf['options'] = self._getTicketTypeNames() req.hdf['type'] = req.args.get('type') if req.args.has_key("id"): # after load history id = req.args.get("id") req.hdf['tt_text'] = self._loadTemplateTextById(id) req.hdf['type'] = self._getNameById(id) elif req.method == 'POST': # Load if req.args.get('loadtickettemplate'): tt_name = req.args.get('type') req.hdf['tt_text'] = self._loadTemplateText(tt_name) # Load history if req.args.get('loadhistory'): tt_name = req.args.get('type') req.hdf['tt_name'] = tt_name tt_history = [] for id,modi_time,tt_name,tt_text in TT_Template.selectByName(self.env, tt_name): history = {} history["id"] = id history["tt_name"] = tt_name history["modi_time"] = self._formatTime(int(modi_time)) history["tt_text"] = tt_text history["href"] = req.abs_href.admin(cat, page, {"id":id}) tt_history.append(history) req.hdf['tt_history'] = tt_history return 'loadhistory.cs', None # Save elif req.args.get('savetickettemplate'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') self._saveTemplateText(tt_name, tt_text) req.hdf['tt_text'] = tt_text # preview elif req.args.get('preview'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') description_preview = self._previewTemplateText(tt_name, tt_text, req) req.hdf['tt_text'] = tt_text req.hdf['description_preview'] = description_preview return 'admin_tickettemplate.cs', None
def _insert_templates(self, templates): """ accept list of tuples called templates and insert into database. example: templates = [('tt_name','tt_value'),] """ now = int(time.time()) for tt_name, tt_value in templates: record = [ now, SYSTEM_USER, tt_name, 'description', tt_value, ] TT_Template.insert(self.env, record) # increment timestamp; other code expects it to be unique now += 1
def _handleCustomDelete(self, req): """ delete custom template """ jsonstr = urllib.unquote(req.read()) custom_data = json.loads(jsonstr) tt_name = custom_data.get('tt_name') if not tt_name: return tt_user = req.authname # delete same custom template if exist delete_data = { 'tt_user': tt_user, 'tt_name': tt_name, } TT_Template.deleteCustom(self.env, delete_data) return tt_name
def _handleCustomDelete(self, req): """ delete custom template """ jsonstr = urllib.unquote(req.read()) custom_data = json.loads(jsonstr) tt_name = custom_data.get("tt_name") if not tt_name: return tt_user = req.authname # delete same custom template if exist delete_data = { "tt_user": tt_user, "tt_name": tt_name, } TT_Template.deleteCustom(self.env, delete_data) return tt_name
def environment_created(self): # Create the required tables db = self.env.get_db_cnx() connector, _ = DatabaseManager(self.env)._get_connector() cursor = db.cursor() for table in schema: for stmt in connector.to_sql(table): cursor.execute(stmt) # Insert a global version flag cursor.execute("INSERT INTO system (name,value) " "VALUES ('tt_version',%s)", (schema_version,)) # Create some default templates for tt_name, tt_text in DEFAULT_TEMPLATES: TT_Template.insert(self.env, tt_name, tt_text, 0) db.commit()
def _handleCustomSave(self, req): """ save custom template """ jsonstr = urllib.unquote(req.read()) custom_data = json.loads(jsonstr) tt_name = custom_data.get("tt_name") custom_template = custom_data.get("custom_template") if not tt_name or not custom_template: return tt_name, custom_template now = int(time.time()) tt_user = req.authname # delete same custom template if exist delete_data = { "tt_user": tt_user, "tt_name": tt_name, } TT_Template.deleteCustom(self.env, delete_data) # save custom template field_list = self._getFieldList() for tt_field in field_list: tt_value = custom_template.get(tt_field) if tt_value is not None: record = [ now, tt_user, tt_name, tt_field, tt_value, ] TT_Template.insert(self.env, record) return tt_name, custom_template
def _handleCustomSave(self, req): """ save custom template """ jsonstr = urllib.unquote(req.read()) custom_data = json.loads(jsonstr) tt_name = custom_data.get('tt_name') custom_template = custom_data.get('custom_template') if not tt_name or not custom_template: return tt_name, custom_template now = int(time.time()) tt_user = req.authname # delete same custom template if exist delete_data = { 'tt_user': tt_user, 'tt_name': tt_name, } TT_Template.deleteCustom(self.env, delete_data) # save custom template field_list = self._getFieldList() for tt_field in field_list: tt_value = custom_template.get(tt_field) if tt_value is not None: record = [ now, tt_user, tt_name, tt_field, tt_value, ] TT_Template.insert(self.env, record) return tt_name, custom_template
def _getTTFields(self, tt_user, tt_name): """ Get all fields values return: { "summary": {"field_type":"text", "field_value": "abc"}, "description": {"field_type":"textarea", "field_value": "xyz"}, } """ result = {} # init result field_list = self._getFieldList() for field in field_list: result[field] = "" # update from db data = { "tt_user": tt_user, "tt_name": tt_name, } field_value_mapping = TT_Template.fetchCurrent(self.env, data) for k, v in field_value_mapping.items(): if k in field_list: result[k] = v for field in field_list: field_type = self.config.get("tickettemplate", field + ".type", "text") field_value = field_value_mapping.get(field) field_detail = { "field_type": field_type, "field_value": field_value } result[field] = field_detail return result
def _saveTemplateText(self, tt_name, tt_text): """ save ticket template text to db. """ id = TT_Template.insert(self.env, (int(time.time()), 'SYSTEM', tt_name, 'description', tt_text)) return id
def process_request(self, req): req.perm.assert_permission('TICKET_CREATE') data = { "gettext": gettext, "_": _, "tag_": tag_, "N_": N_, } if req.path_info.startswith('/tt/query'): # handle XMLHTTPRequest data["req_args"] = req.args data.update({"tt_user": req.authname}) result = TT_Template.fetchAll(self.env, data) result["status"] = "1" result["field_list"] = self._getFieldList() if self.config.getbool("tickettemplate", "enable_custom", True) and \ 'TT_USER' in req.perm: result["enable_custom"] = True else: result["enable_custom"] = False if req.args.has_key("warning"): result["warning"] = "1" jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) # tt_custom save elif req.path_info.startswith('/tt/custom_save'): tt_name, custom_template = self._handleCustomSave(req) result = {} result["status"] = "1" result["tt_name"] = tt_name result["new_template"] = custom_template jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) # tt_custom delete elif req.path_info.startswith('/tt/custom_delete'): tt_name = self._handleCustomDelete(req) result = {} result["status"] = "1" result["tt_name"] = tt_name jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) elif req.path_info.startswith('/tt/edit_buffer_save'): tt_name, custom_template = self._handleCustomSave(req) result = {} result["status"] = "1" result["tt_name"] = tt_name result["new_template"] = custom_template jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) elif req.path_info.startswith('/tt/tt_newticket.js'): filename = resource_filename(__name__, 'templates/tt_newticket.js') chrome = Chrome(self.env) message = chrome.render_template(req, filename, data, 'text/plain') req.send_response(200) req.send_header('Cache-control', 'no-cache') req.send_header('Expires', 'Fri, 01 Jan 1999 00:00:00 GMT') req.send_header('Content-Type', 'text/x-javascript') req.send_header( 'Content-Length', len( isinstance(message, unicode) and message.encode("utf-8") or message)) req.end_headers() if req.method != 'HEAD': req.write(message) raise RequestDone
def render_admin_panel(self, req, cat, page, path_info): req.perm.assert_permission('TT_ADMIN') data = { 'gettext': gettext, '_': _, 'tag_': tag_, 'N_': N_, } data['options'] = self._getTicketTypeNames() data['type'] = req.args.get('type') if 'id' in req.args: # after load history id = req.args.get('id') data['tt_text'] = self._loadTemplateTextById(id) data['type'] = self._getNameById(id) elif req.method == 'POST': # Load if req.args.get('loadtickettemplate'): tt_name = req.args.get('type') data['tt_text'] = self._loadTemplateText(tt_name) # Load history if req.args.get('loadhistory'): tt_name = req.args.get('type') data['tt_name'] = tt_name tt_history = [] for id, modi_time, tt_name, tt_text \ in TT_Template.selectByName(self.env, tt_name): history = { 'id': id, 'tt_name': tt_name, 'modi_time': self._formatTime(int(modi_time)), 'tt_text': tt_text, 'href': req.abs_href.admin(cat, page, {'id': id}) } tt_history.append(history) data['tt_history'] = tt_history return 'loadhistory.html', data # Save elif req.args.get('savetickettemplate'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') self._saveTemplateText(tt_name, tt_text) data['tt_text'] = tt_text # preview elif req.args.get('preview'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') description_preview = \ self._previewTemplateText(tt_name, tt_text, req) data['tt_text'] = tt_text data['description_preview'] = description_preview return 'admin_tickettemplate.html', data
def process_request(self, req): req.perm.assert_permission('TICKET_CREATE') data = { 'gettext': gettext, '_': _, 'tag_': tag_, 'N_': N_, } if req.path_info.startswith('/tt/query'): # handle XMLHTTPRequest data['req_args'] = req.args data.update({'tt_user': req.authname}) result = TT_Template.fetchAll(self.env, data) result['status'] = '1' result['field_list'] = self._getFieldList() if self.enable_custom and 'TT_USER' in req.perm: result['enable_custom'] = True else: result['enable_custom'] = False if 'warning' in req.args: result['warning'] = req.args['warning'] json_str = json.dumps(result) self._sendResponse(req, json_str) # tt_custom save elif req.path_info.startswith('/tt/custom_save'): tt_name, custom_template = self._handleCustomSave(req) result = {'status': '1', 'tt_name': tt_name, 'new_template': custom_template} json_str = json.dumps(result) self._sendResponse(req, json_str) # tt_custom delete elif req.path_info.startswith('/tt/custom_delete'): tt_name = self._handleCustomDelete(req) result = {'status': '1', 'tt_name': tt_name} json_str = json.dumps(result) self._sendResponse(req, json_str) elif req.path_info.startswith('/tt/edit_buffer_save'): tt_name, custom_template = self._handleCustomSave(req) result = {'status': '1', 'tt_name': tt_name, 'new_template': custom_template} json_str = json.dumps(result) self._sendResponse(req, json_str) elif req.path_info.startswith('/tt/tt_newticket.js'): filename = resource_filename(__name__, 'templates/tt_newticket.js') chrome = Chrome(self.env) message = \ chrome.render_template(req, filename, data, 'text/plain') req.send_response(200) req.send_header('Cache-control', 'no-cache') req.send_header('Expires', 'Fri, 01 Jan 1999 00:00:00 GMT') req.send_header('Content-Type', 'text/x-javascript') req.send_header('Content-Length', len(isinstance(message, unicode) and message.encode("utf-8") or message)) req.end_headers() if req.method != 'HEAD': req.write(message) raise RequestDone
def _getNameById(self, id): """ get tempate name from tt_dict. """ tt_name = TT_Template.getNameById(self.env, id) return tt_name
def render_admin_panel(self, req, cat, page, path_info): req.perm.assert_permission('TT_ADMIN') data = { 'gettext': gettext, '_': _, 'tag_': tag_, 'N_': N_, } data['options'] = self._getTicketTypeNames() data['type'] = req.args.get('type') if 'id' in req.args: # after load history id = req.args.get('id') data['tt_text'] = self._loadTemplateTextById(id) data['type'] = self._getNameById(id) elif req.method == 'POST': # Load if req.args.get('loadtickettemplate'): tt_name = req.args.get('type') data['tt_text'] = self._loadTemplateText(tt_name) # Load history if req.args.get('loadhistory'): tt_name = req.args.get('type') data['tt_name'] = tt_name tt_history = [] for id, modi_time, tt_name, tt_text \ in TT_Template.selectByName(self.env, tt_name): history = {'id': id, 'tt_name': tt_name, 'modi_time': self._formatTime(int(modi_time)), 'tt_text': tt_text, 'href': req.abs_href.admin(cat, page, {'id': id})} tt_history.append(history) data['tt_history'] = tt_history return 'loadhistory.html', data # Save elif req.args.get('savetickettemplate'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') self._saveTemplateText(tt_name, tt_text) data['tt_text'] = tt_text # preview elif req.args.get('preview'): tt_text = req.args.get('description').replace('\r', '') tt_name = req.args.get('type') description_preview = \ self._previewTemplateText(tt_name, tt_text, req) data['tt_text'] = tt_text data['description_preview'] = description_preview return 'admin_tickettemplate.html', data
def process_request(self, req): req.perm.assert_permission('TICKET_CREATE') data = { 'gettext': gettext, '_': _, 'tag_': tag_, 'N_': N_, } if req.path_info.startswith('/tt/query'): # handle XMLHTTPRequest data['req_args'] = req.args data.update({'tt_user': req.authname}) result = TT_Template.fetchAll(self.env, data) result['status'] = '1' result['field_list'] = self._getFieldList() if self.enable_custom and 'TT_USER' in req.perm: result['enable_custom'] = True else: result['enable_custom'] = False if 'warning' in req.args: result['warning'] = req.args['warning'] json_str = json.dumps(result) self._sendResponse(req, json_str) # tt_custom save elif req.path_info.startswith('/tt/custom_save'): tt_name, custom_template = self._handleCustomSave(req) result = { 'status': '1', 'tt_name': tt_name, 'new_template': custom_template } json_str = json.dumps(result) self._sendResponse(req, json_str) # tt_custom delete elif req.path_info.startswith('/tt/custom_delete'): tt_name = self._handleCustomDelete(req) result = {'status': '1', 'tt_name': tt_name} json_str = json.dumps(result) self._sendResponse(req, json_str) elif req.path_info.startswith('/tt/edit_buffer_save'): tt_name, custom_template = self._handleCustomSave(req) result = { 'status': '1', 'tt_name': tt_name, 'new_template': custom_template } json_str = json.dumps(result) self._sendResponse(req, json_str) elif req.path_info.startswith('/tt/tt_newticket.js'): filename = resource_filename(__name__, 'templates/tt_newticket.js') chrome = Chrome(self.env) message = \ chrome.render_template(req, filename, data, 'text/plain') req.send_response(200) req.send_header('Cache-control', 'no-cache') req.send_header('Expires', 'Fri, 01 Jan 1999 00:00:00 GMT') req.send_header('Content-Type', 'text/x-javascript') req.send_header( 'Content-Length', len( isinstance(message, unicode) and message.encode("utf-8") or message)) req.end_headers() if req.method != 'HEAD': req.write(message) raise RequestDone
def process_request(self, req): req.perm.assert_permission('TICKET_CREATE') data = { "gettext": gettext, "_": _, "tag_": tag_, "N_": N_, } if req.path_info.startswith('/tt/query'): # handle XMLHTTPRequest data["req_args"] = req.args data.update({"tt_user": req.authname}) result = TT_Template.fetchAll(self.env, data) result["status"] = "1" result["field_list"] = self._getFieldList() if self.config.getbool("tickettemplate", "enable_custom", True) and \ 'TT_USER' in req.perm: result["enable_custom"] = True else: result["enable_custom"] = False if req.args.has_key("warning"): result["warning"] = "1" jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) # tt_custom save elif req.path_info.startswith('/tt/custom_save'): tt_name, custom_template = self._handleCustomSave(req); result = {} result["status"] = "1" result["tt_name"] = tt_name result["new_template"] = custom_template jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) # tt_custom delete elif req.path_info.startswith('/tt/custom_delete'): tt_name = self._handleCustomDelete(req); result = {} result["status"] = "1" result["tt_name"] = tt_name jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) elif req.path_info.startswith('/tt/edit_buffer_save'): tt_name, custom_template = self._handleCustomSave(req); result = {} result["status"] = "1" result["tt_name"] = tt_name result["new_template"] = custom_template jsonstr = json.dumps(result) self._sendResponse(req, jsonstr) elif req.path_info.startswith('/tt/tt_newticket.js'): filename = resource_filename(__name__, 'templates/tt_newticket.js') chrome = Chrome(self.env) message = chrome.render_template(req, filename, data, 'text/plain') req.send_response(200) req.send_header('Cache-control', 'no-cache') req.send_header('Expires', 'Fri, 01 Jan 1999 00:00:00 GMT') req.send_header('Content-Type', 'text/x-javascript') req.send_header('Content-Length', len(isinstance(message, unicode) and message.encode("utf-8") or message)) req.end_headers() if req.method != 'HEAD': req.write(message) raise RequestDone
def _loadTemplateTextById(self, id): """ get tempate text from tt_dict. """ tt_text = TT_Template.fetchById(self.env, id) return tt_text
def _saveTemplateText(self, tt_name, tt_text): """ save ticket template text to db. """ id = TT_Template.insert(self.env, tt_name, tt_text, time.time()) return id