Changeset 3525
- Timestamp:
- 04/17/08 05:13:57 (8 months ago)
- Files:
-
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/setup.py (modified) (1 diff)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/changelog.txt (modified) (1 diff)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/default_templates.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/model.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/templates/admin_tickettemplate.cs (modified) (2 diffs)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/templates/loadhistory.cs (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/ttadmin.py (modified) (9 diffs)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/upgrades.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/version.txt (modified) (1 diff)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/setup.py (modified) (1 diff)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/changelog.txt (modified) (1 diff)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/default_templates.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/model.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/templates/admin_tickettemplate.cs (modified) (2 diffs)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/templates/loadhistory.cs (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/ttadmin.py (modified) (9 diffs)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/upgrades.py (added)
- zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/version.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/setup.py
r3138 r3525 3 3 setup( 4 4 name = 'TracTicketTemplate', 5 version = '0. 3',5 version = '0.5', 6 6 packages = ['tickettemplate'], 7 7 package_data = { 'tickettemplate': [ '*.txt', 'templates/*.*', 'htdocs/*.*', 'tests/*.*' ] }, zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/changelog.txt
r3524 r3525 1 TicketTemplate 0.5 (April 11, 2008) 2 3 * use trac db to store all templates data 4 * implement history manipulation feature 5 * implement upgrade template data from old version 6 1 7 TicketTemplate 0.4 (Mar 25, 2008) 2 8 zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/templates/admin_tickettemplate.cs
r3524 r3525 10 10 11 11 12 <form id="savetickettemplate" method="post">12 <form id="savetickettemplate" action="tickettemplate" method="post"> 13 13 14 14 <div class="field"><label for="type">Type:</label> <?cs 15 15 call:hdf_select(options, 'type', type, 0) ?> 16 16 <input type="submit" name="loadtickettemplate" value=" Load " /> 17 <input type="submit" name="loadhistory" value=" History " /> 17 18 <input type="submit" name="savetickettemplate" value=" Apply changes " /> 18 19 <input type="reset" value=" Reset " /> … … 38 39 <div class="buttons"> 39 40 <input type="submit" name="preview" value="preview" accesskey="r" /> 40 <input type="submit" value="submit" />41 41 </div> 42 42 zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/ttadmin.py
r3524 r3525 9 9 10 10 from trac.core import * 11 from trac.db import DatabaseManager 11 12 from trac.util.html import html 12 13 from trac.web import IRequestHandler … … 14 15 from trac.web.chrome import * 15 16 from trac.wiki import wiki_to_html, wiki_to_oneliner 17 from trac.perm import IPermissionRequestor 16 18 17 19 from trac.ticket import Milestone, Ticket, TicketSystem, ITicketManipulator … … 25 27 import os 26 28 import pickle 29 import inspect 30 import time 31 import textwrap 32 33 from tickettemplate.model import schema, schema_version, TT_Template 34 from default_templates import DEFAULT_TEMPLATES 27 35 28 36 __all__ = ['TicketTemplateModule'] … … 35 43 INavigationContributor, 36 44 IRequestHandler, 37 # IEnvironmentSetupParticipant, 45 IEnvironmentSetupParticipant, 46 IPermissionRequestor, 38 47 ) 39 48 49 # IPermissionRequestor methods 50 51 def get_permission_actions(self): 52 actions = ['TT_ADMIN'] 53 return actions 54 40 55 # IEnvironmentSetupParticipant methods 41 56 42 # def environment_created(self): 43 # """Create the `site_newticket.cs` template file in the environment.""" 44 # if self.env.path: 45 # templates_dir = os.path.join(self.env.path, 'templates') 46 # if not os.path.exists(templates_dir): 47 # os.mkdir(templates_dir) 48 # template_name = os.path.join(templates_dir, 'site_newticket.cs') 49 # template_file = file(template_name, 'w') 50 # template_file.write("""<?cs 51 ##################################################################### 52 ## New ticket prelude - Included directly above the new ticket form 53 #?> 54 #""") 55 # 56 # def environment_needs_upgrade(self, db): 57 # return False 58 # 59 # def upgrade_environment(self, db): 60 # pass 61 57 def environment_created(self): 58 # Create the required tables 59 db = self.env.get_db_cnx() 60 connector, _ = DatabaseManager(self.env)._get_connector() 61 cursor = db.cursor() 62 for table in schema: 63 for stmt in connector.to_sql(table): 64 cursor.execute(stmt) 65 66 # Insert a global version flag 67 cursor.execute("INSERT INTO system (name,value) " 68 "VALUES ('tt_version',%s)", (schema_version,)) 69 70 # Create some default templates 71 for tt_name, tt_text in DEFAULT_TEMPLATES: 72 TT_Template.insert(self.env, tt_name, tt_text, 0) 73 74 db.commit() 75 76 def environment_needs_upgrade(self, db): 77 cursor = db.cursor() 78 cursor.execute("SELECT value FROM system WHERE name='tt_version'") 79 row = cursor.fetchone() 80 if not row or int(row[0]) < schema_version: 81 return True 82 83 def upgrade_environment(self, db): 84 cursor = db.cursor() 85 cursor.execute("SELECT value FROM system WHERE name='tt_version'") 86 row = cursor.fetchone() 87 if not row: 88 self.environment_created() 89 current_version = 0 90 else: 91 current_version = int(row[0]) 92 93 from tickettemplate import upgrades 94 for version in range(current_version + 1, schema_version + 1): 95 for function in upgrades.map.get(version): 96 print textwrap.fill(inspect.getdoc(function)) 97 function(self.env, db) 98 print 'Done.' 99 cursor.execute("UPDATE system SET value=%s WHERE " 100 "name='tt_version'", (schema_version,)) 101 self.log.info('Upgraded tt tables from version %d to %d', 102 current_version, schema_version) 62 103 63 104 # INavigationContributor methods … … 115 156 116 157 def process_admin_request(self, req, cat, page, path_info): 117 req.perm.assert_permission('T RAC_ADMIN')158 req.perm.assert_permission('TT_ADMIN') 118 159 119 160 req.hdf['options'] = self._getTicketTypeNames() 120 161 req.hdf['type'] = req.args.get('type') 121 162 122 if req.method == 'POST': 123 # tt_file_name = "description_%s.tmpl" % req.args.get('type') 124 # tt_file_name_default = "description_%s.tmpl" % "default" 125 # 126 # tt_file = os.path.join(self.env.path, "templates", tt_file_name) 127 # tt_file_default = os.path.join(self.env.path, "templates", tt_file_name_default) 163 164 if req.args.has_key("id"): 165 # after load history 166 id = req.args.get("id") 167 req.hdf['tt_text'] = self._loadTemplateTextById(id) 168 req.hdf['type'] = self._getNameById(id) 169 170 171 elif req.method == 'POST': 128 172 129 173 # Load … … 132 176 133 177 req.hdf['tt_text'] = self._loadTemplateText(tt_name) 178 179 # Load history 180 if req.args.get('loadhistory'): 181 tt_name = req.args.get('type') 182 183 req.hdf['tt_name'] = tt_name 184 185 tt_history = [] 186 for id,modi_time,tt_name,tt_text in TT_Template.selectByName(self.env, tt_name): 187 history = {} 188 history["id"] = id 189 history["tt_name"] = tt_name 190 history["modi_time"] = self._formatTime(int(modi_time)) 191 history["tt_text"] = tt_text 192 history["href"] = req.abs_href.admin(cat, page, {"id":id}) 193 tt_history.append(history) 194 195 req.hdf['tt_history'] = tt_history 196 197 return 'loadhistory.cs', None 134 198 135 199 # Save … … 141 205 req.hdf['tt_text'] = tt_text 142 206 143 # Save207 # preview 144 208 elif req.args.get('preview'): 145 209 tt_text = req.args.get('description').replace('\r', '') … … 183 247 184 248 # private methods 185 def _getTTFilePath(self): 186 """ get ticket template file path 187 """ 188 return os.path.join(self.env.path, "templates", "description.tmpl") 189 190 def _loadTTDict(self): 191 """ load ticket template dict from file. 192 """ 193 tt_file = self._getTTFilePath() 194 195 try: 196 fp = open(tt_file,'rb') 197 tt_stream = fp.read() 198 fp.close() 199 except: 200 tt_stream = "" 201 202 try: 203 tt_dict = pickle.loads(tt_stream) 204 except: 205 tt_dict = {} 206 207 return tt_dict 208 249 209 250 def _loadTemplateText(self, tt_name): 210 251 """ get tempate text from tt_dict. 211 return tt_text if found in tt_dict252 return tt_text if found in db 212 253 or default tt_text if exists 213 254 or empty string if default not exists. 214 255 """ 215 tt_dict = self._loadTTDict() 216 return tt_dict.get(tt_name, tt_dict.get("default", "")) 256 tt_text = TT_Template.fetch(self.env, tt_name) 257 if not tt_text: 258 tt_text = TT_Template.fetch(self.env, "default") 259 260 return tt_text 261 262 def _getNameById(self, id): 263 """ get tempate name from tt_dict. 264 """ 265 tt_name = TT_Template.getNameById(self.env, id) 266 267 return tt_name 268 269 270 def _loadTemplateTextById(self, id): 271 """ get tempate text from tt_dict. 272 """ 273 tt_text = TT_Template.fetchById(self.env, id) 274 275 return tt_text 217 276 218 277 def _saveTemplateText(self, tt_name, tt_text): 219 """ save ticket template text to file. 220 """ 221 # dump tt_dict 222 tt_dict = self._loadTTDict() 223 tt_dict[tt_name] = tt_text 224 tt_stream = pickle.dumps(tt_dict) 225 226 tt_file = self._getTTFilePath() 227 try: 228 fp = open(tt_file,'wb') 229 except: 230 raise TracError("Can't write ticket template file %s" % tt_file) 231 else: 232 fp.write(tt_stream) 233 fp.close() 278 """ save ticket template text to db. 279 """ 280 281 id = TT_Template.insert(self.env, tt_name, tt_text, time.time()) 282 return id 234 283 235 284 def _getTicketTypeNames(self): … … 247 296 return options 248 297 298 def _formatTime(self, modi_time): 299 """ 300 """ 301 return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(modi_time)) zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/En/tickettemplate/version.txt
r3524 r3525 1 0. 41 0.5 zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/setup.py
r3138 r3525 3 3 setup( 4 4 name = 'TracTicketTemplate', 5 version = '0. 3',5 version = '0.5', 6 6 packages = ['tickettemplate'], 7 7 package_data = { 'tickettemplate': [ '*.txt', 'templates/*.*', 'htdocs/*.*', 'tests/*.*' ] }, zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/changelog.txt
r3524 r3525 1 TicketTemplate 0.5 (April 11, 2008) 2 3 * use trac db to store all templates data 4 * implement history manipulation feature 5 * implement upgrade template data from old version 6 1 7 TicketTemplate 0.4 (Mar 25, 2008) 2 8 zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/templates/admin_tickettemplate.cs
r3524 r3525 16 16 <input type="submit" name="loadtickettemplate" value=" 蜜å 17 17 ¥æš¡æ¿ " /> 18 <input type="submit" name="loadhistory" value=" 蜜å 19 ¥åå² " /> 18 20 <input type="submit" name="savetickettemplate" value=" åºçšä¿®æ¹ " /> 19 21 <input type="reset" value=" é眮 " /> … … 38 40 <div class="buttons"> 39 41 <input type="submit" name="preview" value="é¢è§" accesskey="r" /> 40 <input type="submit" value="åé" />41 42 </div> 42 43 zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/ttadmin.py
r3524 r3525 9 9 10 10 from trac.core import * 11 from trac.db import DatabaseManager 11 12 from trac.util.html import html 12 13 from trac.web import IRequestHandler … … 14 15 from trac.web.chrome import * 15 16 from trac.wiki import wiki_to_html, wiki_to_oneliner 17 from trac.perm import IPermissionRequestor 16 18 17 19 from trac.ticket import Milestone, Ticket, TicketSystem, ITicketManipulator … … 25 27 import os 26 28 import pickle 29 import inspect 30 import time 31 import textwrap 32 33 from tickettemplate.model import schema, schema_version, TT_Template 34 from default_templates import DEFAULT_TEMPLATES 27 35 28 36 __all__ = ['TicketTemplateModule'] … … 35 43 INavigationContributor, 36 44 IRequestHandler, 37 # IEnvironmentSetupParticipant, 45 IEnvironmentSetupParticipant, 46 IPermissionRequestor, 38 47 ) 39 48 49 # IPermissionRequestor methods 50 51 def get_permission_actions(self): 52 actions = ['TT_ADMIN'] 53 return actions 54 40 55 # IEnvironmentSetupParticipant methods 41 56 42 # def environment_created(self): 43 # """Create the `site_newticket.cs` template file in the environment.""" 44 # if self.env.path: 45 # templates_dir = os.path.join(self.env.path, 'templates') 46 # if not os.path.exists(templates_dir): 47 # os.mkdir(templates_dir) 48 # template_name = os.path.join(templates_dir, 'site_newticket.cs') 49 # template_file = file(template_name, 'w') 50 # template_file.write("""<?cs 51 ##################################################################### 52 ## New ticket prelude - Included directly above the new ticket form 53 #?> 54 #""") 55 # 56 # def environment_needs_upgrade(self, db): 57 # return False 58 # 59 # def upgrade_environment(self, db): 60 # pass 61 57 def environment_created(self): 58 # Create the required tables 59 db = self.env.get_db_cnx() 60 connector, _ = DatabaseManager(self.env)._get_connector() 61 cursor = db.cursor() 62 for table in schema: 63 for stmt in connector.to_sql(table): 64 cursor.execute(stmt) 65 66 # Insert a global version flag 67 cursor.execute("INSERT INTO system (name,value) " 68 "VALUES ('tt_version',%s)", (schema_version,)) 69 70 # Create some default templates 71 for tt_name, tt_text in DEFAULT_TEMPLATES: 72 TT_Template.insert(self.env, tt_name, tt_text, 0) 73 74 db.commit() 75 76 def environment_needs_upgrade(self, db): 77 cursor = db.cursor() 78 cursor.execute("SELECT value FROM system WHERE name='tt_version'") 79 row = cursor.fetchone() 80 if not row or int(row[0]) < schema_version: 81 return True 82 83 def upgrade_environment(self, db): 84 cursor = db.cursor() 85 cursor.execute("SELECT value FROM system WHERE name='tt_version'") 86 row = cursor.fetchone() 87 if not row: 88 self.environment_created() 89 current_version = 0 90 else: 91 current_version = int(row[0]) 92 93 from tickettemplate import upgrades 94 for version in range(current_version + 1, schema_version + 1): 95 for function in upgrades.map.get(version): 96 print textwrap.fill(inspect.getdoc(function)) 97 function(self.env, db) 98 print 'Done.' 99 cursor.execute("UPDATE system SET value=%s WHERE " 100 "name='tt_version'", (schema_version,)) 101 self.log.info('Upgraded tt tables from version %d to %d', 102 current_version, schema_version) 62 103 63 104 # INavigationContributor methods … … 116 157 117 158 def process_admin_request(self, req, cat, page, path_info): 118 req.perm.assert_permission('T RAC_ADMIN')159 req.perm.assert_permission('TT_ADMIN') 119 160 120 161 req.hdf['options'] = self._getTicketTypeNames() 121 162 req.hdf['type'] = req.args.get('type') 122 163 123 if req.method == 'POST': 124 # tt_file_name = "description_%s.tmpl" % req.args.get('type') 125 # tt_file_name_default = "description_%s.tmpl" % "default" 126 # 127 # tt_file = os.path.join(self.env.path, "templates", tt_file_name) 128 # tt_file_default = os.path.join(self.env.path, "templates", tt_file_name_default) 164 165 if req.args.has_key("id"): 166 # after load history 167 id = req.args.get("id") 168 req.hdf['tt_text'] = self._loadTemplateTextById(id) 169 req.hdf['type'] = self._getNameById(id) 170 171 172 elif req.method == 'POST': 129 173 130 174 # Load … … 133 177 134 178 req.hdf['tt_text'] = self._loadTemplateText(tt_name) 179 180 # Load history 181 if req.args.get('loadhistory'): 182 tt_name = req.args.get('type') 183 184 req.hdf['tt_name'] = tt_name 185 186 tt_history = [] 187 for id,modi_time,tt_name,tt_text in TT_Template.selectByName(self.env, tt_name): 188 history = {} 189 history["id"] = id 190 history["tt_name"] = tt_name 191 history["modi_time"] = self._formatTime(int(modi_time)) 192 history["tt_text"] = tt_text 193 history["href"] = req.abs_href.admin(cat, page, {"id":id}) 194 tt_history.append(history) 195 196 req.hdf['tt_history'] = tt_history 197 198 return 'loadhistory.cs', None 135 199 136 200 # Save … … 142 206 req.hdf['tt_text'] = tt_text 143 207 144 # Save208 # preview 145 209 elif req.args.get('preview'): 146 210 tt_text = req.args.get('description').replace('\r', '') … … 184 248 185 249 # private methods 186 def _getTTFilePath(self): 187 """ get ticket template file path 188 """ 189 return os.path.join(self.env.path, "templates", "description.tmpl") 190 191 def _loadTTDict(self): 192 """ load ticket template dict from file. 193 """ 194 tt_file = self._getTTFilePath() 195 196 try: 197 fp = open(tt_file,'rb') 198 tt_stream = fp.read() 199 fp.close() 200 except: 201 tt_stream = "" 202 203 try: 204 tt_dict = pickle.loads(tt_stream) 205 except: 206 tt_dict = {} 207 208 return tt_dict 209 250 210 251 def _loadTemplateText(self, tt_name): 211 252 """ get tempate text from tt_dict. 212 return tt_text if found in tt_dict253 return tt_text if found in db 213 254 or default tt_text if exists 214 255 or empty string if default not exists. 215 256 """ 216 tt_dict = self._loadTTDict() 217 return tt_dict.get(tt_name, tt_dict.get("default", "")) 257 tt_text = TT_Template.fetch(self.env, tt_name) 258 if not tt_text: 259 tt_text = TT_Template.fetch(self.env, "default") 260 261 return tt_text 262 263 def _getNameById(self, id): 264 """ get tempate name from tt_dict. 265 """ 266 tt_name = TT_Template.getNameById(self.env, id) 267 268 return tt_name 269 270 271 def _loadTemplateTextById(self, id): 272 """ get tempate text from tt_dict. 273 """ 274 tt_text = TT_Template.fetchById(self.env, id) 275 276 return tt_text 218 277 219 278 def _saveTemplateText(self, tt_name, tt_text): 220 """ save ticket template text to file. 221 """ 222 # dump tt_dict 223 tt_dict = self._loadTTDict() 224 tt_dict[tt_name] = tt_text 225 tt_stream = pickle.dumps(tt_dict) 226 227 tt_file = self._getTTFilePath() 228 try: 229 fp = open(tt_file,'wb') 230 except: 231 raise TracError("Can't write ticket template file %s" % tt_file) 232 else: 233 fp.write(tt_stream) 234 fp.close() 279 """ save ticket template text to db. 280 """ 281 282 id = TT_Template.insert(self.env, tt_name, tt_text, time.time()) 283 return id 235 284 236 285 def _getTicketTypeNames(self): … … 248 297 return options 249 298 299 def _formatTime(self, modi_time): 300 """ 301 """ 302 return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(modi_time)) zoomquiettranslation/plugins/KSTracTicketTemplate/0.10/Zh/tickettemplate/version.txt
r3524 r3525 1 0. 41 0.5
