def edit_user(self, request): '''Shows the edit user screen''' user = Directory.get_user(request.getvalue('userid', 'New')) if user == None: user = datagate.Item() # just create a dummy item userid = 'New' else: userid = user.id
def save_user(self, request): '''Saves (or creates) a user''' userid = request.getvalue('userid', 'New') if (userid == 'New'): user = Directory.create_user(request.session.user.id) else: user = Directory.get_user(userid) for key in Directory.USER_FIELDS: setattr(user, key, request.getvalue(key, '')) user.save()
def edit_user(self, request): '''Shows the edit user screen''' user = Directory.get_user(request.getvalue('userid', 'New')) if user == None: user = datagate.Item() # just create a dummy item title = "New User" userid = 'New' else: userid = user.id title = "Edit User" request.writeln(''' <center><div class="i">''' + title + ''':</div> ''' + request.cgi_form(_adminaction='saveuser', userid=userid, name=None, email=None, username=None, password=None, title=None, office=None, work=None, home=None, mobile=None, fax=None, comments=None) + ''' <table border=0 cellspacing=5><tr> <td>Real Name:</td> <td><input type="text" name="name" size="30" value="''' + user.getvalue('name', '') + '''"></td> </tr><tr> <td>Email:</td> <td><input type="text" name="email" size="30" value="''' + user.getvalue('email', '') + '''"></td> </tr><tr> <td>Username:</td> <td><input type="text" name="username" size="30" value="''' + user.getvalue('username', '') + '''"></td> </tr><tr> <td>Password:</td> <td><input type="text" name="password" size="30" value="''' + user.getvalue('password', '') + '''"></td> </tr><tr> <td>Title:</td> <td><input type="text" name="title" size="30" value="''' + user.getvalue('title' ,'') + '''"></td> </tr><tr> <td>Office:</td> <td><input type="text" name="office" size="30" value="''' + user.getvalue('office', '') + '''"></td> </tr><tr> <td>Work Number:</td> <td><input type="text" name="work" size="30" value="''' + user.getvalue('work', '') + '''"></td> </tr><tr> <td>Home Number:</td> <td><input type="text" name="home" size="30" value="''' + user.getvalue('home', '') + '''"></td> </tr><tr> <td>Mobile Number:</td> <td><input type="text" name="mobile" size="30" value="''' + user.getvalue('mobile', '') + '''"></td> </tr><tr> <td>Fax Number:</td> <td><input type="text" name="fax" size="30" value="''' + user.getvalue('fax', '') + '''"></td> </tr><tr> <td valign="top">Comments:</td> <td><textarea name="comments" rows=10 cols=50>''' + user.getvalue('comments', '') + '''</textarea></td> </tr></table> <input type="submit" value="Submit"> </form> ''')
# go through the meetings for meeting in meetings: print 'Working on', meeting.name groups = meeting.search1(name='groups').get_child_items() if len(groups) > 0: # meeting table rec = meetings_table.append() rec['global_meetingid'] = meeting.id rec['meetingname'] = meeting.name rec['meetingtype'] = meeting.name[meeting.name.find('.')+1: meeting.name.rfind('.')] # users table for user_item in groups[0]: user = Directory.get_user(user_item.user_id) rec = users_table.append() rec['global_meetingid'] = meeting.id rec['username'] = user.username rec['userid'] = user.id # comments and ratings for activity in meeting.search1(name='activities'): def recurse(item, activityname): for child in item: if child.getvalue('text', ''): rec = comments_table.append() rec['commentid'] = child.id rec['userid'] = child.creatorid rec['parentid'] = item.id rec['activity'] = activityname
def del_user(self, request): '''Sets a user as deleted''' user = Directory.get_user(request.getvalue('userid', '')) user.active = '0' user.save()
def users_page(self, request): '''Shows the users (embedded in the main page table)''' # the title user = Directory.get_user('New') request.writeln('<div class="module"><h1>Users</h1>') # current users request.writeln(''' <div align="center" name="userselect" id="userselect"> <div id="userlist"> ''') users = Directory.get_users() users.sort(lambda a,b: cmp(a.username, b.username)) for user in users: if user.superuser != '1': request.writeln('''<div class="userBox">''') request.writeln('''<span style="display:none;" id="userinfo_''' + user.id + '''">''' + user.id + '''</span> <span style="float:left;">'''+html(user.name)+'''</span> <span style="float:right;"> <a id="editUserForm" class="ui-icon ui-icon-pencil" href='javascript:editUser("''' + user.id + '''");'></a> <a class="ui-icon ui-icon-closethick" href='javascript:deleteUser("''' + user.id + '''");'></a> </span> </div> ''') title = "Edit User" request.writeln(''' <center> <div id="userFormDialog" title="''' + title + '''"> ''' + request.cgi_form(_adminaction='saveuser', userid=user.id, name=None, email=None, username=None, password=None, title=None, office=None, work=None, home=None, mobile=None, fax=None, comments=None) + ''' <table border=0 cellspacing=5><tr> <td>Real Name:</td> <td><input type="text" name="name" size="30" value="''' + user.getvalue('name', '') + '''"></td> </tr><tr> <td>Email:</td> <td><input type="text" name="email" size="30" value="''' + user.getvalue('email', '') + '''"></td> </tr><tr> <td>Username:</td> <td><input type="text" name="username" size="30" value="''' + user.getvalue('username', '') + '''"></td> </tr><tr> <td>Password:</td> <td><input type="text" name="password" size="30" value="''' + user.getvalue('password', '') + '''"></td> </tr><tr> <td>Title:</td> <td><input type="text" name="title" size="30" value="''' + user.getvalue('title' ,'') + '''"></td> </tr><tr> <td>Office:</td> <td><input type="text" name="office" size="30" value="''' + user.getvalue('office', '') + '''"></td> </tr><tr> <td>Work Number:</td> <td><input type="text" name="work" size="30" value="''' + user.getvalue('work', '') + '''"></td> </tr><tr> <td>Home Number:</td> <td><input type="text" name="home" size="30" value="''' + user.getvalue('home', '') + '''"></td> </tr><tr> <td>Mobile Number:</td> <td><input type="text" name="mobile" size="30" value="''' + user.getvalue('mobile', '') + '''"></td> </tr><tr> <td>Fax Number:</td> <td><input type="text" name="fax" size="30" value="''' + user.getvalue('fax', '') + '''"></td> </tr><tr> <td valign="top">Comments:</td> <td><textarea name="comments" rows=10 cols=50>''' + user.getvalue('comments', '') + '''</textarea></td> </tr> <tr> <td><input type="submit" value="Save"></td><td align="right"><input id="cancelUser" type="button" value="Cancel" /></td> </tr> </table> </form> </div> </center> ''') request.writeln('''</div><br/> <center> <input type="button" id="createUser" value="Add New User" onclick="javascript:editUser();"></input> <center> </div> </div> ''')
def send_admin_page(self, request): '''Shows the administrator page for this view. (when the user clicks Edit in the administrator)''' # get the game objects game = datagate.get_item(request.getvalue('itemid')) teams = game.search1(name='groups') board = game.search1(name='board') turns = game.search1(name='turns') # toc request.writeln('Strikecom Setup:') request.writeln('<ul>') request.writeln('<li><a href="#general">General Setup</a></li>') request.writeln('<li><a href="#assets">Assets</a></li>') request.writeln('<li><a href="#teams">Game Teams</a></li>') request.writeln('<li><a href="#board">Playing Board</a></li>') request.writeln('</ul>') ##### Strikecom General Setup ##### request.writeln('<a name="general"></a><h1>General Setup:</h1>') request.writeln(request.cgi_form(gm_action='StrikeCom.numturns', totalturns=None)) request.writeln('<div>Total number of turns: <input type="text" size="10" value="' + str(turns.totalturns) + '" name="totalturns"></div>') request.writeln('<div align="center"><input type="submit" value="Save"></div>') request.writeln('</form>') ##### Strikecom Assets Setup ##### zeroTurn = turns.get_child(turns.childids[0]).search1(name='assetmoves') assets = zeroTurn.get_child_items() request.writeln('<a name="assets"></a><h1>Asset Setup:</h1>') if len(teams.get_child_items()) == 0: request.writeln('Please add at least one team before setting up assets.') else: request.writeln(request.cgi_form(view='AssetLibraryExporter', global_meetingid=game.id, gm_contenttype='application/x-gzip',contentdisposition="AssetLibrary.gz")) request.writeln('<div align="center"><input type="button" value="Create Asset" onclick="window.open(\'' + request.cgi_href(global_rootid=game.id, view='StrikeComAsset', assetid=None) + '\',\'blah\',\'width=400,height=400\')">') if len(assets) > 0: request.writeln('<input type="submit" value="Export Assets">') request.writeln('</form>') request.writeln(request.cgi_multipart_form(action = 'AssetLibraryExporter.assetimporter', global_meetingid=game.id)) request.writeln('Import Asset Library: <input type="file" size="20" name="_assetlibrary">') request.writeln('<input type="submit" value="Import Assets"></form>') request.writeln('''</div>''') request.writeln('<center>') request.writeln(''' <table border=1 cellspacing=0 cellpadding=5> <tr id="headers"> <th>Asset Icon</th> <th>Name</th> <th>Actions</th> <th>Team</th> <th>Assignments</th> </tr> ''') # since assets are multiple times in the tree, we need to boil it # down to the last instance of the asset in the tree assets.reverse() unique = {} for asset in assets : if asset.assetid not in unique: unique[asset.assetid]=asset assets = unique.values() assets.sort(lambda a,b: cmp(a.name.lower(), b.name.lower())) ctr=0 for asset in assets: request.writeln(''' <tr name="asset_row'''+str(ctr)+'''" id="asset_row'''+str(ctr)+'''"><td> ''') if asset.filename: request.writeln('<img src="'''+ request.cgi_href(view="Filer", global_rootid=asset.id, gm_contenttype=asset.filetype) + '">') else: request.writeln(' ') request.writeln('</td><td>') request.writeln(str(asset.name)) request.writeln('</td>') request.writeln('<td align="center" id="actions_td'+str(ctr)+'">') #note if you don't add the ctr var at the end it isn't unigue and weird things happen. request.writeln('<a href="#" onclick="window.open(\'' + request.cgi_href(global_rootid=game.id, view='StrikeComAsset', assetid=asset.id) + '\',\'blah\',\'width=400,height=800\')">Edit</a>') request.writeln('|') request.writeln('<a href="' + request.cgi_href(global_meetingid=game.id, itemid=game.id, gm_action='StrikeCom.delasset', assetid = asset.id, assetname=asset.name) + '">Delete</a>'); request.writeln('</td><td>') # team assigned to this asset request.writeln(request.cgi_form(gm_action='StrikeCom.assetteam', global_meetingid=game.id, _assetid=asset.id)) request.writeln('<select name="_teamid" onchange="this.form.submit()">') if asset.getvalue('teamid', '') == '': # make sure this asset is assigned a team asset.teamid = teams[0].id asset.save() for group in teams: selected = group.id == asset.teamid and ' selected' or '' request.writeln('<option ' + selected + ' value="' + group.id + '">' + group.name + '</option>') request.writeln('</select>') request.writeln('</form>') # team member rights in this asset request.writeln('</td><td>') request.writeln(request.cgi_form(gm_action='StrikeCom.assignasset', global_meetingid=game.id, id='assignform', _itemid=asset.id, _assetid=asset.assetid)) request.writeln('''<table border=1 cellspacing=0 cellpadding=5 id='new_table' id='new_table'>''') group = datagate.get_item(asset.teamid) if group == None: group = teams.get_child_items()[0] group_ctr = 1 request.writeln('''<tr><td align='left'> </td><td align='center'><b> <a href='#asset_row' onclick=switchCheckBoxes('see_check'''+str(ctr)+''+str(group_ctr)+'''')>See</a> : <a href='#asset_row' onclick=switchCheckBoxes('move_check'''+str(ctr)+''+str(group_ctr)+'''')>Move</a></b></td></tr>''') user_ctr=0 for member in group: user = Directory.get_user(member.user_id) #user is the actual user object. member is the child of a group request.writeln('''<tr><td align='right'>'''+user.name+'''</td>''') try: asset.visible_by.index(user.id) request.writeln('''<td align='left'> <input id="see_check'''+str(ctr)+""+str(group_ctr)+""+str(user_ctr)+'''" name="_'''+str(user.id)+''':see" value='on' checked type='checkbox'> : ''') except ValueError: #not in the asset yet --> no check request.writeln('''<td align='left'> <input id="see_check'''+str(ctr)+""+str(group_ctr)+""+str(user_ctr)+'''" name="_'''+str(user.id)+''':see" value='on' type='checkbox'> : ''') try: asset.move_by.index(user.id) request.writeln('''<input id='move_check'''+str(ctr)+""+str(group_ctr)+""+str(user_ctr)+'''' name="_'''+str(user.id)+''':move" value='on' checked type='checkbox'></td></tr>''') except ValueError: #not in the asset yet --> no check request.writeln('''<input id='move_check'''+str(ctr)+""+str(group_ctr)+""+str(user_ctr)+'''' name="_'''+str(user.id)+''':move" value='on' type='checkbox'></td></tr>''') user_ctr=user_ctr+1 request.writeln(''' <tr><td> </td><td><input type='submit' value='Assign'></td></tr></table></form> </tr>''') ctr=ctr+1 request.writeln('</table>') request.writeln('</center>') ##### Strikecom Teams ##### request.writeln('<a name="teams"></a><h1>Game Teams:</h1>') # groups in this meeting groups = datagate.get_child_items(teams.id) allusers = Directory.get_users() allusers.sort(lambda a,b: cmp(a.username, b.username)) request.writeln(''' <script language='JavaScript' type='text/javascript'> <!-- var old_td; var old_index = -1; var assetindex; function addTeam() { var text = prompt("New Team Name:"); if (text != null && text != '') { text = encode(text); window.location.href = "''' + request.cgi_href(global_meetingid=game.id,gm_action='StrikeCom.addgroup', itemid=game.id, name=None) + '''&name=" + text + "#teams"; } } function switchCheckBoxes(switch_id) { //Conan can be changed to work differently. Other than just ! the boxes var mode = 'move'; if(switch_id.indexOf('see')!=-1) { mode = 'see'; } var ctr = 0; var boxes = document.getElementById(switch_id+""+ctr); while(boxes!=null) { boxes.checked = !boxes.checked; ctr++; boxes = document.getElementById(switch_id+""+ctr); } } //--> </script> <center> <div align="right"><a href="javascript:addTeam()">Add New Team</a></div> <table border=1 cellspacing=0 cellpadding=5> <tr> <th>Team Name</th> <th>Users</th> <th>Actions</th> </tr> ''') for group in groups: groupusers = [ Directory.get_user(child.user_id) for child in group] groupusers.sort(lambda a,b: cmp(a.username, b.username)) request.writeln('<tr>') request.writeln('<td valign="top">' + html(group.name) + '</td>') request.writeln('<td>') request.writeln(request.cgi_form(gm_action='StrikeCom.groupusers', global_meetingid=game.id, allusers=None, groupusers=None, groupid=None)) request.writeln('<input type="hidden" name="groupid" value="' + group.id + '">') request.writeln('<table border=0 cellspacing=0 cellpadding=0><tr><td>') request.writeln('All Users:<br>') request.writeln('<select size="5" name="allusers" multiple>') for user in allusers: if not user in groupusers: request.writeln('<option value="' + user.id + '">' + html(user.name) + '</option>') request.writeln('</select>') request.writeln('</td><td>') request.writeln('<p><input type="submit" value="->" name="submit"></p>') request.writeln('<p><input type="submit" value="<-" name="submit"></p>') request.writeln('</td><td>') request.writeln('Team Members:<br>') request.writeln('<select size="5" name="members" multiple>') for user in groupusers: request.writeln('<option value="' + user.id + '">' + html(user.name) + '</option>') request.writeln('</select>') request.writeln('</td></tr></table>') request.writeln('</form>') request.writeln('</td>') request.writeln('''<td valign="top"><a href="javascript:confirm_url('Delete this team and remove users from the game?', \'''' + request.cgi_href(global_meetingid=game.id, itemid=game.id, gm_action='StrikeCom.delgroup', groupid = group.id, groupname = group.name, allusers=None, groupusers=None) + '''\');">Delete</td>''') request.writeln('</tr>') request.writeln(''' </table> </center> ''') ##### Strikecom Playing Board ##### kargs = {'action':'StrikeCom.boardsetup', 'gridrows':None, 'gridcols':None, 'backgroundfile':None, 'gridheight':None, 'gridwidth':None} for r in range(int(board.gridrows)): for c in range(int(board.gridcols)): cell = 'terrain' + str(r) + '-' + str(c) kargs[cell] = None request.writeln(''' <a name="board"></a><h1>Playing Board:</h1> <center> ''' + request.cgi_multipart_form(**kargs) + ''' <table border=0 cellspacing=10> <tr> <td>Grid:</td> <td><input type="text" size="5" name="gridrows" value="''' + board.gridrows + '''"> rows by <input type="text" size="5" name="gridcols" value="''' + board.gridcols + '''"> columns</td> </tr><tr> <td>Size in Pixels:</td> <td><input type="text" size="5" name="gridheight" value="''' + board.gridheight + '''"> pixels high by <input type="text" size="5" name="gridwidth" value="''' + board.gridwidth + '''"> pixels wide</td> </tr><tr> <td valign="top">Background Image:</td> <td valign="top"> ''') if board.filename: request.writeln('''<img src="''' + request.cgi_href(view="Filer", global_rootid=board.id, gm_contenttype=board.filetype) + '''" width="90" height="90"></div>''') request.writeln(''' <div>Change Image: <input type="file" size="20" name="_backgroundfile"></div> <div>(note that you must have a background image to enable zooming)</div> </td> </tr> </table> ''') request.writeln('Terrain type for each cell:</b>') width = str(round(float(board.gridwidth) / float(board.gridcols))) height = str(round(float(board.gridheight) / float(board.gridrows))) if board.filename: request.writeln('<table border=1 cellspacing=0 cellpadding=0 background="' + request.cgi_href(view="Filer", global_rootid=board.id, gm_contenttype=board.filetype) + '">') else: request.writeln('<table border=1 cellspacing=0 cellpadding=0>') for r in range(int(board.gridrows)): request.writeln('<tr>') for c in range(int(board.gridcols)): cell = 'terrain' + str(r) + '-' + str(c) request.write('<td valign="top" align="left" width="' + width + '" height="' + height + '">') request.write('<input type="text" name="' + cell + '" size="8" value="' + board.getvalue(cell, '') + '">') request.writeln('</td>') request.writeln('</tr>') request.writeln(''' </table> ''') request.writeln(''' <input type="submit" value="Save Board Setup"> </form> </center> ''')