1: <?php
2:
3: namespace Budabot\Core;
4:
5: use Budabot\Core\xml;
6: use stdClass;
7: use Budabot\Core\AOChatPacket;
8:
9: 10: 11: 12: 13: 14:
15: class GuildManager {
16:
17: public $chatBot;
18:
19:
20: public $db;
21:
22:
23: public $cacheManager;
24:
25:
26: public $playerManager;
27:
28: public function getById($guild_id, $rk_num = 0, $forceUpdate = false) {
29:
30: if ($rk_num == 0) {
31: $rk_num = $this->chatBot->vars["dimension"];
32: }
33:
34: $name = ucfirst(strtolower($name));
35: $url = "http://people.anarchy-online.com/org/stats/d/$rk_num/name/$guild_id/basicstats.xml?data_type=json";
36: $groupName = "guild_roster";
37: $filename = "$guild_id.$rk_num.json";
38: if ($this->chatBot->vars["my_guild_id"] == $guild_id) {
39: $maxCacheAge = 21600;
40: } else {
41: $maxCacheAge = 86400;
42: }
43: $cb = function($data) {
44: $result = json_decode($data) != null;
45: return $result;
46: };
47:
48: $cacheResult = $this->cacheManager->lookup($url, $groupName, $filename, $cb, $maxCacheAge, $forceUpdate);
49:
50:
51: if ($cacheResult->success !== true) {
52: return null;
53: }
54:
55: list($orgInfo, $members, $lastUpdated) = json_decode($cacheResult->data);
56:
57: $guild = new stdClass;
58: $guild->guild_id = $guild_id;
59:
60:
61: $guild->orgname = $orgInfo->NAME;
62: $guild->orgside = $orgInfo->SIDE_NAME;
63:
64:
65: forEach ($members as $member) {
66: $name = $member->NAME;
67: if (!isset($this->chatBot->id[$name])) {
68: $this->chatBot->send_packet(new AOChatPacket("out", AOCP_CLIENT_LOOKUP, $name));
69: }
70: }
71:
72: forEach ($members as $member) {
73: $name = $member->NAME;
74: $charid = $this->chatBot->get_uid($name);
75: if ($charid == null) {
76: $charid = 0;
77: }
78:
79: $guild->members[$name] = new stdClass;
80: $guild->members[$name]->charid = $charid;
81: $guild->members[$name]->firstname = trim($member->FIRSTNAME);
82: $guild->members[$name]->name = $name;
83: $guild->members[$name]->lastname = trim($member->LASTNAME);
84: $guild->members[$name]->level = $member->LEVELX;
85: $guild->members[$name]->breed = $member->BREED;
86: $guild->members[$name]->gender = $member->SEX;
87: $guild->members[$name]->faction = $guild->orgside;
88: $guild->members[$name]->profession = $member->PROF;
89: $guild->members[$name]->prof_title = $member->PROF_TITLE;
90: $guild->members[$name]->ai_rank = $member->DEFENDER_RANK_TITLE;
91: $guild->members[$name]->ai_level = $member->ALIENLEVEL;
92: $guild->members[$name]->guild_id = $guild->guild_id;
93: $guild->members[$name]->guild = $guild->orgname;
94: $guild->members[$name]->guild_rank = $member->RANK_TITLE;
95: $guild->members[$name]->guild_rank_id = $member->RANK;
96: $guild->members[$name]->dimension = $rk_num;
97: $guild->members[$name]->source = 'org_roster';
98:
99: $guild->members[$name]->head_id = $member->HEADID;
100: $guild->members[$name]->pvp_rating = $member->PVPRATING;
101: $guild->members[$name]->pvp_title = $member->PVPTITLE;
102: }
103:
104:
105:
106: if ($cacheResult->usedCache === false) {
107: $this->db->beginTransaction();
108:
109: $sql = "UPDATE players SET guild_id = 0, guild = '' WHERE guild_id = ? AND dimension = ?";
110: $this->db->exec($sql, $guild->guild_id, $rk_num);
111:
112: forEach ($guild->members as $member) {
113: $this->playerManager->update($member);
114: }
115:
116: $this->db->commit();
117: }
118:
119: return $guild;
120: }
121: }
122: