Rename PlatalPage to PlPage
[platal.git] / classes / flagset.php
CommitLineData
7cca6eec 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 */
2b1ee50b 24class Flagset
25{
26 /** string that holds the flagset */
27 private $value;
7cca6eec 28
2b1ee50b 29 /** the boundary between flags */
30 private $sep = ",";
7cca6eec 31
32
2b1ee50b 33 /** set flag
34 * @param $flags services FROM coupures
35 * @return VOID
36 */
37 public function __construct($flags = "")
38 {
39 $this->value = $flags;
40 }
7cca6eec 41
42
2b1ee50b 43 /** add flag
44 * @param $flag XXX
45 * @return VOID
46 */
eaf30d86 47 public function addFlag($flag)
2b1ee50b 48 {
49 if (!$flag) return;
50 if (!$this->hasflag($flag)) {
51 if ($this->value)
52 $this->value .= $this->sep;
53 $this->value .= $flag;
54 }
7cca6eec 55 }
7cca6eec 56
57
2b1ee50b 58 /** test si flag ou pas
59 * @param $flag XXX
60 * @return 1 || 0
61 */
eaf30d86 62 public function hasFlag($flag)
2b1ee50b 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;
7cca6eec 70 }
7cca6eec 71
aa5836d7 72 /** test flag combination
73 */
74 public function hasFlagCombination($flag)
75 {
76 $perms = explode(',', $flag);
77 foreach ($perms as $perm)
eaf30d86
PH
78 {
79 $ok = true;
aa5836d7 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;
eaf30d86 88 }
aa5836d7 89 }
eaf30d86 90 return false;
aa5836d7 91 }
7cca6eec 92
2b1ee50b 93 /** remove flag
94 * @param $flag XXX
95 * @return VOID
96 */
eaf30d86 97 public function rmFlag($flag)
2b1ee50b 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;
7cca6eec 111 }
7cca6eec 112
bf517daf 113 /** return the flagset
114 */
115 public function flags()
116 {
117 return $this->value;
118 }
eaf30d86 119}
7cca6eec 120
a7de4ef7 121// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
7cca6eec 122?>