1: <?php
2: /**
3: * ManiaLive - TrackMania dedicated server manager in PHP
4: *
5: * @copyright Copyright (c) 2009-2011 NADEO (http://www.nadeo.com)
6: * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
7: * @version $Revision: 359 $:
8: * @author $Author: martin.gwendal $:
9: * @date $Date: 2012-04-19 15:14:03 +0200 (jeu., 19 avr. 2012) $:
10: */
11:
12: namespace ManiaLive\Gui;
13:
14: /**
15: * Description of Group
16: */
17: class Group implements \Iterator
18: {
19: private static $groups = array();
20:
21: private $internalName;
22: private $logins = array();
23:
24: static function Create($publicName, $logins=array())
25: {
26: if(isset(self::$groups[$publicName]))
27: {
28: $group = self::$groups[$publicName];
29: foreach($logins as $login)
30: $group->add($login);
31: return $group;
32: }
33:
34: $group = new Group($publicName, $logins);
35: self::$groups[$publicName] = $group;
36: return $group;
37: }
38:
39: static function Get($publicName)
40: {
41: if(isset(self::$groups[$publicName]))
42: return self::$groups[$publicName];
43: return null;
44: }
45:
46: static function Erase($publicName)
47: {
48: if(isset(self::$groups[$publicName]))
49: {
50: $group = self::$groups[$publicName];
51: Window::Erase($group);
52: unset(self::$groups[$publicName]);
53: }
54: }
55:
56: protected function __construct($publicName, $logins)
57: {
58: $this->internalName = '$'.$publicName;
59: foreach($logins as $login)
60: $this->logins[$login] = $login;
61: }
62:
63: function __toString()
64: {
65: return $this->internalName;
66: }
67:
68: function add($login, $showWindows=false)
69: {
70: if(!isset($this->logins[$login]))
71: {
72: $this->logins[$login] = $login;
73: if($showWindows)
74: foreach(Window::Get($this) as $window)
75: if($window->isVisible())
76: $window->show($login);
77: }
78: }
79:
80: function contains($logins)
81: {
82: if($logins instanceof Group || is_array($logins))
83: {
84: foreach($logins as $login)
85: if(!isset($this->logins[$login]))
86: return false;
87: return true;
88: }
89: return isset($this->logins[$logins]);
90: }
91:
92: function count()
93: {
94: return count($this->logins);
95: }
96:
97: function remove($login)
98: {
99: if(isset($this->logins[$login]))
100: {
101: foreach(Window::Get($this) as $window)
102: $window->hide($login);
103: unset($this->logins[$login]);
104: }
105: }
106:
107: function toArray()
108: {
109: return $this->logins;
110: }
111:
112: // #Iterator implementation
113: public function current()
114: {
115: return current($this->logins);
116: }
117:
118: public function key()
119: {
120: return key($this->logins);
121: }
122:
123: public function next()
124: {
125: next($this->logins);
126: }
127:
128: public function rewind()
129: {
130: reset($this->logins);
131: }
132:
133: public function valid()
134: {
135: return key($this->logins) !== null;
136: }
137: }
138:
139: ?>