Exemple #1
0
 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
Exemple #2
0
 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()
Exemple #3
0
  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>
    ''')   
Exemple #4
0
# 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
Exemple #5
0
 def del_user(self, request):
   '''Sets a user as deleted'''
   user = Directory.get_user(request.getvalue('userid', ''))
   user.active = '0'
   user.save()
Exemple #6
0
  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>
    ''')
Exemple #7
0
  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('&nbsp;')
          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'>&nbsp;</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'>&nbsp;&nbsp;<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'>&nbsp;&nbsp;<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>&nbsp;</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>
    ''')