示例#1
0
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
示例#2
0
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)
示例#4
0
	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."
示例#5
0
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)
示例#6
0
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)
示例#7
0
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:
示例#8
0
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)
示例#9
0
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)
示例#10
0
# 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: