def addResStats(spawn, resType, CR, CD, DR, FL, HR, MA, PE, OQ, SR, UT, ER, forceOp, userID, galaxy): # Update stats for a spawn returnStr = "" needStat = 0 hasStats = 0 resStats = [CR,CD,DR,FL,HR,MA,PE,OQ,SR,UT,ER] statStr = "" conn = dbShared.ghConn() cursor = conn.cursor() cursor.execute("SELECT CR, CD, DR, FL, HR, MA, PE, OQ, SR, UT, ER, CRmax, CDmax, DRmax, FLmax, HRmax, MAmax, PEmax, OQmax, SRmax, UTmax, ERmax, tResources.resourceType, enteredBy FROM tResources INNER JOIN tResourceType ON tResources.resourceType=tResourceType.resourceType WHERE spawnID=" + str(spawn) + ";") row = cursor.fetchone() if row != None: for i in range(11): if row[i] != None or row[i] > 0: statStr = ",".join((statStr, str(row[i]))) if row[i+11] > 0 and row[i] == None: needStat = 1 if (resStats[i]>0 and resStats[i] != "" and resStats[i] != None): hasStats = 1 # override normal behavior of only updating # when there are no stats if forceOp is set to edit if ( (not needStat) and forceOp != "edit"): returnStr = "Resource stats already entered." else: # update resource stats # Only allow update if user has positive reputation or was the one who entered resource stats = dbShared.getUserStats(userID, galaxy).split(",") admin = dbShared.getUserAdmin(conn, userID, galaxy) if int(stats[2]) < ghShared.MIN_REP_VALS['EDIT_RESOURCE_STATS_TYPE'] and row[23] != userID and not admin: returnStr = "Error: You must earn a little reputation on the site before you can edit resources. Try adding or verifying some first. \r\n" elif hasStats: tempSQL = "UPDATE tResources SET enteredBy='" + userID + "', CR=" + n2n(CR) + ", CD=" + n2n(CD) + ", DR=" + n2n(DR) + ", FL=" + n2n(FL) + ", HR=" + n2n(HR) + ", MA=" + n2n(MA) + ", PE=" + n2n(PE) + ", OQ=" + n2n(OQ) + ", SR=" + n2n(SR) + ", UT=" + n2n(UT) + ", ER=" + n2n(ER) + " WHERE spawnID=" + str(spawn) + ";" #sys.stderr.write("sql: " + tempSQL + "\n") cursor.execute(tempSQL) result = cursor.rowcount returnStr = "spawn " + str(spawn) + " stats updated" # add resource edit event if needStat: dbShared.logEvent("INSERT INTO tResourceEvents (galaxy, spawnID, userID, eventTime, eventType) VALUES (" + str(galaxy) + "," + str(spawn) + ",'" + userID + "',NOW(),'a');", 'a', userID, galaxy, spawn) else: dbShared.logEvent("INSERT INTO tResourceEvents (galaxy, spawnID, userID, eventTime, eventType, eventDetail) VALUES (" + str(galaxy) + "," + str(spawn) + ",'" + userID + "',NOW(),'e', 'Previous stats: " + statStr + "');", 'e', userID, galaxy, spawn) if (row[22] != resType and len(resType)>0): tempSQL = "UPDATE tResources SET resourceType='" + resType + "' WHERE spawnID=" + str(spawn) + ";" cursor.execute(tempSQL) returnStr = returnStr + " type updated" else: returnStr = "Error: could not find that resource " + str(spawn) + "." cursor.close() conn.close() return returnStr
def removeSpawn(spawnID, planets, userID, galaxy): markAll = 0 try: conn = dbShared.ghConn() cursor = conn.cursor() except Exception: result = "Error: could not connect to database" if (cursor): if (planets == "all"): markAll = 1 sqlStr = "UPDATE tResourcePlanet SET unavailable=NOW(), unavailableBy='" + userID + "' WHERE spawnID=" + str( spawnID) + ";" else: # try to look up planet by name if an ID was not provided if (planets.isdigit() != True): planets = dbShared.getPlanetID(planets) sqlStr = "UPDATE tResourcePlanet SET unavailable=NOW(), unavailableBy='" + userID + "' WHERE spawnID=" + str( spawnID) + " AND planetID=" + str(planets) + ";" # Only allow removal if user has positive reputation stats = dbShared.getUserStats(userID, galaxy).split(",") cursor.execute( "SELECT enteredBy, unavailable FROM tResources WHERE spawnID=%s;", [spawnID]) row = cursor.fetchone() if int( stats[2] ) < ghShared.MIN_REP_VALS['REMOVE_RESOURCE'] and row[0] != userID: result = "Error: You must earn a little reputation on the site before you can remove resources. Try adding or verifying some first. \r\n" elif row[1] != None: result = "Error: You cannot remove that resource because it is already removed." else: cursor.execute(sqlStr) # add cleanup event if not planets.isdigit(): planets = 0 dbShared.logEvent( "INSERT INTO tResourceEvents (galaxy, spawnID, userID, eventTime, eventType, planetID) VALUES (" + str(galaxy) + "," + str(spawnID) + ",'" + userID + "',NOW(),'r'," + str(planets) + ");", 'r', userID, galaxy, str(spawnID)) result = "Spawn marked unavailable." cursor.close() else: result = "Error: Could not connect to database" conn.close() return result
if (sess != ''): logged_state = 1 currentUser = sess if (useCookies == 0): linkappend = 'gh_sid=' + sid # Check for errors errstr = '' result = '' if (spawnID.isdigit() == False): errstr = errstr + "No Spawn ID provided. \r\n" if (logged_state == 0): errstr = errstr + "You must be logged in to do that. \r\n" else: # Make sure user has enough rep to do this stats = dbShared.getUserStats(currentUser, 0).split(",") if int(stats[2]) < 50: errstr = errstr + "You do not have high enough reputation to do that. \r\n" if (newSpawnName == '' and newGalaxyId.isdigit() == False): errstr = errstr + "You did not provide any valid update info." if (errstr != ''): result = "Error: Resource admin operation failed because of the following errors:\r\n" + errstr else: conn = dbShared.ghConn() checkCursor = conn.cursor() checkCursor.execute( "SELECT spawnName, galaxy, galaxyName FROM tResources INNER JOIN tGalaxy ON tResources.galaxy = tGalaxy.galaxyID WHERE spawnID=%s", spawnID)
if galaxy == 0: result = "Error: You cannot remove system shared creature resource data." if logged_state != 1: result = "Error: You must be logged in delete creature data." print "Content-type: text/html\n" if result == "": try: conn = dbShared.ghConn() cursor = conn.cursor() except Exception: result = "Error: could not connect to database" if (cursor): # Look up user reputation for later checks stats = dbShared.getUserStats(currentUser, galaxy).split(",") userReputation = int(stats[2]) # Lookup the data to remove cursor.execute("SELECT enteredBy FROM tResourceTypeCreature WHERE galaxy=%s AND resourceType=%s AND speciesName=%s;", (galaxy, resourceType, creatureName)) row = cursor.fetchone() # Check for ownership or reputation before removing if row[0] == currentUser or userReputation >= ghShared.MIN_REP_VALS['EDIT_OTHER_CREATURE']: sqlStr = "DELETE FROM tResourceTypeCreature WHERE resourceType=%s AND speciesName=%s AND galaxy=%s;" cursor.execute(sqlStr, (resourceType, creatureName, galaxy)) affRows = cursor.rowcount if affRows > 0: result = "Creature data removed." else: result = "Error: Creature data not found."
def main(): # Get current url try: url = os.environ['REQUEST_URI'] except KeyError: url = '' uiTheme = '' form = cgi.FieldStorage() # Get Cookies useCookies = 1 cookies = Cookie.SimpleCookie() try: cookies.load(os.environ['HTTP_COOKIE']) except KeyError: useCookies = 0 if useCookies: try: currentUser = cookies['userID'].value except KeyError: currentUser = '' try: loginResult = cookies['loginAttempt'].value except KeyError: loginResult = 'success' try: sid = cookies['gh_sid'].value except KeyError: sid = form.getfirst('gh_sid', '') try: uiTheme = cookies['uiTheme'].value except KeyError: uiTheme = '' try: avatarResult = cookies['avatarAttempt'].value except KeyError: avatarResult = '' try: galaxy = cookies['galaxy'].value except KeyError: galaxy = ghShared.DEFAULT_GALAXY else: currentUser = '' loginResult = form.getfirst('loginAttempt', '') avatarResult = form.getfirst('avatarAttempt', '') sid = form.getfirst('gh_sid', '') galaxy = form.getfirst('galaxy', ghShared.DEFAULT_GALAXY) # escape input to prevent sql injection sid = dbShared.dbInsertSafe(sid) # Get a session logged_state = 0 linkappend = '' disableStr = '' created = datetime.fromtimestamp(time.time()) inGameInfo = '' pictureName = '' userPictureName = '' friendCountStr = '' donateTotal = '' userTitle = '' donorBadge = '' email = '' defaultAlertTypes = 0 sharedInventory = 0 sharedRecipes = 0 siteAlertCheckStr = '' emailAlertCheckStr = '' mobileAlertCheckStr = '' reputation = 0 resScore = 0 mapScore = 0 repColor = 'grey' resColor = 'grey' mapColor = 'grey' abilities = [] if loginResult == None: loginResult = 'success' sess = dbSession.getSession(sid) if (sess != ''): logged_state = 1 currentUser = sess if (useCookies == 0): linkappend = 'gh_sid=' + sid conn = dbShared.ghConn() cursor = conn.cursor() cursor.execute( 'SELECT userID, emailAddress, themeName FROM tUsers WHERE userID="' + currentUser + '"') row = cursor.fetchone() if (row != None): email = row[1] uiTheme = row[2] cursor.close() conn.close() else: disableStr = ' disabled="disabled"' if (uiTheme == ''): uiTheme = 'crafter' path = [] uid = '' template = 'user.html' userPage = 'root' if os.environ.has_key('PATH_INFO'): path = os.environ['PATH_INFO'].split('/')[1:] path = [p for p in path if p != ''] # get user attributes if len(path) > 0: uid = dbShared.dbInsertSafe(path[0]) if len(path) > 1: userPage = path[1] if userPage == 'inventory': template = 'inventory.html' else: created = dbShared.getUserAttr(uid, 'created') inGameInfo = dbShared.getUserAttr(uid, 'inGameInfo') userPictureName = dbShared.getUserAttr(uid, 'pictureName') defaultAlerts = dbShared.getUserAttr(uid, 'defaultAlertTypes') if defaultAlerts > 0: if defaultAlerts % 2 == 1: siteAlertCheckStr = ' checked="checked"' if defaultAlerts >= 4: mobileAlertCheckStr = ' checked="checked"' if defaultAlerts != 1 and defaultAlerts != 4 and defaultAlerts != 5: emailAlertCheckStr = ' checked="checked"' sharedInventory = dbShared.getUserAttr(uid, 'sharedInventory') sharedRecipes = dbShared.getUserAttr(uid, 'sharedRecipes') donateTotal = dbShared.getUserDonated(uid) userTitle = dbShared.getUserTitle(uid) userStats = dbShared.getUserStats(uid, galaxy).split(',') resScore = int(userStats[0]) mapScore = int(userStats[1]) reputation = int(userStats[2]) if resScore != None: if resScore > 2000: resColor = '#ffcc00' elif resScore > 500: resColor = '#3366ff' elif resScore > 25: resColor = '#009933' if mapScore != None: if mapScore > 400: mapColor = '#ffcc00' elif mapScore > 100: mapColor = '#3366ff' elif mapScore > 5: mapColor = '#009933' if reputation != None: if reputation > 100: repColor = '#ffcc00' elif reputation > 50: repColor = '#3366ff' elif reputation > 10: repColor = '#009933' elif reputation < 0: repColor = '#800000' if userPictureName == '': userPictureName = 'default.jpg' if donateTotal != '': donorBadge = '<img src="/images/coinIcon.png" width="16" title="This user has donated to the site" alt="coin" />' # get friend count conn = dbShared.ghConn() cursor = conn.cursor() cursor.execute( 'SELECT Count(uf1.added) FROM tUserFriends uf1 INNER JOIN tUserFriends uf2 ON uf1.friendID=uf2.userID AND uf1.userID=uf2.friendID WHERE uf1.userID="' + uid + '"') row = cursor.fetchone() if (row != None): friendCountStr = '(' + str(row[0]) + ')' cursor.close() conn.close() # Load list of unlocked abilities for k, v in ghShared.ABILITY_DESCR.iteritems(): if reputation >= ghShared.MIN_REP_VALS[ k] and ghShared.MIN_REP_VALS[k] != -99: a = userAbility(k, v, True) a.minReputation = ghShared.MIN_REP_VALS[k] abilities.append(a) convertGI = ghShared.convertText(inGameInfo, "js") tmpStat = dbShared.friendStatus(uid, currentUser) joinedStr = 'Joined ' + ghShared.timeAgo(created) + ' ago' pictureName = dbShared.getUserAttr(currentUser, 'pictureName') print 'Content-type: text/html\n' env = Environment(loader=FileSystemLoader('templates')) env.globals['BASE_SCRIPT_URL'] = ghShared.BASE_SCRIPT_URL env.globals['MOBILE_PLATFORM'] = ghShared.getMobilePlatform( os.environ['HTTP_USER_AGENT']) template = env.get_template(template) if userPage == 'inventory': print template.render( uiTheme=uiTheme, loggedin=logged_state, currentUser=currentUser, loginResult=loginResult, linkappend=linkappend, url=url, pictureName=pictureName, imgNum=ghShared.imgNum, galaxyList=ghLists.getGalaxyList(), professionList=ghLists.getProfessionList(galaxy), resourceGroupList=ghLists.getResourceGroupList(), resourceTypeList=ghLists.getResourceTypeList(galaxy), uid=uid, editable=(uid == currentUser and logged_state == 1)) else: print template.render(uiTheme=uiTheme, loggedin=logged_state, currentUser=currentUser, loginResult=loginResult, linkappend=linkappend, url=url, pictureName=pictureName, imgNum=ghShared.imgNum, galaxyList=ghLists.getGalaxyList(), themeList=ghLists.getThemeList(), uid=uid, convertGI=convertGI, sid=sid, avatarResult=avatarResult, email=email, donorBadge=donorBadge, joinedStr=joinedStr, userPictureName=userPictureName, tmpStat=tmpStat, userTitle=userTitle, friendCountStr=friendCountStr, userAbilities=abilities, resScore=resScore, mapScore=mapScore, reputation=reputation, resColor=resColor, mapColor=mapColor, repColor=repColor, siteAlertCheckStr=siteAlertCheckStr, emailAlertCheckStr=emailAlertCheckStr, mobileAlertCheckStr=mobileAlertCheckStr, sharedInventory=sharedInventory, sharedRecipes=sharedRecipes)
def main(): resHTML = '<h2>That resource does not exist</h2>' resHistory = '' useCookies = 1 linkappend = '' logged_state = 0 currentUser = '' galaxy = '' spawnName = '' spawnID = 0 uiTheme = '' galaxyState = 0 userReputation = 0 # Get current url try: url = os.environ['SCRIPT_NAME'] except KeyError: url = '' form = cgi.FieldStorage() # Get Cookies cookies = Cookie.SimpleCookie() try: cookies.load(os.environ['HTTP_COOKIE']) except KeyError: useCookies = 0 if useCookies: try: currentUser = cookies['userID'].value except KeyError: currentUser = '' try: loginResult = cookies['loginAttempt'].value except KeyError: loginResult = 'success' try: sid = cookies['gh_sid'].value except KeyError: sid = form.getfirst('gh_sid', '') try: uiTheme = cookies['uiTheme'].value except KeyError: uiTheme = '' else: loginResult = form.getfirst('loginAttempt', '') sid = form.getfirst('gh_sid', '') # escape input to prevent sql injection sid = dbShared.dbInsertSafe(sid) # Get a session if loginResult == None: loginResult = 'success' sess = dbSession.getSession(sid, 2592000) if (sess != ''): logged_state = 1 currentUser = sess if (uiTheme == ''): uiTheme = dbShared.getUserAttr(currentUser, 'themeName') if (useCookies == 0): linkappend = 'gh_sid=' + sid else: if (uiTheme == ''): uiTheme = 'crafter' path = [''] if os.environ.has_key('PATH_INFO'): path = os.environ['PATH_INFO'].split('/')[1:] path = [p for p in path if p != ''] if len(path) > 1: galaxy = dbShared.dbInsertSafe(path[0]) spawnName = dbShared.dbInsertSafe(path[1]) if galaxy != '': conn = dbShared.ghConn() spawn = getResource(conn, logged_state, currentUser, None, galaxy, spawnName) if spawn != None: spawnID = spawn.spawnID galaxyState = dbShared.galaxyState(spawn.spawnGalaxy) # Only show update tools if user logged in and has positive reputation stats = dbShared.getUserStats(currentUser, galaxy).split(",") userReputation = int(stats[2]) resHTML = spawn.getHTML(0, "", logged_state > 0 and galaxyState == 1, userReputation) resHistory = getResourceHistory(conn, spawn.spawnID) conn.close() else: resHTML = '<h2>No Galaxy/Resource name given</h2>' else: resHTML = '<h2>No Galaxy/Resource name given</h2>' pictureName = dbShared.getUserAttr(currentUser, 'pictureName') print 'Content-type: text/html\n' env = Environment(loader=FileSystemLoader('templates')) env.globals['BASE_SCRIPT_URL'] = ghShared.BASE_SCRIPT_URL env.globals['MOBILE_PLATFORM'] = ghShared.getMobilePlatform( os.environ['HTTP_USER_AGENT']) template = env.get_template('resource.html') print template.render( uiTheme=uiTheme, loggedin=logged_state, currentUser=currentUser, loginResult=loginResult, linkappend=linkappend, url=url, pictureName=pictureName, imgNum=ghShared.imgNum, galaxyList=ghLists.getGalaxyList(), spawnName=spawnName, resHTML=resHTML, resHistory=resHistory, showAdmin=(userReputation >= ghShared.MIN_REP_VALS['EDIT_RESOURCE_GALAXY_NAME']), spawnID=spawnID, spawnGalaxy=galaxy)
abilities = [] # get user attributes if uid != '': created = dbShared.getUserAttr(uid, 'created') inGameInfo = dbShared.getUserAttr(uid, 'inGameInfo') userPictureName = dbShared.getUserAttr(uid, 'pictureName') defaultAlerts = dbShared.getUserAttr(uid, 'defaultAlertTypes') if defaultAlerts % 2 == 1: siteAlertCheckStr = ' checked="checked"' if defaultAlerts >= 4: mobileAlertCheckStr = ' checked="checked"' if defaultAlerts != 1 and defaultAlerts != 4 and defaultAlerts != 5: emailAlertCheckStr = ' checked="checked"' donateTotal = dbShared.getUserDonated(uid) userTitle = dbShared.getUserTitle(uid) userStats = dbShared.getUserStats(uid, galaxy).split(',') resScore = int(userStats[0]) mapScore = int(userStats[1]) reputation = int(userStats[2]) if resScore != None: if resScore > 2000: resColor = '#ffcc00' elif resScore > 500: resColor = '#3366ff' elif resScore > 25: resColor = '#009933' if mapScore != None: if mapScore > 400: mapColor = '#ffcc00' elif mapScore > 100:
def main(): resHTML = '<h2>That resource type does not exist</h2>' resHistory = '' useCookies = 1 linkappend = '' logged_state = 0 currentUser = '' typeGroup = 'type' typeID = '' typeName = '' uiTheme = '' # Get current url try: url = os.environ['SCRIPT_NAME'] except KeyError: url = '' form = cgi.FieldStorage() # Get Cookies cookies = Cookie.SimpleCookie() try: cookies.load(os.environ['HTTP_COOKIE']) except KeyError: useCookies = 0 if useCookies: try: currentUser = cookies['userID'].value except KeyError: currentUser = '' try: loginResult = cookies['loginAttempt'].value except KeyError: loginResult = 'success' try: sid = cookies['gh_sid'].value except KeyError: sid = form.getfirst('gh_sid', '') try: uiTheme = cookies['uiTheme'].value except KeyError: uiTheme = '' try: galaxy = cookies['galaxy'].value except KeyError: galaxy = form.getfirst('galaxy', ghShared.DEFAULT_GALAXY) else: loginResult = form.getfirst('loginAttempt', '') sid = form.getfirst('gh_sid', '') galaxy = form.getfirst('galaxy', ghShared.DEFAULT_GALAXY) # escape input to prevent sql injection sid = dbShared.dbInsertSafe(sid) # Get a session if loginResult == None: loginResult = 'success' sess = dbSession.getSession(sid) if (sess != ''): logged_state = 1 currentUser = sess if (uiTheme == ''): uiTheme = dbShared.getUserAttr(currentUser, 'themeName') if (useCookies == 0): linkappend = 'gh_sid=' + sid else: if (uiTheme == ''): uiTheme = 'crafter' path = [''] if os.environ.has_key('PATH_INFO'): path = os.environ['PATH_INFO'].split('/')[1:] path = [p for p in path if p != ''] try: conn = dbShared.ghConn() except Exception: errorstr = "Error: could not connect to database" if path[0] != '': typeID = dbShared.dbInsertSafe(path[0]) cursor = conn.cursor() if (cursor): cursor.execute( 'SELECT resourceTypeName, rg1.groupName, rg2.groupName, rt.containerType, CRmin, CRmax, CDmin, CDmax, DRmin, DRmax, FLmin, FLmax, HRmin, HRmax, MAmin, MAmax, PEmin, PEmax, OQmin, OQmax, SRmin, SRmax, UTmin, UTmax, ERmin, ERmax, rt.resourceCategory, rt.resourceGroup FROM tResourceType rt INNER JOIN tResourceGroup rg1 ON rt.resourceCategory = rg1.resourceGroup INNER JOIN tResourceGroup rg2 ON rt.resourceGroup = rg2.resourceGroup WHERE resourceType="' + typeID + '";') row = cursor.fetchone() if (row != None): typeName = row[0] else: # look up group info if not found as a type typeGroup = 'group' cursor.execute( 'SELECT groupName, (SELECT rg.groupName FROM tResourceGroupCategory rgc INNER JOIN tResourceGroup rg ON rgc.resourceCategory = rg.resourceGroup WHERE rgc.resourceGroup=tResourceGroup.resourceGroup AND rg.groupLevel = tResourceGroup.groupLevel -1) AS resCat, "" AS resourceGroup, Max(tResourceType.containerType) AS contType, Min(CRmin), Max(CRmax), Min(CDmin), Max(CDmax), Min(DRmin), Max(DRmax), Min(FLmin), Max(FLmax), Min(HRmin), Max(HRmax), Min(MAmin), Max(MAmax), Min(PEmin), Max(PEmax), Min(OQmin), Max(OQmax), Min(SRmin), Max(SRmax), Min(UTmin), Max(UTmax), Min(ERmin), Max(ERmax), (SELECT rgc.resourceCategory FROM tResourceGroupCategory rgc INNER JOIN tResourceGroup rg ON rgc.resourceCategory = rg.resourceGroup WHERE rgc.resourceGroup=tResourceGroup.resourceGroup AND rg.groupLevel = tResourceGroup.groupLevel -1) AS catID FROM tResourceGroup, tResourceType WHERE tResourceGroup.resourceGroup="' + typeID + '" AND tResourceType.resourceType IN (SELECT resourceType FROM tResourceTypeGroup WHERE resourceGroup="' + typeID + '" GROUP BY resourceType);') row = cursor.fetchone() if (row != None): typeName = row[0] else: typeGroup = '' favHTML = '' if logged_state > 0: favCursor = conn.cursor() favSQL = ''.join(( 'SELECT itemID FROM tFavorites WHERE favType=2 AND userID="', currentUser, '" AND favGroup="', typeID, '" AND galaxy=', galaxy)) favCursor.execute(favSQL) favRow = favCursor.fetchone() if favRow != None: favHTML = ' <div class="inlineBlock" style="width:3%;float:left;"><a alt="Favorite" title="Favorite" style="cursor: pointer;" onclick="toggleFavorite(this, 2, \'' + typeID + '\', $(\'#galaxySel\').val());"><img src="/images/favorite16On.png" /></a></div>' else: favHTML = ' <div class="inlineBlock" style="width:3%;float:left;"><a alt="Favorite" title="Favorite" style="cursor: pointer;" onclick="toggleFavorite(this, 2, \'' + typeID + '\', $(\'#galaxySel\').val());"><img src="/images/favorite16Off.png" /></a></div>' favCursor.close() if typeName != '' and typeName != None: resHTML = '<div style="font-size:16px;font-weight:bold;">' + favHTML + typeName if row != None and row[3] != None: if row[1] != typeName: resHTML += '<div style="float:right;"><img src="/images/resources/' + row[ 3] + '.png" /></div></div>' else: resHTML += '</div>' # breadcrumb to resource type if not top level category if row[1] != typeName: resHTML += '<h3 style="margin-bottom:12px;">' if row[26] != 'resource': resHTML += '<a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + str( row[26]) + '">' + str(row[1]) + '</a>' else: resHTML += row[1] if typeGroup == 'type': resHTML += ' > <a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + row[ 27] + '">' + row[2] + '</a>' resHTML += ' > ' + typeName + '</h3>' # min/max stats table resHTML += '<table class="resAttr resourceStats"><tr>' resHTML += '<td><td class="header"><span>CR</span></td><td class="header"><span>CD</span></td><td class="header"><span>DR</span></td><td class="header"><span>FL</span></td><td class="header"><span>HR</span></td><td class="header"><span>MA</span></td><td class="header"><span>PE</span></td><td class="header"><span>OQ</span></td><td class="header"><span>SR</span></td><td class="header"><span>UT</span></td><td class="header"><span>ER</span></td></tr>' resHTML += '<tr><td class="header">Min</td><td>' + z2b( row[4] ) + '</td><td>' + z2b(row[6]) + '</td><td>' + z2b( row[8] ) + '</td><td>' + z2b(row[10]) + '</td><td>' + z2b( row[12]) + '</td><td>' + z2b( row[14]) + '</td><td>' + z2b( row[16]) + '</td><td>' + z2b( row[18]) + '</td><td>' + z2b( row[20]) + '</td><td>' + z2b( row[22]) + '</td><td>' + z2b( row[24]) + '</td></tr>' resHTML += '<tr><td class="header">Max</td><td>' + z2b( row[5] ) + '</td><td>' + z2b(row[7]) + '</td><td>' + z2b( row[9] ) + '</td><td>' + z2b(row[11]) + '</td><td>' + z2b( row[13]) + '</td><td>' + z2b( row[15]) + '</td><td>' + z2b( row[17]) + '</td><td>' + z2b( row[19]) + '</td><td>' + z2b( row[21]) + '</td><td>' + z2b( row[23]) + '</td><td>' + z2b( row[25]) + '</td></tr>' resHTML += '</table>' else: resHTML += '</div>' cursor.close() else: resHTML = '<h1>Resource Type Groups</h1>' resHTML += '<div id="resTypeInfo">You have reached the resource type page. From here, you can browse to any resource type and view things like: best spawns, schematics, creatures, and min/max stats.</div>' creature = max([ typeID.find('bone_'), typeID.find('hide_'), typeID.find('meat_'), typeID.find('milk_') ]) if typeID == '': # Print the plain group list for pre-IE9 because it does not support rotate css tmpAgent = os.environ.get("HTTP_USER_AGENT", "unknown") if tmpAgent == 'unknown' or (tmpAgent.find("IE") > -1 and tmpAgent.find("MSIE 9.0") == -1): resTree = getResourceGroupsPlain() else: resTree = getResourceTree() else: resTree = '' pictureName = dbShared.getUserAttr(currentUser, 'pictureName') # Get reputation to determine editing abilities stats = dbShared.getUserStats(currentUser, galaxy).split(",") userReputation = int(stats[2]) admin = dbShared.getUserAdmin(conn, currentUser, galaxy) conn.close() print 'Content-type: text/html\n' env = Environment(loader=FileSystemLoader('templates')) env.globals['BASE_SCRIPT_URL'] = ghShared.BASE_SCRIPT_URL env.globals['MOBILE_PLATFORM'] = ghShared.getMobilePlatform( os.environ['HTTP_USER_AGENT']) template = env.get_template('resourcetype.html') print template.render( uiTheme=uiTheme, loggedin=logged_state, currentUser=currentUser, loginResult=loginResult, linkappend=linkappend, url=url, pictureName=pictureName, imgNum=ghShared.imgNum, galaxyList=ghLists.getGalaxyList(), typeGroup=typeGroup, typeID=typeID, resHTML=resHTML, creature=creature, resTree=resTree, editCreatures=(userReputation >= ghShared.MIN_REP_VALS['ADD_CREATURE'] or admin), resourceType=typeID)
def main(): # Get current url try: url = os.environ['SCRIPT_NAME'] except KeyError: url = '' uiTheme = '' schematicID = '' schemImageAttempt = '' schemHTML = '<h2>That schematic does not exist.</h2>' form = cgi.FieldStorage() # Get Cookies useCookies = 1 cookies = Cookie.SimpleCookie() try: cookies.load(os.environ['HTTP_COOKIE']) except KeyError: useCookies = 0 if useCookies: try: currentUser = cookies['userID'].value except KeyError: currentUser = '' try: loginResult = cookies['loginAttempt'].value except KeyError: loginResult = 'success' try: sid = cookies['gh_sid'].value except KeyError: sid = form.getfirst('gh_sid', '') try: uiTheme = cookies['uiTheme'].value except KeyError: uiTheme = '' try: schemImageAttempt = cookies['schemImageAttempt'].value except KeyError: schemImageAttempt = '' try: galaxy = cookies['galaxy'].value except KeyError: galaxy = form.getfirst('galaxy', ghShared.DEFAULT_GALAXY) else: currentUser = '' loginResult = form.getfirst('loginAttempt', '') sid = form.getfirst('gh_sid', '') schemImageAttempt = form.getfirst('schemImageAttempt', '') galaxy = form.getfirst('galaxy', ghShared.DEFAULT_GALAXY) forceOp = form.getfirst('forceOp', '') # escape input to prevent sql injection sid = dbShared.dbInsertSafe(sid) # Get a session logged_state = 0 linkappend = '' disableStr = '' if loginResult == None: loginResult = 'success' sess = dbSession.getSession(sid) if (sess != ''): logged_state = 1 currentUser = sess if (uiTheme == ''): uiTheme = dbShared.getUserAttr(currentUser, 'themeName') if (useCookies == 0): linkappend = 'gh_sid=' + sid else: disableStr = ' disabled="disabled"' if (uiTheme == ''): uiTheme = 'crafter' path = [] s = None if os.environ.has_key('PATH_INFO'): path = os.environ['PATH_INFO'].split('/')[1:] path = [p for p in path if p != ''] favHTML = '' canEdit = False canAdd = False profession = '' if len(path) > 0: schematicID = dbShared.dbInsertSafe(path[0]) url = url + '/' + schematicID try: conn = dbShared.ghConn() except Exception: errorstr = "Error: could not connect to database" # Lookup reputation for edit tool option stats = dbShared.getUserStats(currentUser, galaxy).split(",") userReputation = int(stats[2]) admin = dbShared.getUserAdmin(conn, currentUser, galaxy) canAdd = userReputation >= ghShared.MIN_REP_VALS[ 'ADD_SCHEMATIC'] or admin if (schematicID != 'index') and (schematicID != 'home'): # Build the schematic object cursor = conn.cursor() if (cursor): cursor.execute( 'SELECT schematicName, complexity, xpAmount, (SELECT imageName FROM tSchematicImages tsi WHERE tsi.schematicID=tSchematic.schematicID AND tsi.imageType=1) AS schemImage, galaxy, enteredBy, craftingTab, skillGroup, objectType FROM tSchematic WHERE schematicID=%s;', [schematicID]) row = cursor.fetchone() if (row != None): # main schematic data if (row[3] != None): schemImageName = row[3] else: schemImageName = 'none.jpg' s = ghObjectSchematic.schematic() s.schematicID = schematicID s.schematicName = row[0] s.complexity = row[1] s.xpAmount = row[2] s.schematicImage = schemImageName s.galaxy = row[4] s.enteredBy = row[5] s.craftingTab = row[6] s.skillGroup = row[7] s.objectType = row[8] profession = getProfession(conn, s.skillGroup) ingCursor = conn.cursor() ingCursor.execute( 'SELECT ingredientName, ingredientType, ingredientObject, ingredientQuantity, res.resName, containerType FROM tSchematicIngredients LEFT JOIN (SELECT resourceGroup AS resID, groupName AS resName, containerType FROM tResourceGroup UNION ALL SELECT resourceType, resourceTypeName, containerType FROM tResourceType) res ON ingredientObject = res.resID WHERE schematicID="' + schematicID + '" ORDER BY ingredientType, ingredientQuantity DESC;') ingRow = ingCursor.fetchone() while (ingRow != None): tmpObject = ingRow[2] tmpObject = tmpObject.replace('shared_', '') if (ingRow[1] == 0): tmpImage = '/images/resources/{0}.png'.format( ingRow[5]) # resource if (ingRow[4] != None): tmpName = ingRow[4] tmpLink = '<a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + ingRow[ 2] + '">' + tmpName + '</a>' else: tmpLink = '<a href="' + ghShared.BASE_SCRIPT_URL + 'resourceType.py/' + ingRow[ 2] + '">' + tmpName + '</a>' else: # component results = getComponentLink(conn, tmpObject, ingRow[1]).split('|') tmpLink = results[1] tmpImage = results[0] tmpName = results[2] s.ingredients.append( ghObjectSchematic.schematicIngredient( ingRow[0], ingRow[1], tmpObject, ingRow[3], ingRow[4], tmpLink, tmpImage, tmpName)) ingRow = ingCursor.fetchone() ingCursor.close() # schematic quality data expGroup = '' expProp = '' qg = None qp = None expCursor = conn.cursor() expCursor.execute( 'SELECT tSchematicQualities.expQualityID, expProperty, expGroup, statName, statWeight, weightTotal FROM tSchematicQualities INNER JOIN tSchematicResWeights ON tSchematicQualities.expQualityID = tSchematicResWeights.expQualityID WHERE schematicID="' + schematicID + '" ORDER BY expGroup, expProperty, statName;') expRow = expCursor.fetchone() while (expRow != None): if expRow[1] != expProp: if qp != None: qg.properties.append(qp) qp = None qp = ghObjectSchematic.schematicQualityProperty( expRow[1], expRow[5]) expProp = expRow[1] if expRow[2] != expGroup: if qg != None: s.qualityGroups.append(qg) qg = None qg = ghObjectSchematic.schematicQualityGroup( expRow[2]) expGroup = expRow[2] sw = ghObjectSchematic.schematicStatWeight( expRow[0], expRow[3], expRow[4], expRow[5]) qp.statWeights.append(sw) expRow = expCursor.fetchone() if qp != None: qg.properties.append(qp) if qg != None: s.qualityGroups.append(qg) expCursor.close() # Get list of schematics this one can be used in useCursor = conn.cursor() useCursor.execute( 'SELECT tSchematicIngredients.schematicID, s2.schematicName FROM tSchematicIngredients INNER JOIN tSchematic ON tSchematicIngredients.ingredientObject = tSchematic.objectPath OR tSchematicIngredients.ingredientObject = tSchematic.objectGroup INNER JOIN tSchematic s2 ON tSchematicIngredients.schematicID=s2.schematicID WHERE tSchematic.schematicID = "' + schematicID + '" GROUP BY tSchematicIngredients.schematicID;') useRow = useCursor.fetchone() while (useRow != None): s.schematicsUsedIn.append([useRow[0], useRow[1]]) useRow = useCursor.fetchone() useCursor.close() if logged_state > 0: favCursor = conn.cursor() favSQL = ''.join(( 'SELECT itemID FROM tFavorites WHERE favType=4 AND userID="', currentUser, '" AND favGroup="', schematicID, '" AND galaxy=', galaxy)) favCursor.execute(favSQL) favRow = favCursor.fetchone() if favRow != None: favHTML = ' <div class="inlineBlock" style="width:3%;float:left;"><a alt="Favorite" title="Favorite" style="cursor: pointer;" onclick="toggleFavorite(this, 4, \'' + schematicID + '\', $(\'#galaxySel\').val());"><img src="/images/favorite16On.png" /></a></div>' else: favHTML = ' <div class="inlineBlock" style="width:3%;float:left;"><a alt="Favorite" title="Favorite" style="cursor: pointer;" onclick="toggleFavorite(this, 4, \'' + schematicID + '\', $(\'#galaxySel\').val());"><img src="/images/favorite16Off.png" /></a></div>' favCursor.close() if admin or currentUser == s.enteredBy or ( s.galaxy != 0 and userReputation >= ghShared.MIN_REP_VALS['EDIT_OTHER_SCHEMATIC']): canEdit = True cursor.close() conn.close() pictureName = dbShared.getUserAttr(currentUser, 'pictureName') print 'Content-type: text/html\n' env = Environment(loader=FileSystemLoader('templates')) env.globals['BASE_SCRIPT_URL'] = ghShared.BASE_SCRIPT_URL env.globals['MOBILE_PLATFORM'] = ghShared.getMobilePlatform( os.environ['HTTP_USER_AGENT']) groupListShort = "" if forceOp == 'edit': groupListShort = ghLists.getResourceGroupListShort() template = env.get_template('schematiceditor.html') else: template = env.get_template('schematics.html') print template.render( uiTheme=uiTheme, loggedin=logged_state, currentUser=currentUser, loginResult=loginResult, linkappend=linkappend, url=url, pictureName=pictureName, imgNum=ghShared.imgNum, galaxyList=ghLists.getGalaxyList(), professionList=ghLists.getProfessionList(galaxy), schematicTabList=ghLists.getSchematicTabList(), objectTypeList=ghLists.getObjectTypeList(), noenergyTypeList=ghLists.getOptionList( 'SELECT resourceType, resourceTypeName FROM tResourceType WHERE resourceCategory != "energy" ORDER BY resourceTypeName;' ), resourceGroupList=ghLists.getResourceGroupList(), resourceGroupListShort=groupListShort, statList=ghLists.getStatList(), schematicID=schematicID, schematic=s, favHTML=favHTML, canEdit=canEdit, profession=profession, canAdd=canAdd)
# get user attributes if uid != '': created = dbShared.getUserAttr(uid, 'created') inGameInfo = dbShared.getUserAttr(uid, 'inGameInfo') userPictureName = dbShared.getUserAttr(uid, 'pictureName') defaultAlerts = dbShared.getUserAttr(uid, 'defaultAlertTypes') if defaultAlerts % 2 == 1: siteAlertCheckStr = ' checked="checked"' if defaultAlerts >= 4: mobileAlertCheckStr = ' checked="checked"' if defaultAlerts != 1 and defaultAlerts != 4 and defaultAlerts != 5: emailAlertCheckStr = ' checked="checked"' donateTotal = dbShared.getUserDonated(uid) userTitle = dbShared.getUserTitle(uid) userStats = dbShared.getUserStats(uid, 0).split(',') resScore = int(userStats[0]) mapScore = int(userStats[1]) reputation = int(userStats[2]) if resScore != None: if resScore > 2000: resColor = '#ffcc00' elif resScore > 500: resColor = '#3366ff' elif resScore > 25: resColor = '#009933' if mapScore != None: if mapScore > 400: mapColor = '#ffcc00' elif mapScore > 100: