Cleared $wgLinkHolders after they are used. This fixes bug 1770 and probably improves...
[lhc/web/wiklou.git] / includes / Group.php
1 <?php
2 /**
3 * @package MediaWiki
4 */
5
6 /**
7 * Class to manage a group
8 * @package MediaWiki
9 */
10 class Group {
11 /**#@+
12 * @access private
13 */
14 /** string $name Group name */
15 var $name;
16 /** integer $id Group id */
17 var $id;
18 /** string $description Description of the group */
19 var $description;
20 /** boolean $dataLoaded Whereas we grabbed datas from the database */
21 var $dataLoaded;
22 /** string $rights Contain rights values : "foo,bar,bla" */
23 var $rights;
24 /**#@-*/
25
26 /** Constructor */
27 function Group() {
28 $this->clear();
29 }
30
31 /** Clear variables */
32 function clear() {
33 $this->name = '';
34 $this->id = 0;
35 $this->description = '';
36 $this->dataLoaded = false;
37 $this->rights = false;
38 }
39
40 /** Load group datas from database */
41 function loadFromDatabase() {
42 global $wgCommandLineMode;
43 $fname = 'Group::loadFromDatabase';
44 if ( $this->dataLoaded || $wgCommandLineMode ) {
45 return;
46 }
47
48 // be sure it's an integer
49 $this->id = IntVal($this->id);
50
51 if($this->id) {
52 $dbr =& wfGetDB( DB_SLAVE );
53 $r = $dbr->selectRow('group',
54 array('group_id', 'group_name', 'group_description', 'group_rights'),
55 array( 'group_id' => $this->id ),
56 $fname );
57 $this->id = $r->group_id;
58 $this->name = $r->group_name;
59 $this->description = $r->group_description;
60 $this->rights = $r->group_rights;
61 $this->dataLoaded = true;
62 } else {
63 $dbr =& wfGetDB( DB_SLAVE );
64 $r = $dbr->selectRow('group',
65 array('group_id', 'group_name', 'group_description', 'group_rights'),
66 array( 'group_name' => $this->name ),
67 $fname );
68 $this->id = $r->group_id;
69 $this->name = $r->group_name;
70 $this->description = $r->group_description;
71 $this->rights = $r->group_rights;
72 $this->dataLoaded = true;
73 }
74 }
75
76 /** Initialise a new row in the database */
77 function addToDatabase() {
78 $fname = 'Group::addToDatabase';
79 $dbw =& wfGetDB( DB_MASTER );
80 $dbw->insert( 'group',
81 array(
82 'group_name' => $this->name,
83 'group_description' => $this->description,
84 'group_rights' => $this->rights
85 ), $fname
86 );
87 $this->id = $dbw->insertId();
88 }
89
90 /** Save the group datas into database */
91 function save() {
92 $fname = 'Group::save';
93 if($this->id == 0) { return; }
94
95 $dbw =& wfGetDB( DB_MASTER );
96
97 $dbw->update( 'group',
98 array( /* SET */
99 'group_name' => $this->name,
100 'group_description' => $this->description,
101 'group_rights' => $this->rights
102 ), array( /* WHERE */
103 'group_id' => $this->id
104 ), $fname
105 );
106 }
107
108 // Factories
109 /**
110 * Uses Memcached if available.
111 * @param integer $id Group database id
112 */
113 function newFromId($id) {
114 global $wgMemc, $wgDBname;
115 $fname = 'Group::newFromId';
116
117 $key = "$wgDBname:groups:id:$id";
118 if( $group = $wgMemc->get( $key ) ) {
119 wfDebug( "$fname loaded group $id from cache\n" );
120 return $group;
121 }
122
123 $g = new Group();
124 $name = $g->nameFromId(IntVal($id));
125
126 if($name == '') {
127 wfDebug( "$fname can't find group $id\n" );
128 return null;
129 } else {
130 $group = $g->newFromName($name);
131 if( $group ) {
132 wfDebug( "$fname caching group $id (name $name)\n" );
133 $group->loadFromDatabase();
134 $wgMemc->add( $key, $group, 3600 );
135 } else {
136 wfDebug( "$fname failed to laod group id $d (name $name)\n" );
137 }
138 return $group;
139 }
140 }
141
142
143 /** @param string $name Group database name */
144 function newFromName($name) {
145 $fname = 'Group::newFromName';
146 $g = new Group();
147
148 $g->setId( $g->idFromName($name) );
149 if( $g->getId() != 0 ) {
150 return $g;
151 } else {
152 return;
153 }
154 }
155
156 // Converters
157 /**
158 * @param integer $id Group database id
159 * @return string Group database name
160 */
161 function nameFromId($id) {
162 $fname = 'Group::nameFromId';
163 $dbr =& wfGetDB( DB_SLAVE );
164 $r = $dbr->selectRow( 'group', array( 'group_name' ), array( 'group_id' => $id ), $fname );
165 if ($dbr == null)
166 return;
167 if($r === false) {
168 return '';
169 } else {
170 return $r->group_name;
171 }
172 }
173
174 /**
175 * @param string $name Group database name
176 * @return integer Group database id
177 */
178 function idFromName($name) {
179 $fname = 'Group::idFromName';
180 $dbr =& wfGetDB( DB_SLAVE );
181 $r = $dbr->selectRow( 'group', array( 'group_id' ), array( 'group_name' => $name ), $fname );
182
183 if($r === false) {
184 return 0;
185 } else {
186 return $r->group_id;
187 }
188 }
189
190 // Accessors for private variables
191 function getName() {
192 $this->loadFromDatabase();
193 return $this->name;
194 }
195 function setName($name) {
196 $this->loadFromDatabase();
197 $this->name = $name;
198 }
199
200 function getId() { return $this->id; }
201 function setId($id) {
202 $this->id = IntVal($id);
203 $this->dataLoaded = false;
204 }
205
206 function getDescription() { return $this->description; }
207 function setDescription($desc) {
208 $this->loadFromDatabase();
209 $this->description = $desc;
210 }
211
212 function getRights() { return $this->rights; }
213 function setRights($rights) {
214 $this->loadFromDatabase();
215 $this->rights = $rights;
216 }
217 }
218 ?>