Merge branch 'master' of /home/git/platal into profile_edit
[platal.git] / classes / flagset.php
1 <?php
2 /*
3 * Copyright (C) 2003-2004 Polytechnique.org
4 * http://opensource.polytechnique.org/
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21
22 /** class for describing flags
23 */
24 class Flagset
25 {
26 /** string that holds the flagset */
27 private $value;
28
29 /** the boundary between flags */
30 private $sep = ",";
31
32
33 /** set flag
34 * @param $flags services FROM coupures
35 * @return VOID
36 */
37 public function __construct($flags = "")
38 {
39 $this->value = $flags;
40 }
41
42
43 /** add flag
44 * @param $flag XXX
45 * @return VOID
46 */
47 public function addFlag($flag)
48 {
49 if (!$flag) return;
50 if (!$this->hasflag($flag)) {
51 if ($this->value)
52 $this->value .= $this->sep;
53 $this->value .= $flag;
54 }
55 }
56
57
58 /** test si flag ou pas
59 * @param $flag XXX
60 * @return 1 || 0
61 */
62 public function hasFlag($flag)
63 {
64 $tok = strtok($this->value,$this->sep);
65 while ($tok) {
66 if ($tok==$flag) return 1;
67 $tok = strtok($this->sep);
68 }
69 return 0;
70 }
71
72 /** test flag combination
73 */
74 public function hasFlagCombination($flag)
75 {
76 $perms = explode(',', $flag);
77 foreach ($perms as $perm)
78 {
79 $ok = true;
80 $rights = explode(':', $perm);
81 foreach ($rights as $right) {
82 if (($right{0} == '!' && $this->hasFlag(substr($right, 1))) || !$this->hasFlag($right)) {
83 $ok = false;
84 }
85 }
86 if ($ok) {
87 return true;
88 }
89 }
90 return false;
91 }
92
93 /** remove flag
94 * @param $flag XXX
95 * @return VOID
96 */
97 public function rmFlag($flag)
98 {
99 if (!$flag) return;
100 $newvalue = "";
101 $tok = strtok($this->value,$this->sep);
102 while ($tok) {
103 if ($tok!=$flag) {
104 if ($newvalue)
105 $newvalue .= $this->sep;
106 $newvalue .= $tok;
107 }
108 $tok = strtok($this->sep);
109 }
110 $this->value=$newvalue;
111 }
112
113 /** return the flagset
114 */
115 public function flags()
116 {
117 return $this->value;
118 }
119 }
120
121 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
122 ?>