public static function getOverlaysForGame($pack) { $sql_overlays = dbconnection::queryArray("SELECT * FROM overlays WHERE game_id = '{$pack->game_id}'"); $overlays = array(); for ($i = 0; $i < count($sql_overlays); $i++) { if ($ob = overlays::overlayObjectFromSQL($sql_overlays[$i])) { $overlays[] = $ob; } } return new return_package(0, $overlays); }
public static function getGroupsForGame($pack) { $sql_groups = dbconnection::queryArray("SELECT * FROM groups WHERE game_id = '{$pack->game_id}'"); $groups = array(); for ($i = 0; $i < count($sql_groups); $i++) { if ($ob = groups::groupObjectFromSQL($sql_groups[$i])) { $groups[] = $ob; } } return new return_package(0, $groups); }
public static function getNoteCommentsForNote($pack) { $sql_note_comments = dbconnection::queryArray("SELECT note_comments.*, users.user_name, users.display_name FROM note_comments LEFT JOIN users ON note_comments.user_id = users.user_id WHERE game_id = '{$pack->game_id}' AND note_id = '{$pack->note_id}' ORDER BY note_comments.created ASC"); $note_comments = array(); for ($i = 0; $i < count($sql_note_comments); $i++) { if (!($ob = note_comments::noteCommentObjectFromSQL($sql_note_comments[$i]))) { continue; } $note_comments[] = $ob; } return new return_package(0, $note_comments); }
public static function getLeaderboard($pack) { $insts = dbconnection::queryArray("SELECT * FROM instances WHERE game_id = '{$pack->game_id}' AND object_type = 'ITEM' AND object_id = '{$pack->item_id}' AND owner_type = 'USER' ORDER BY qty DESC LIMIT 10;"); $entries = array(); for ($i = 0; $i < count($insts); $i++) { $inst = $insts[$i]; $user = dbconnection::queryObject("SELECT * FROM users WHERE user_id = '{$inst->owner_id}';"); $entries[$i] = new stdClass(); $entries[$i]->qty = $inst->qty; if ($user) { $entries[$i]->user_id = $user->user_id; $entries[$i]->user_name = $user->user_name; $entries[$i]->display_name = $user->display_name; } else { $entries[$i]->user_id = 0; $entries[$i]->user_name = "(user not found)"; $entries[$i]->display_name = "(user not found)"; } } return new return_package(0, $entries); }
public static function upgrade($pack) { //find existing upgrades $upgrade_files = scandir("db/upgrades", 0); $existing_upgrades = array(); for ($i = 0; $i < count($upgrade_files); $i++) { $file = $upgrade_files[$i]; if (!preg_match("@\\d\\d*\\.\\d\\d*\\.sql@is", $file)) { continue; } //file of form #.#.sql $maj = intval(substr($file, 0, strpos($file, "."))); $min = intval(substr($file, strpos($file, ".") + 1, -4)); if (!isset($existing_upgrades[$maj])) { $existing_upgrades[$maj] = array(); } $existing_upgrades[$maj][$min] = true; } //find completed upgrades $upgrade_records = dbconnection::queryArray("SELECT * FROM db_upgrades ORDER BY version_major ASC, version_minor ASC"); $completed_upgrades = array(); for ($i = 0; $i < count($upgrade_records); $i++) { $record = $upgrade_records[$i]; $maj = $record->version_major; $min = $record->version_minor; if (!isset($completed_upgrades[$maj])) { $completed_upgrades[$maj] = array(); } $completed_upgrades[$maj][$min] = true; } //find and perform incomplete upgrades for ($i = 0; $i < count($existing_upgrades); $i++) { for ($j = 0; $j < count($existing_upgrades[$i]); $j++) { if (!isset($completed_upgrades[$i][$j])) { db::applyUpgrade(0, $i, $j); } } } return new return_package(0); }
public static function deleteWebHook($pack) { $webhook = dbconnection::queryObject("SELECT * FROM web_hooks WHERE web_hook_id = '{$pack->web_hook_id}'"); $pack->auth->game_id = $webhook->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM web_hooks WHERE web_hook_id = '{$pack->web_hook_id}' LIMIT 1"); //cleanup $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$webhook->requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_HAS_RECEIVED_INCOMING_WEB_HOOK' AND content_id = '{$pack->web_hook_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function deleteTab($pack) { $tab = dbconnection::queryObject("SELECT * FROM tabs WHERE tab_id = '{$pack->tab_id}'"); $pack->auth->game_id = $tab->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM tabs WHERE tab_id = '{$pack->tab_id}' LIMIT 1"); //cleanup $options = dbconnection::queryArray("SELECT * FROM dialog_options WHERE link_type = 'EXIT_TO_TAB' AND link_id = '{$pack->tab_id}'"); for ($i = 0; $i < count($options); $i++) { $pack->dialog_option_id = $options[$i]->dialog_option_id; dialogs::deleteDialogOption($pack); } $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$tab->requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function getMediaForGame($pack) { $sql_medias = dbconnection::queryArray("SELECT * FROM media WHERE (game_id = '{$pack->game_id}' OR (game_id = 0 AND user_id = 0))"); $medias = array(); for ($i = 0; $i < count($sql_medias); $i++) { if ($ob = media::mediaObjectFromSQL($sql_medias[$i])) { $medias[] = $ob; } } return new return_package(0, $medias); }
public static function getUsersForFuzzySearch($pack) { $sql_users = dbconnection::queryArray("SELECT * FROM users WHERE user_name LIKE '%{$pack->search}%' OR display_name LIKE '%{$pack->search}%' OR email LIKE '%{$pack->search}%'"); $users = array(); for ($i = 0; $i < count($sql_users); $i++) { if ($ob = users::userObjectFromSQL($sql_users[$i])) { $users[] = $ob; } } return new return_package(0, $users); }
public static function cleanOrphans($pack) { $tables = array(); $tables[] = "dialog_characters"; $tables[] = "dialog_options"; $tables[] = "dialog_scripts"; $tables[] = "dialogs"; $tables[] = "event_packages"; $tables[] = "events"; $tables[] = "factories"; $tables[] = "game_comments"; $tables[] = "instances"; $tables[] = "items"; $tables[] = "media"; $tables[] = "note_comments"; $tables[] = "note_likes"; $tables[] = "notes"; $tables[] = "object_tags"; $tables[] = "overlays"; $tables[] = "plaques"; $tables[] = "quests"; $tables[] = "requirement_and_packages"; $tables[] = "requirement_atoms"; $tables[] = "requirement_root_packages"; $tables[] = "scenes"; $tables[] = "tabs"; $tables[] = "tags"; $tables[] = "triggers"; $tables[] = "user_game_scenes"; $tables[] = "user_games"; $tables[] = "web_hooks"; $tables[] = "web_pages"; for ($i = 0; $i < count($tables); $i++) { $arr = dbconnection::queryArray("SELECT {$tables[$i]}.game_id as game_id, games.game_id as n_game_id FROM {$tables[$i]} LEFT JOIN games ON {$tables[$i]}.game_id = games.game_id WHERE games.game_id IS NULL GROUP BY game_id;"); for ($j = 0; $j < count($arr); $j++) { if ($tables[$i] == "media" && $arr[$j]->game_id == 0) { continue; } //allow default media if ($pack->execute) { dbconnection::query("DELETE FROM {$tables[$i]} WHERE game_id = '{$arr[$j]->game_id}';"); } else { //dry run echo "DELETE FROM {$tables[$i]} WHERE game_id = '{$arr[$j]->game_id}'; (game_id = '{$arr[$j]->game_id}')\n"; } } } //instances $types = array(); $tables = array(); $ids = array(); $types[] = "PLAQUE"; $tables[] = "plaques"; $ids[] = "plaque_id"; $types[] = "ITEM"; $tables[] = "items"; $ids[] = "item_id"; $types[] = "DIALOG"; $tables[] = "dialogs"; $ids[] = "dialog_id"; $types[] = "WEB_PAGE"; $tables[] = "web_pages"; $ids[] = "web_page_id"; $types[] = "NOTE"; $tables[] = "notes"; $ids[] = "note_id"; $types[] = "FACTORY"; $tables[] = "factories"; $ids[] = "factory_id"; for ($i = 0; $i < count($types); $i++) { $arr = dbconnection::queryArray("SELECT instances.* FROM instances LEFT JOIN {$tables[$i]} ON instances.object_id = {$tables[$i]}.{$ids[$i]} WHERE instances.object_type = '{$types[$i]}' AND {$tables[$i]}.{$ids[$i]} IS NULL;"); for ($j = 0; $j < count($arr); $j++) { if ($pack->execute) { dbconnection::query("DELETE FROM instances WHERE instance_id = '{$arr[$j]->instance_id}';"); } else { //dry run echo "DELETE FROM instances WHERE instance_id = '{$arr[$j]->instance_id}'; (game_id = '{$arr[$j]->game_id}')\n"; } } } //triggers $arr = dbconnection::queryArray("SELECT triggers.* FROM triggers LEFT JOIN instances ON triggers.instance_id = instances.instance_id WHERE instances.instance_id IS NULL;"); for ($j = 0; $j < count($arr); $j++) { if ($pack->execute) { dbconnection::query("DELETE FROM triggers WHERE trigger_id = '{$arr[$j]->trigger_id}';"); } else { //dry run echo "DELETE FROM triggers WHERE trigger_id = '{$arr[$j]->trigger_id}'; (game_id = '{$arr[$j]->game_id}')\n"; } } //requirements // \/ query to manually see requirement tree in SQL. nice for debugging. //SELECT ratom.requirement_atom_id, rand.requirement_and_package_id, rroot.requirement_root_package_id FROM requirement_atoms as ratom LEFT JOIN requirement_and_packages as rand ON ratom.requirement_and_package_id = rand.requirement_and_package_id LEFT JOIN requirement_root_packages as rroot ON rand.requirement_root_package_id = rroot.requirement_root_package_id WHERE rand.game_id = 3259; $arr = dbconnection::queryArray("SELECT requirement_and_packages.* FROM requirement_and_packages LEFT JOIN requirement_root_packages ON requirement_and_packages.requirement_root_package_id = requirement_root_packages.requirement_root_package_id WHERE requirement_root_packages.requirement_root_package_id IS NULL;"); for ($j = 0; $j < count($arr); $j++) { if ($pack->execute) { dbconnection::query("DELETE FROM requirement_and_packages WHERE requirement_and_package_id = '{$arr[$j]->requirement_and_package_id}';"); } else { //dry run echo "DELETE FROM requirement_and_packages WHERE requirement_and_package_id = '{$arr[$j]->requirement_and_package_id}'; (game_id = '{$arr[$j]->game_id}')\n"; } } $arr = dbconnection::queryArray("SELECT requirement_atoms.* FROM requirement_atoms LEFT JOIN requirement_and_packages ON requirement_atoms.requirement_and_package_id = requirement_and_packages.requirement_and_package_id WHERE requirement_and_packages.requirement_and_package_id IS NULL;"); for ($j = 0; $j < count($arr); $j++) { if ($pack->execute) { dbconnection::query("DELETE FROM requirement_atoms WHERE requirement_atom_id = '{$arr[$j]->requirement_atom_id}';"); } else { //dry run echo "DELETE FROM requirement_atoms WHERE requirement_atom_id = '{$arr[$j]->requirement_atom_id}'; (game_id = '{$arr[$j]->game_id}')\n"; } } return new return_package(0); }
public static function deleteFactory($pack) { $factory = dbconnection::queryObject("SELECT * FROM factories WHERE factory_id = '{$pack->factory_id}'"); $pack->auth->game_id = $factory->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM factories WHERE factory_id = '{$pack->factory_id}' LIMIT 1"); //cleanup $instances = dbconnection::queryArray("SELECT * FROM instances WHERE factory_id = '{$pack->factory_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'FACTORY' AND object_id = '{$pack->factory_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$factory->requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$factory->trigger_requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function deleteNote($pack) { $note = dbconnection::queryObject("SELECT * FROM notes WHERE note_id = '{$pack->note_id}'"); $pack->auth->game_id = $note->game_id; $pack->auth->permission = "read_write"; if (($pack->auth->user_id != $note->user_id || !users::authenticateUser($pack->auth)) && !editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } // Cleanup related items. $noteComments = dbconnection::queryArray("SELECT * FROM note_comments WHERE note_id = '{$pack->note_id}'"); for ($i = 0; $i < count($note_comments); $i++) { $pack->note_comment_id = $noteComments[$i]->note_comment_id; note_comments::deleteNoteComment($pack); } // NOTE duplicated from tags.php/instances.php/triggers.php due to amf framework public methods being accessible via url. $tags = dbconnection::queryArray("SELECT * FROM object_tags WHERE object_type = 'NOTE' AND object_id = '{$pack->note_id}'"); for ($i = 0; $i < count($tags); $i++) { $pack->object_tag_id = $tags[$i]->object_tag_id; dbconnection::query("DELETE FROM object_tags WHERE object_tag_id = '{$pack->object_tag_id}' LIMIT 1"); } $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'NOTE' AND object_id = '{$pack->note_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; dbconnection::query("DELETE FROM instances WHERE instance_id = '{$pack->instance_id}' LIMIT 1"); $triggers = dbconnection::queryArray("SELECT * FROM triggers WHERE instance_id = '{$pack->instance_id}'"); for ($i = 0; $i < count($triggers); $i++) { $pack->trigger_id = $triggers[$i]->trigger_id; dbconnection::query("DELETE FROM triggers WHERE trigger_id = '{$pack->trigger_id}' LIMIT 1"); // TODO fix and clean the rest of the hierarchy (requirement package) } } // After everything is cleaned up. dbconnection::query("DELETE FROM notes WHERE note_id = '{$pack->note_id}' LIMIT 1"); games::bumpGameVersion($pack); return new return_package(0); }
public static function deleteEventPackage($pack) { $pack->auth->game_id = dbconnection::queryObject("SELECT * FROM event_packages WHERE event_package_id = '{$pack->event_package_id}'")->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM event_packages WHERE event_package_id = '{$pack->event_package_id}' LIMIT 1"); //cleanup $events = dbconnection::queryArray("SELECT * FROM events WHERE event_package_id = '{$pack->event_package_id}'"); for ($i = 0; $i < count($events); $i++) { $pack->event_id = $events[$i]->event_id; events::deleteEvent($pack); } dbconnection::query("UPDATE dialog_scripts SET event_package_id = 0 WHERE event_package_id = '{$pack->event_package_id}'"); dbconnection::query("UPDATE plaques SET event_package_id = 0 WHERE event_package_id = '{$pack->event_package_id}'"); dbconnection::query("UPDATE quests SET active_event_package_id = 0 WHERE active_event_package_id = '{$pack->event_package_id}'"); dbconnection::query("UPDATE quests SET complete_event_package_id = 0 WHERE complete_event_package_id = '{$pack->event_package_id}'"); $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'EVENT_PACKAGE' AND object_id = '{$pack->event_package_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function noauth_deleteTrigger($pack) { //and this "fixes" the security risk... if (strpos($_SERVER['REQUEST_URI'], 'noauth') !== false) { return new return_package(6, NULL, "Attempt to bypass authentication externally."); } dbconnection::query("DELETE FROM triggers WHERE trigger_id = '{$pack->trigger_id}' LIMIT 1"); //cleanup $instances = dbconnection::queryArray("SELECT * FROM instances WHERE instance_id = '{$trigger->instance_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::noauth_deleteInstance($pack); } $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$trigger->requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::noauth_deleteRequirementPackage($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function deleteWebPage($pack) { $webpage = dbconnection::queryObject("SELECT * FROM web_pages WHERE web_page_id = '{$pack->web_page_id}'"); $pack->auth->game_id = $webpage->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM web_pages WHERE web_page_id = '{$pack->web_page_id}' LIMIT 1"); //cleanup $options = dbconnection::queryArray("SELECT * FROM dialog_options WHERE link_type = 'EXIT_TO_WEB_PAGE' AND link_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($options); $i++) { $pack->dialog_option_id = $options[$i]->dialog_option_id; dialogs::deleteDialogOption($pack); } $tabs = dbconnection::queryArray("SELECT * FROM tabs WHERE type = 'WEB_PAGE' AND content_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($tabs); $i++) { $pack->tab_id = $tabs[$i]->tab_id; tabs::deleteTab($pack); } $tags = dbconnection::queryArray("SELECT * FROM object_tags WHERE object_type = 'WEB_PAGE' AND object_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($tags); $i++) { $pack->object_tag_id = $tags[$i]->object_tag_id; tags::deleteObjectTag($pack); } $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'WEB_PAGE' AND object_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } $factories = dbconnection::queryArray("SELECT * FROM factories WHERE object_type = 'WEB_PAGE' AND object_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($factories); $i++) { $pack->factory_id = $factories[$i]->factory_id; factories::deleteFactory($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_VIEWED_WEB_PAGE' AND content_id = '{$pack->web_page_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function getDialogOptionsForScript($pack) { $sql_dialogOptions = dbconnection::queryArray("SELECT * FROM dialog_options WHERE dialog_id = '{$pack->dialog_id}' AND parent_dialog_script_id = '{$pack->dialog_script_id}'"); $dialogOptions = array(); for ($i = 0; $i < count($sql_dialogOptions); $i++) { if ($ob = dialogs::dialogOptionObjectFromSQL($sql_dialogOptions[$i])) { $dialogOptions[] = $ob; } } return new return_package(0, $dialogOptions); }
public static function evaluateRequirementAndPackage($pack) { $atoms = dbconnection::queryArray("SELECT requirement_atom_id FROM requirement_atoms WHERE requirement_and_package_id= '{$pack->requirement_and_package_id}'"); if (count($atoms) == 0) { return false; } for ($i = 0; $i < count($atoms); $i++) { $atoms[$i]->user_id = $pack->user_id; if (!requirements::evaluateRequirementAtom($atoms[$i])) { return false; } } return true; }
public static function deleteScene($pack) { $pack->auth->game_id = dbconnection::queryObject("SELECT * FROM scenes WHERE scene_id = '{$pack->scene_id}'")->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM scenes WHERE scene_id = '{$pack->scene_id}' LIMIT 1"); //cleanup $s = dbconnection::queryObject("SELECT * FROM scenes WHERE game_id = '{$pack->game_id}' LIMIT 1"); $s_id = $s ? $s->scene_id : 0; dbconnection::query("UPDATE games SET intro_scene_id = '{$s_id}' WHERE intro_scene_id = '{$pack->scene_id}'"); $triggers = dbconnection::queryArray("SELECT * FROM triggers WHERE scene_id = '{$pack->scene_id}'"); for ($i = 0; $i < count($triggers); $i++) { $pack->trigger_id = $triggers[$i]->trigger_id; triggers::deleteTrigger($pack); } $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'SCENE' AND object_id = '{$pack->scene_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function deleteTag($pack) { $pack->auth->game_id = dbconnection::queryObject("SELECT * FROM tags WHERE tag_id = '{$pack->tag_id}'")->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM tags WHERE tag_id = '{$pack->tag_id}' LIMIT 1"); //cleanup $tags = dbconnection::queryArray("SELECT * FROM object_tags WHERE tag_id = '{$pack->tag_id}'"); for ($i = 0; $i < count($tags); $i++) { $pack->object_tag_id = $tags[$i]->object_tag_id; tags::deleteObjectTag($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_HAS_TAGGED_ITEM' AND content_id = '{$pack->tag_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'GAME_HAS_TAGGED_ITEM' AND content_id = '{$pack->tag_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_HAS_NOTE_WITH_TAG' AND content_id = '{$pack->tag_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } games::bumpGameVersion($pack); return new return_package(0); }
public static function noauth_deleteInstance($pack) { //and this "fixes" the security risk... if (strpos($_SERVER['REQUEST_URI'], 'noauth') !== false) { return new return_package(6, NULL, "Attempt to bypass authentication externally."); } dbconnection::query("DELETE FROM instances WHERE instance_id = '{$pack->instance_id}' LIMIT 1"); //cleanup $triggers = dbconnection::queryArray("SELECT * FROM triggers WHERE instance_id = '{$pack->instance_id}'"); for ($i = 0; $i < count($triggers); $i++) { $pack->trigger_id = $triggers[$i]->trigger_id; triggers::noauth_deleteTrigger($pack); } return new return_package(0); }
public static function deleteQuest($pack) { $quest = dbconnection::queryObject("SELECT * FROM quests WHERE quest_id = '{$pack->quest_id}'"); $pack->auth->game_id = $quest->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM quests WHERE quest_id = '{$pack->quest_id}' LIMIT 1"); //cleanup $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_HAS_COMPLETED_QUEST' AND content_id = '{$pack->quest_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } /* Comment out until we've decided on desired behavior... $eventpack = dbconnection::queryObject("SELECT * FROM event_packages WHERE event_package_id = '{$quest->active_event_package_id}'"); if($eventpack) { $pack->event_package_id = $eventpack->event_package_id; events::deleteEventPackage($pack); } $eventpack = dbconnection::queryObject("SELECT * FROM event_packages WHERE event_package_id = '{$quest->complete_event_package_id}'"); if($eventpack) { $pack->event_package_id = $eventpack->event_package_id; events::deleteEventPackage($pack); } */ $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$quest->active_requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } $reqPack = dbconnection::queryObject("SELECT * FROM requirement_root_packages WHERE requirement_root_package_id = '{$quest->complete_requirement_root_package_id}'"); if ($reqPack) { $pack->requirement_root_package_id = $reqPack->requirement_root_package_id; requirements::deleteRequirementPackage($pack); } games::bumpGameVersion($pack); return new return_package(0); }
private static function humanizeLogs($logs) { if (count($logs) == 0) { return $logs; } //just snatch game id info from first avail log $gid = 0; for ($i = 0; $i < count($logs) && !$gid; $i++) { $gid = $logs[$i]->game_id; } $item_list = dbconnection::queryArray("SELECT * FROM items WHERE game_id = '{$gid}';"); $item_map = array(); for ($i = 0; $i < count($item_list); $i++) { $item_map[$item_list[$i]->item_id] = $item_list[$i]; } $plaque_list = dbconnection::queryArray("SELECT * FROM plaques WHERE game_id = '{$gid}';"); $plaque_map = array(); for ($i = 0; $i < count($plaque_list); $i++) { $plaque_map[$plaque_list[$i]->plaque_id] = $plaque_list[$i]; } $dialog_list = dbconnection::queryArray("SELECT * FROM dialogs WHERE game_id = '{$gid}';"); $dialog_map = array(); for ($i = 0; $i < count($dialog_list); $i++) { $dialog_map[$dialog_list[$i]->dialog_id] = $dialog_list[$i]; } $dialog_script_list = dbconnection::queryArray("SELECT * FROM dialog_scripts WHERE game_id = '{$gid}';"); $dialog_script_map = array(); for ($i = 0; $i < count($dialog_script_list); $i++) { $dialog_script_map[$dialog_script_list[$i]->dialog_script_id] = $dialog_script_list[$i]; } $web_page_list = dbconnection::queryArray("SELECT * FROM web_pages WHERE game_id = '{$gid}';"); $web_page_map = array(); for ($i = 0; $i < count($web_page_list); $i++) { $web_page_map[$web_page_list[$i]->web_page_id] = $web_page_list[$i]; } $note_list = dbconnection::queryArray("SELECT * FROM notes WHERE game_id = '{$gid}';"); $note_map = array(); for ($i = 0; $i < count($note_list); $i++) { $note_map[$note_list[$i]->note_id] = $note_list[$i]; } $trigger_list = dbconnection::queryArray("SELECT * FROM triggers WHERE game_id = '{$gid}';"); $trigger_map = array(); for ($i = 0; $i < count($trigger_list); $i++) { $trigger_map[$trigger_list[$i]->trigger_id] = $trigger_list[$i]; } $instance_list = dbconnection::queryArray("SELECT * FROM instances WHERE game_id = '{$gid}';"); $instance_map = array(); for ($i = 0; $i < count($instance_list); $i++) { $instance_map[$instance_list[$i]->instance_id] = $instance_list[$i]; } $event_package_list = dbconnection::queryArray("SELECT * FROM event_packages WHERE game_id = '{$gid}';"); $event_package_map = array(); for ($i = 0; $i < count($event_package_list); $i++) { $event_package_map[$event_package_list[$i]->event_package_id] = $event_package_list[$i]; } $scene_list = dbconnection::queryArray("SELECT * FROM scenes WHERE game_id = '{$gid}';"); $scene_map = array(); for ($i = 0; $i < count($scene_list); $i++) { $scene_map[$scene_list[$i]->scene_id] = $scene_list[$i]; } $quest_list = dbconnection::queryArray("SELECT * FROM quests WHERE game_id = '{$gid}';"); $quest_map = array(); for ($i = 0; $i < count($quest_list); $i++) { $quest_map[$quest_list[$i]->quest_id] = $quest_list[$i]; } $tab_list = dbconnection::queryArray("SELECT * FROM tabs WHERE game_id = '{$gid}';"); $tab_map = array(); for ($i = 0; $i < count($tab_list); $i++) { $tab_map[$tab_list[$i]->tab_id] = $tab_list[$i]; } for ($i = 0; $i < count($logs); $i++) { $l = $logs[$i]; switch ($l->event_type) { case 'NONE': $l->human = "Null Log"; break; case 'LOG_IN': $l->human = "User Logged In"; break; case 'BEGIN_GAME': $l->human = "User Began Game"; break; case 'RESET_GAME': $l->human = "User Reset Game"; break; case 'MOVE': $l->human = "User Moved"; break; case 'RECEIVE_ITEM': $l->human = "User Received {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'LOSE_ITEM': $l->human = "User Lost {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'GAME_RECEIVE_ITEM': $l->human = "Game Received {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'GAME_LOSE_ITEM': $l->human = "Game Lost {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'GROUP_RECEIVE_ITEM': $l->human = "Group Received {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'GROUP_LOSE_ITEM': $l->human = "Group Lost {$l->qty} {$item_map[$l->content_id]->name} (Item)"; break; case 'VIEW_TAB': $l->human = "User Viewed {$tab_map[$l->content_id]->name} (Tab)"; break; case 'VIEW_INSTANCE': $l->human = "User Viewed {$instance_map[$l->content_id]->name} (Instance)"; break; case 'VIEW_PLAQUE': $l->human = "User Viewed {$plaque_map[$l->content_id]->name} (Plaque)"; break; case 'VIEW_ITEM': $l->human = "User Viewed {$item_map[$l->content_id]->name} (Item)"; break; case 'VIEW_DIALOG': $l->human = "User Viewed {$dialog_map[$l->content_id]->name} (Dialog)"; break; case 'VIEW_DIALOG_SCRIPT': $l->human = "User Viewed {$dialog_script_map[$l->content_id]->text} (Dialog Script)"; break; case 'VIEW_WEB_PAGE': $l->human = "User Viewed {$web_page_map[$l->content_id]->name} (Web Page)"; break; case 'VIEW_NOTE': $l->human = "User Viewed {$note_map[$l->content_id]->name} (Note)"; break; case 'TRIGGER_TRIGGER': $l->human = "User Triggered {$trigger_map[$l->content_id]->name} (Trigger)"; break; case 'CHANGE_SCENE': $l->human = "User Changed {$scene_map[$l->content_id]->name} (Scene)"; break; case 'RUN_EVENT_PACKAGE': $l->human = "User Ran {$event_package_map[$l->content_id]->name} (Event Package)"; break; case 'COMPLETE_QUEST': $l->human = "User Completed {$quest_map[$l->content_id]->name} (Quest)"; break; case 'CREATE_NOTE': $l->human = "User Created {$note_map[$l->content_id]->name} (Note)"; break; case 'GIVE_NOTE_LIKE': $l->human = "User Liked {$note_map[$l->content_id]->name} (Note)"; break; case 'GET_NOTE_LIKE': $l->human = "User Got Liked {$note_map[$l->content_id]->name} (Note)"; break; case 'GIVE_NOTE_COMMENT': $l->human = "User Commented {$note_map[$l->content_id]->name} (Note)"; break; case 'GET_NOTE_COMMENT': $l->human = "User Got Commented {$note_map[$l->content_id]->name} (Note)"; break; case 'UPLOAD_MEDIA_ITEM': $l->human = "User Uploaded Media"; break; case 'UPLOAD_MEDIA_ITEM_IMAGE': $l->human = "User Uploaded Image"; break; case 'UPLOAD_MEDIA_ITEM_AUDIO': $l->human = "User Uploaded Audio"; break; case 'UPLOAD_MEDIA_ITEM_VIDEO': $l->human = "User Uploaded Video"; break; case 'RECEIVE_WEBHOOK': $l->human = "User Received Webhook"; break; case 'SEND_WEBHOOK': $l->human = "User Sent Webhook"; break; } } return $logs; }
public static function checkForCascadingLogs($pack) { $quests = dbconnection::queryArray("SELECT * FROM quests WHERE game_id = '{$pack->game_id}'"); $completedRecords = dbconnection::queryArray("SELECT * FROM user_log WHERE game_id = '{$pack->game_id}' AND user_id = '{$pack->auth->user_id}' AND event_type = 'COMPLETE_QUEST' AND deleted = 0 GROUP BY content_id"); $incompleteQuests = array(); for ($i = 0; $i < count($quests); $i++) { $completed = false; for ($j = 0; $j < count($completedRecords); $j++) { if ($quests[$i]->quest_id == $completedRecords[$j]->content_id) { $completed = true; } } if (!$completed) { $incompleteQuests[] = $quests[$i]; } } $reqQueryPack = new stdClass(); $reqQueryPack->game_id = $pack->game_id; $reqQueryPack->user_id = $pack->auth->user_id; $questQueryPack = new stdClass(); $questQueryPack->game_id = $pack->game_id; $questQueryPack->auth = $pack->auth; $questQueryPack->silent = true; //logPlayerCompletedQuest would otherwise recursively call this function. Might as well save it for the end. $dirty = false; for ($i = 0; $i < count($incompleteQuests); $i++) { $reqQueryPack->requirement_root_package_id = $incompleteQuests[$i]->complete_requirement_root_package_id; $questQueryPack->quest_id = $incompleteQuests[$i]->quest_id; if (requirements::evaluateRequirementPackage($reqQueryPack)) { client::logPlayerCompletedQuest($questQueryPack); $dirty = true; } } if ($dirty) { client::checkForCascadingLogs($pack); } //log changed, potentially requiring more logs }
public static function deletePlaque($pack) { $plaque = dbconnection::queryObject("SELECT * FROM plaques WHERE plaque_id = '{$pack->plaque_id}'"); $pack->auth->game_id = $plaque->game_id; $pack->auth->permission = "read_write"; if (!editors::authenticateGameEditor($pack->auth)) { return new return_package(6, NULL, "Failed Authentication"); } dbconnection::query("DELETE FROM plaques WHERE plaque_id = '{$pack->plaque_id}' LIMIT 1"); //cleanup /* Comment out until we've decided on desired behavior... $eventpack = dbconnection::queryObject("SELECT * FROM event_packages WHERE event_package_id = '{$plaque->event_package_id}'"); if($eventpack) { $pack->event_package_id = $eventpack->event_package_id; events::deleteEventPackage($pack); } */ $options = dbconnection::queryArray("SELECT * FROM dialog_options WHERE link_type = 'EXIT_TO_PLAQUE' AND link_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($options); $i++) { $pack->dialog_option_id = $options[$i]->dialog_option_id; dialogs::deleteDialogOption($pack); } $tabs = dbconnection::queryArray("SELECT * FROM tabs WHERE type = 'PLAQUE' AND content_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($tabs); $i++) { $pack->tab_id = $tabs[$i]->tab_id; tabs::deleteTab($pack); } $tags = dbconnection::queryArray("SELECT * FROM object_tags WHERE object_type = 'PLAQUE' AND object_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($tags); $i++) { $pack->object_tag_id = $tags[$i]->object_tag_id; tags::deleteObjectTag($pack); } $instances = dbconnection::queryArray("SELECT * FROM instances WHERE object_type = 'PLAQUE' AND object_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($instances); $i++) { $pack->instance_id = $instances[$i]->instance_id; instances::deleteInstance($pack); } $factories = dbconnection::queryArray("SELECT * FROM factories WHERE object_type = 'PLAQUE' AND object_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($factories); $i++) { $pack->factory_id = $factories[$i]->factory_id; factories::deleteFactory($pack); } $reqAtoms = dbconnection::queryArray("SELECT * FROM requirement_atoms WHERE requirement = 'PLAYER_VIEWED_PLAQUE' AND content_id = '{$pack->plaque_id}'"); for ($i = 0; $i < count($reqAtoms); $i++) { $pack->requirement_atom_id = $reqAtoms[$i]->requirement_atom_id; requirements::deleteRequirementAtom($pack); } games::bumpGameVersion($pack); return new return_package(0); }